From e195a0e9a6ae0700a7b5595c5b23be9e12dfe3d4 Mon Sep 17 00:00:00 2001 From: GHA Date: Fri, 27 Dec 2024 14:11:24 +0000 Subject: [PATCH] update 208ad4ef409c666c94d797dc80dbb509bc254e44 --- .nojekyll | 0 img/README.md | 17 + img/SPI_timing_diagram2.wikimedia.png | Bin 0 -> 60978 bytes img/address_space.png | Bin 0 -> 300806 bytes img/bus_interface.png | Bin 0 -> 54222 bytes img/bus_interface_atomic.png | Bin 0 -> 57747 bytes img/cfu_r3type_instruction.png | Bin 0 -> 3781 bytes img/cfu_r4type_instruction.png | Bin 0 -> 3960 bytes img/eclipse.png | Bin 0 -> 132828 bytes img/icon.png | Bin 0 -> 1809 bytes img/neopixel_timing.png | Bin 0 -> 4852 bytes img/neorv32_bus.png | Bin 0 -> 148186 bytes img/neorv32_cpu.png | Bin 0 -> 69153 bytes img/neorv32_logo.png | Bin 0 -> 11461 bytes img/neorv32_logo_riscv.png | Bin 0 -> 20451 bytes img/neorv32_logo_riscv_small.png | Bin 0 -> 7084 bytes img/neorv32_logo_small.png | Bin 0 -> 4604 bytes img/neorv32_logo_smcard.jpg | Bin 0 -> 152056 bytes img/neorv32_ocd_complex.png | Bin 0 -> 31569 bytes img/neorv32_processor.png | Bin 0 -> 363414 bytes img/neorv32_test_setup.png | Bin 0 -> 39522 bytes img/onewire_data.png | Bin 0 -> 4481 bytes img/onewire_reset.png | Bin 0 -> 3817 bytes img/ram_layout.png | Bin 0 -> 13837 bytes img/riscv_logo.png | Bin 0 -> 15859 bytes img/riscv_logo_small.png | Bin 0 -> 3484 bytes img/stream_link_interface.png | Bin 0 -> 7801 bytes img/twd_sequences.png | Bin 0 -> 51252 bytes img/vivado_ip_gui.png | Bin 0 -> 67843 bytes img/vivado_ip_soc.png | Bin 0 -> 69772 bytes img/xbus_read.png | Bin 0 -> 21832 bytes img/xbus_write.png | Bin 0 -> 23425 bytes index.html | 22115 ++++++++++++++++ sw/annotated.html | 130 + sw/atomic__test_2main_8c.html | 308 + sw/bc_s.png | Bin 0 -> 676 bytes sw/bc_sd.png | Bin 0 -> 635 bytes sw/bootloader_8c.html | 1188 + sw/bus__explorer_2main_8c.html | 306 + sw/classes.html | 120 + sw/clipboard.js | 61 + sw/closed.png | Bin 0 -> 132 bytes sw/cookie.js | 58 + sw/demo__blink__led_2main_8c.html | 139 + sw/demo__cfs_2main_8c.html | 178 + sw/demo__cfu_2main_8c.html | 600 + sw/demo__clint_2main_8c.html | 195 + sw/demo__crc_2main_8c.html | 168 + sw/demo__dma_2main_8c.html | 212 + sw/demo__emulate__unaligned_2main_8c.html | 216 + sw/demo__gptmr_2main_8c.html | 182 + sw/demo__hpm_2main_8c.html | 161 + sw/demo__neopixel_2main_8c.html | 228 + sw/demo__newlib_2main_8c.html | 185 + sw/demo__onewire_2main_8c.html | 270 + sw/demo__pwm_2main_8c.html | 178 + sw/demo__sdi_2main_8c.html | 202 + sw/demo__slink_2main_8c.html | 182 + sw/demo__spi_2main_8c.html | 261 + sw/demo__spi__irq_2main_8c.html | 192 + sw/demo__trng_2main_8c.html | 261 + sw/demo__twi_2main_8c.html | 248 + sw/demo__wdt_2main_8c.html | 178 + sw/demo__xip_2main_8c.html | 479 + sw/demo__xirq_2main_8c.html | 241 + sw/dhry_8h_source.html | 557 + sw/dir_01cde3d98944a579dc3b5e43a5311a79.html | 110 + sw/dir_01fcd3835fb4e7d9331b722d86291b65.html | 109 + sw/dir_09a89dfa1596b6613cf2c29528a32844.html | 110 + sw/dir_0c6ac14e2254a316d41123f98feeb67b.html | 182 + sw/dir_0d2921e55a1172a4726516961ee96ab5.html | 110 + sw/dir_0f35fd52d2216117815d19d974239550.html | 113 + sw/dir_23212395b5ee0866d2fdd629e0ddeae8.html | 112 + sw/dir_23717ebbabf7a51c0558262947e0fe3b.html | 110 + sw/dir_237db5b95db643499d4c20f0bc5f6a7d.html | 110 + sw/dir_2ba96d3140b089dada6fb9f817b7975f.html | 110 + sw/dir_3b3bafc48b460f797485cc75b94aa81c.html | 112 + sw/dir_4316bb0e553b51b8b65560981547ce0f.html | 110 + sw/dir_449d8ba5f8b78dc90092f20d15a2386a.html | 110 + sw/dir_46981071cfd8ec44311b09fdcf6c06a8.html | 110 + sw/dir_4bd1267d34feeec0f679c16f884588e7.html | 103 + sw/dir_4c113257314015688a865e1bb8429184.html | 110 + sw/dir_5534fa9035f54ab438a41c43d6f7fc7a.html | 110 + sw/dir_6a888d76b0f727dc821f77838927e542.html | 103 + sw/dir_752b1e5d3973bf735fa78bf6b4727df9.html | 194 + sw/dir_78d7bfa405ff3a31fa7539cfd8bc8262.html | 110 + sw/dir_7a2c74f70a4cdf2e836a07048e2f71dd.html | 110 + sw/dir_7d04193005ada6f9450f847f4adb6b5b.html | 111 + sw/dir_8c514361e1f16692c783b23503f30f16.html | 110 + sw/dir_8f848e36ac87ced1c361afcc0549ca32.html | 115 + sw/dir_93967190e0d2e549ceca77007097849b.html | 110 + sw/dir_9a1c128d67c35790e92af404beb936aa.html | 110 + sw/dir_9d04cdc586d6978be343bda7adcdc371.html | 113 + sw/dir_b5eb9f7d151d147efb5dbda58439e4e7.html | 109 + sw/dir_b683da3a5fc966bff32ebf7cda721811.html | 110 + sw/dir_b68ac2efc0c6ed3018151f7bb6c45670.html | 110 + sw/dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html | 110 + sw/dir_bf935196a1ea0ca9cb42aae56d70946a.html | 110 + sw/dir_c2d46947bdd73c33f53326fc5ee3a272.html | 110 + sw/dir_c413aba6cb5da07a571465ba333950af.html | 110 + sw/dir_d4640980cbf1943e4a4aee6e8b810c7a.html | 110 + sw/dir_d68bb921df3f2482fe9ace49b286ab86.html | 110 + sw/dir_e9ffd83269fb7f0c372f5ffbe8545008.html | 113 + sw/dir_ebeff77b922fbb914a1494857a82a38e.html | 110 + sw/dir_eea6eb9fd693422884580f70321908d2.html | 103 + sw/dir_f05036e2ccd24a7119a5bbccebab20b2.html | 103 + sw/dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html | 169 + sw/dir_f28130cc1bab3a9396f0ef9d1631e47b.html | 110 + sw/doc.svg | 12 + sw/docd.svg | 12 + sw/doxygen.css | 2247 ++ sw/doxygen.svg | 28 + sw/doxygen_crawl.html | 2256 ++ sw/dynsections.js | 198 + sw/files.html | 230 + sw/float__corner__test_2main_8c.html | 448 + ...finx__extension__intrinsics_8h_source.html | 918 + sw/floating__point__test_2main_8c.html | 492 + ...rv32__zfinx__extension__intrinsics_8h.html | 1744 ++ ...finx__extension__intrinsics_8h_source.html | 985 + sw/folderclosed.svg | 11 + sw/folderclosedd.svg | 11 + sw/folderopen.svg | 17 + sw/folderopend.svg | 12 + sw/functions.html | 208 + sw/functions_vars.html | 208 + sw/game__of__life_2main_8c.html | 460 + sw/globals.html | 107 + sw/globals_a.html | 104 + sw/globals_b.html | 103 + sw/globals_c.html | 347 + sw/globals_d.html | 139 + sw/globals_defs.html | 101 + sw/globals_defs_b.html | 102 + sw/globals_defs_c.html | 106 + sw/globals_defs_d.html | 115 + sw/globals_defs_e.html | 102 + sw/globals_defs_f.html | 102 + sw/globals_defs_g.html | 105 + sw/globals_defs_i.html | 101 + sw/globals_defs_m.html | 102 + sw/globals_defs_n.html | 158 + sw/globals_defs_o.html | 104 + sw/globals_defs_p.html | 104 + sw/globals_defs_r.html | 111 + sw/globals_defs_s.html | 126 + sw/globals_defs_t.html | 109 + sw/globals_defs_u.html | 119 + sw/globals_defs_w.html | 102 + sw/globals_defs_x.html | 109 + sw/globals_e.html | 116 + sw/globals_enum.html | 168 + sw/globals_eval.html | 335 + sw/globals_eval_d.html | 121 + sw/globals_eval_e.html | 110 + sw/globals_eval_f.html | 102 + sw/globals_eval_g.html | 107 + sw/globals_eval_h.html | 112 + sw/globals_eval_n.html | 130 + sw/globals_eval_o.html | 117 + sw/globals_eval_p.html | 117 + sw/globals_eval_r.html | 129 + sw/globals_eval_s.html | 230 + sw/globals_eval_t.html | 178 + sw/globals_eval_u.html | 137 + sw/globals_eval_w.html | 113 + sw/globals_eval_x.html | 122 + sw/globals_f.html | 104 + sw/globals_func.html | 103 + sw/globals_func_a.html | 102 + sw/globals_func_b.html | 101 + sw/globals_func_c.html | 103 + sw/globals_func_d.html | 102 + sw/globals_func_g.html | 108 + sw/globals_func_h.html | 103 + sw/globals_func_m.html | 104 + sw/globals_func_n.html | 352 + sw/globals_func_p.html | 107 + sw/globals_func_r.html | 148 + sw/globals_func_s.html | 131 + sw/globals_func_t.html | 105 + sw/globals_func_u.html | 102 + sw/globals_func_v.html | 104 + sw/globals_func_w.html | 102 + sw/globals_func_x.html | 111 + sw/globals_g.html | 121 + sw/globals_h.html | 115 + sw/globals_i.html | 102 + sw/globals_k.html | 101 + sw/globals_m.html | 106 + sw/globals_n.html | 484 + sw/globals_o.html | 121 + sw/globals_p.html | 130 + sw/globals_r.html | 189 + sw/globals_s.html | 291 + sw/globals_t.html | 196 + sw/globals_u.html | 159 + sw/globals_v.html | 104 + sw/globals_vars.html | 120 + sw/globals_w.html | 117 + sw/globals_x.html | 144 + sw/hello__world_2main_8c.html | 161 + sw/index.html | 100 + sw/jquery.js | 204 + sw/md_README.html | 333 + sw/menu.js | 134 + sw/menudata.js | 151 + sw/minus.svg | 8 + sw/minusd.svg | 8 + sw/nav_f.png | Bin 0 -> 153 bytes sw/nav_fd.png | Bin 0 -> 169 bytes sw/nav_g.png | Bin 0 -> 95 bytes sw/nav_h.png | Bin 0 -> 98 bytes sw/nav_hd.png | Bin 0 -> 114 bytes sw/navtree.css | 149 + sw/neorv32_8h.html | 1867 ++ sw/neorv32_8h_source.html | 361 + sw/neorv32__aux_8c.html | 267 + sw/neorv32__aux_8h.html | 328 + sw/neorv32__aux_8h_source.html | 154 + sw/neorv32__cfs_8c.html | 142 + sw/neorv32__cfs_8h.html | 172 + sw/neorv32__cfs_8h_source.html | 130 + sw/neorv32__clint_8c.html | 347 + sw/neorv32__clint_8h.html | 377 + sw/neorv32__clint_8h_source.html | 150 + sw/neorv32__cpu_8c.html | 413 + sw/neorv32__cpu_8h.html | 894 + sw/neorv32__cpu_8h_source.html | 299 + sw/neorv32__cpu__amo_8c.html | 414 + sw/neorv32__cpu__amo_8h.html | 496 + sw/neorv32__cpu__amo_8h_source.html | 181 + sw/neorv32__cpu__cfu_8c.html | 138 + sw/neorv32__cpu__cfu_8h.html | 216 + sw/neorv32__cpu__cfu_8h_source.html | 126 + sw/neorv32__cpu__csr_8h.html | 1274 + sw/neorv32__cpu__csr_8h_source.html | 788 + sw/neorv32__crc_8c.html | 255 + sw/neorv32__crc_8h.html | 312 + sw/neorv32__crc_8h_source.html | 157 + sw/neorv32__dma_8h.html | 676 + sw/neorv32__dma_8h_source.html | 228 + sw/neorv32__gpio_8c.html | 296 + sw/neorv32__gpio_8h.html | 326 + sw/neorv32__gpio_8h_source.html | 143 + sw/neorv32__gptmr_8c.html | 236 + sw/neorv32__gptmr_8h.html | 308 + sw/neorv32__gptmr_8h_source.html | 163 + sw/neorv32__intrinsics_8h.html | 361 + sw/neorv32__intrinsics_8h_source.html | 291 + sw/neorv32__legacy_8h.html | 182 + sw/neorv32__legacy_8h_source.html | 126 + sw/neorv32__neoled_8c.html | 371 + sw/neorv32__neoled_8h.html | 554 + sw/neorv32__neoled_8h_source.html | 227 + sw/neorv32__newlib_8c.html | 167 + sw/neorv32__onewire_8c.html | 592 + sw/neorv32__onewire_8h.html | 733 + sw/neorv32__onewire_8h_source.html | 226 + sw/neorv32__pwm_8c.html | 280 + sw/neorv32__pwm_8h.html | 352 + sw/neorv32__pwm_8h_source.html | 160 + sw/neorv32__rte_8c.html | 460 + sw/neorv32__rte_8h.html | 540 + sw/neorv32__rte_8h_source.html | 214 + sw/neorv32__sdi_8c.html | 301 + sw/neorv32__sdi_8h.html | 399 + sw/neorv32__sdi_8h_source.html | 183 + sw/neorv32__slink_8c.html | 485 + sw/neorv32__slink_8h.html | 657 + sw/neorv32__slink_8h_source.html | 235 + sw/neorv32__spi_8c.html | 526 + sw/neorv32__spi_8h.html | 681 + sw/neorv32__spi_8h_source.html | 231 + sw/neorv32__spi__irq_8c.html | 257 + sw/neorv32__spi__irq_8h.html | 301 + sw/neorv32__spi__irq_8h_source.html | 183 + sw/neorv32__sysinfo_8c.html | 164 + sw/neorv32__sysinfo_8h.html | 417 + sw/neorv32__sysinfo_8h_source.html | 258 + sw/neorv32__trng_8c.html | 269 + sw/neorv32__trng_8h.html | 363 + sw/neorv32__trng_8h_source.html | 173 + sw/neorv32__twd_8c.html | 485 + sw/neorv32__twd_8h.html | 618 + sw/neorv32__twd_8h_source.html | 215 + sw/neorv32__twi_8c.html | 476 + sw/neorv32__twi_8h.html | 630 + sw/neorv32__twi_8h_source.html | 224 + sw/neorv32__uart_8c.html | 696 + sw/neorv32__uart_8h.html | 1670 ++ sw/neorv32__uart_8h_source.html | 296 + sw/neorv32__wdt_8c.html | 260 + sw/neorv32__wdt_8h.html | 392 + sw/neorv32__wdt_8h_source.html | 185 + sw/neorv32__xip_8c.html | 312 + sw/neorv32__xip_8h.html | 433 + sw/neorv32__xip_8h_source.html | 199 + sw/neorv32__xirq_8c.html | 431 + sw/neorv32__xirq_8h.html | 422 + sw/neorv32__xirq_8h_source.html | 167 + sw/neorv32_logo_small.png | Bin 0 -> 4604 bytes sw/onewire__aux_8h_source.html | 402 + sw/open.png | Bin 0 -> 123 bytes sw/pages.html | 104 + sw/plus.svg | 9 + sw/plusd.svg | 9 + sw/processor__check_2main_8c.html | 498 + sw/resize.js | 147 + sw/search/all_0.js | 4 + sw/search/all_1.js | 4 + sw/search/all_10.js | 5 + sw/search/all_11.js | 5 + sw/search/all_12.js | 17 + sw/search/all_13.js | 473 + sw/search/all_14.js | 26 + sw/search/all_15.js | 40 + sw/search/all_16.js | 100 + sw/search/all_17.js | 212 + sw/search/all_18.js | 108 + sw/search/all_19.js | 70 + sw/search/all_1a.js | 8 + sw/search/all_1b.js | 21 + sw/search/all_1c.js | 47 + sw/search/all_1d.js | 4 + sw/search/all_2.js | 4 + sw/search/all_3.js | 4 + sw/search/all_4.js | 4 + sw/search/all_5.js | 9 + sw/search/all_6.js | 14 + sw/search/all_7.js | 18 + sw/search/all_8.js | 8 + sw/search/all_9.js | 257 + sw/search/all_a.js | 50 + sw/search/all_b.js | 22 + sw/search/all_c.js | 12 + sw/search/all_d.js | 32 + sw/search/all_e.js | 29 + sw/search/all_f.js | 14 + sw/search/classes_0.js | 4 + sw/search/classes_1.js | 4 + sw/search/classes_2.js | 23 + sw/search/classes_3.js | 4 + sw/search/classes_4.js | 6 + sw/search/classes_5.js | 4 + sw/search/close.svg | 18 + sw/search/defines_0.js | 4 + sw/search/defines_1.js | 5 + sw/search/defines_10.js | 5 + sw/search/defines_11.js | 12 + sw/search/defines_2.js | 9 + sw/search/defines_3.js | 18 + sw/search/defines_4.js | 5 + sw/search/defines_5.js | 5 + sw/search/defines_6.js | 8 + sw/search/defines_7.js | 4 + sw/search/defines_8.js | 5 + sw/search/defines_9.js | 61 + sw/search/defines_a.js | 7 + sw/search/defines_b.js | 7 + sw/search/defines_c.js | 14 + sw/search/defines_d.js | 29 + sw/search/defines_e.js | 12 + sw/search/defines_f.js | 22 + sw/search/enums_0.js | 4 + sw/search/enums_1.js | 5 + sw/search/enums_2.js | 47 + sw/search/enums_3.js | 7 + sw/search/enums_4.js | 4 + sw/search/enumvalues_0.js | 238 + sw/search/enumvalues_1.js | 24 + sw/search/enumvalues_2.js | 13 + sw/search/enumvalues_3.js | 5 + sw/search/enumvalues_4.js | 10 + sw/search/enumvalues_5.js | 15 + sw/search/enumvalues_6.js | 33 + sw/search/enumvalues_7.js | 20 + sw/search/enumvalues_8.js | 20 + sw/search/enumvalues_9.js | 32 + sw/search/enumvalues_a.js | 133 + sw/search/enumvalues_b.js | 81 + sw/search/enumvalues_c.js | 40 + sw/search/enumvalues_d.js | 16 + sw/search/enumvalues_e.js | 25 + sw/search/files_0.js | 4 + sw/search/files_1.js | 4 + sw/search/files_2.js | 60 + sw/search/functions_0.js | 6 + sw/search/functions_1.js | 5 + sw/search/functions_10.js | 14 + sw/search/functions_2.js | 4 + sw/search/functions_3.js | 6 + sw/search/functions_4.js | 5 + sw/search/functions_5.js | 11 + sw/search/functions_6.js | 6 + sw/search/functions_7.js | 7 + sw/search/functions_8.js | 255 + sw/search/functions_9.js | 10 + sw/search/functions_a.js | 51 + sw/search/functions_b.js | 34 + sw/search/functions_c.js | 8 + sw/search/functions_d.js | 5 + sw/search/functions_e.js | 7 + sw/search/functions_f.js | 5 + sw/search/mag.svg | 24 + sw/search/mag_d.svg | 24 + sw/search/mag_sel.svg | 31 + sw/search/mag_seld.svg | 31 + sw/search/pages_0.js | 4 + sw/search/search.css | 291 + sw/search/search.js | 694 + sw/search/searchdata.js | 39 + sw/search/variables_0.js | 7 + sw/search/variables_1.js | 4 + sw/search/variables_10.js | 11 + sw/search/variables_11.js | 10 + sw/search/variables_12.js | 4 + sw/search/variables_13.js | 4 + sw/search/variables_14.js | 4 + sw/search/variables_2.js | 4 + sw/search/variables_3.js | 10 + sw/search/variables_4.js | 11 + sw/search/variables_5.js | 7 + sw/search/variables_6.js | 4 + sw/search/variables_7.js | 4 + sw/search/variables_8.js | 4 + sw/search/variables_9.js | 5 + sw/search/variables_a.js | 4 + sw/search/variables_b.js | 10 + sw/search/variables_c.js | 4 + sw/search/variables_d.js | 7 + sw/search/variables_e.js | 8 + sw/search/variables_f.js | 7 + sw/splitbar.png | Bin 0 -> 314 bytes sw/splitbard.png | Bin 0 -> 282 bytes sw/structdate__t.html | 228 + sw/structneorv32__cfs__t.html | 130 + sw/structneorv32__clint__t.html | 164 + sw/structneorv32__crc__t.html | 181 + sw/structneorv32__dma__t.html | 181 + sw/structneorv32__gpio__t.html | 147 + sw/structneorv32__gptmr__t.html | 164 + sw/structneorv32__neoled__t.html | 147 + sw/structneorv32__onewire__t.html | 147 + sw/structneorv32__pwm__t.html | 130 + sw/structneorv32__sdi__t.html | 147 + sw/structneorv32__slink__t.html | 181 + sw/structneorv32__spi__t.html | 147 + sw/structneorv32__sysinfo__t.html | 181 + sw/structneorv32__trng__t.html | 147 + sw/structneorv32__twd__t.html | 147 + sw/structneorv32__twi__t.html | 147 + sw/structneorv32__uart__t.html | 147 + sw/structneorv32__wdt__t.html | 147 + sw/structneorv32__xip__t.html | 181 + sw/structneorv32__xirq__t.html | 181 + sw/structrecord.html | 155 + sw/structt__neorv32__spi.html | 228 + sw/sync_off.png | Bin 0 -> 853 bytes sw/sync_on.png | Bin 0 -> 845 bytes sw/tab_a.png | Bin 0 -> 142 bytes sw/tab_ad.png | Bin 0 -> 135 bytes sw/tab_b.png | Bin 0 -> 169 bytes sw/tab_bd.png | Bin 0 -> 173 bytes sw/tab_h.png | Bin 0 -> 177 bytes sw/tab_hd.png | Bin 0 -> 180 bytes sw/tab_s.png | Bin 0 -> 184 bytes sw/tab_sd.png | Bin 0 -> 188 bytes sw/tabs.css | 1 + sw/unionfloat__conv__t.html | 148 + sw/unionsubwords16__t.html | 114 + sw/unionsubwords32__t.html | 117 + sw/unionsubwords64__t.html | 120 + ug/index.html | 4499 ++++ 474 files changed, 103652 insertions(+) create mode 100644 .nojekyll create mode 100644 img/README.md create mode 100644 img/SPI_timing_diagram2.wikimedia.png create mode 100644 img/address_space.png create mode 100644 img/bus_interface.png create mode 100644 img/bus_interface_atomic.png create mode 100644 img/cfu_r3type_instruction.png create mode 100644 img/cfu_r4type_instruction.png create mode 100644 img/eclipse.png create mode 100644 img/icon.png create mode 100644 img/neopixel_timing.png create mode 100644 img/neorv32_bus.png create mode 100644 img/neorv32_cpu.png create mode 100644 img/neorv32_logo.png create mode 100644 img/neorv32_logo_riscv.png create mode 100644 img/neorv32_logo_riscv_small.png create mode 100644 img/neorv32_logo_small.png create mode 100644 img/neorv32_logo_smcard.jpg create mode 100644 img/neorv32_ocd_complex.png create mode 100644 img/neorv32_processor.png create mode 100644 img/neorv32_test_setup.png create mode 100644 img/onewire_data.png create mode 100644 img/onewire_reset.png create mode 100644 img/ram_layout.png create mode 100644 img/riscv_logo.png create mode 100644 img/riscv_logo_small.png create mode 100644 img/stream_link_interface.png create mode 100644 img/twd_sequences.png create mode 100644 img/vivado_ip_gui.png create mode 100644 img/vivado_ip_soc.png create mode 100644 img/xbus_read.png create mode 100644 img/xbus_write.png create mode 100644 index.html create mode 100644 sw/annotated.html create mode 100644 sw/atomic__test_2main_8c.html create mode 100644 sw/bc_s.png create mode 100644 sw/bc_sd.png create mode 100644 sw/bootloader_8c.html create mode 100644 sw/bus__explorer_2main_8c.html create mode 100644 sw/classes.html create mode 100644 sw/clipboard.js create mode 100644 sw/closed.png create mode 100644 sw/cookie.js create mode 100644 sw/demo__blink__led_2main_8c.html create mode 100644 sw/demo__cfs_2main_8c.html create mode 100644 sw/demo__cfu_2main_8c.html create mode 100644 sw/demo__clint_2main_8c.html create mode 100644 sw/demo__crc_2main_8c.html create mode 100644 sw/demo__dma_2main_8c.html create mode 100644 sw/demo__emulate__unaligned_2main_8c.html create mode 100644 sw/demo__gptmr_2main_8c.html create mode 100644 sw/demo__hpm_2main_8c.html create mode 100644 sw/demo__neopixel_2main_8c.html create mode 100644 sw/demo__newlib_2main_8c.html create mode 100644 sw/demo__onewire_2main_8c.html create mode 100644 sw/demo__pwm_2main_8c.html create mode 100644 sw/demo__sdi_2main_8c.html create mode 100644 sw/demo__slink_2main_8c.html create mode 100644 sw/demo__spi_2main_8c.html create mode 100644 sw/demo__spi__irq_2main_8c.html create mode 100644 sw/demo__trng_2main_8c.html create mode 100644 sw/demo__twi_2main_8c.html create mode 100644 sw/demo__wdt_2main_8c.html create mode 100644 sw/demo__xip_2main_8c.html create mode 100644 sw/demo__xirq_2main_8c.html create mode 100644 sw/dhry_8h_source.html create mode 100644 sw/dir_01cde3d98944a579dc3b5e43a5311a79.html create mode 100644 sw/dir_01fcd3835fb4e7d9331b722d86291b65.html create mode 100644 sw/dir_09a89dfa1596b6613cf2c29528a32844.html create mode 100644 sw/dir_0c6ac14e2254a316d41123f98feeb67b.html create mode 100644 sw/dir_0d2921e55a1172a4726516961ee96ab5.html create mode 100644 sw/dir_0f35fd52d2216117815d19d974239550.html create mode 100644 sw/dir_23212395b5ee0866d2fdd629e0ddeae8.html create mode 100644 sw/dir_23717ebbabf7a51c0558262947e0fe3b.html create mode 100644 sw/dir_237db5b95db643499d4c20f0bc5f6a7d.html create mode 100644 sw/dir_2ba96d3140b089dada6fb9f817b7975f.html create mode 100644 sw/dir_3b3bafc48b460f797485cc75b94aa81c.html create mode 100644 sw/dir_4316bb0e553b51b8b65560981547ce0f.html create mode 100644 sw/dir_449d8ba5f8b78dc90092f20d15a2386a.html create mode 100644 sw/dir_46981071cfd8ec44311b09fdcf6c06a8.html create mode 100644 sw/dir_4bd1267d34feeec0f679c16f884588e7.html create mode 100644 sw/dir_4c113257314015688a865e1bb8429184.html create mode 100644 sw/dir_5534fa9035f54ab438a41c43d6f7fc7a.html create mode 100644 sw/dir_6a888d76b0f727dc821f77838927e542.html create mode 100644 sw/dir_752b1e5d3973bf735fa78bf6b4727df9.html create mode 100644 sw/dir_78d7bfa405ff3a31fa7539cfd8bc8262.html create mode 100644 sw/dir_7a2c74f70a4cdf2e836a07048e2f71dd.html create mode 100644 sw/dir_7d04193005ada6f9450f847f4adb6b5b.html create mode 100644 sw/dir_8c514361e1f16692c783b23503f30f16.html create mode 100644 sw/dir_8f848e36ac87ced1c361afcc0549ca32.html create mode 100644 sw/dir_93967190e0d2e549ceca77007097849b.html create mode 100644 sw/dir_9a1c128d67c35790e92af404beb936aa.html create mode 100644 sw/dir_9d04cdc586d6978be343bda7adcdc371.html create mode 100644 sw/dir_b5eb9f7d151d147efb5dbda58439e4e7.html create mode 100644 sw/dir_b683da3a5fc966bff32ebf7cda721811.html create mode 100644 sw/dir_b68ac2efc0c6ed3018151f7bb6c45670.html create mode 100644 sw/dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html create mode 100644 sw/dir_bf935196a1ea0ca9cb42aae56d70946a.html create mode 100644 sw/dir_c2d46947bdd73c33f53326fc5ee3a272.html create mode 100644 sw/dir_c413aba6cb5da07a571465ba333950af.html create mode 100644 sw/dir_d4640980cbf1943e4a4aee6e8b810c7a.html create mode 100644 sw/dir_d68bb921df3f2482fe9ace49b286ab86.html create mode 100644 sw/dir_e9ffd83269fb7f0c372f5ffbe8545008.html create mode 100644 sw/dir_ebeff77b922fbb914a1494857a82a38e.html create mode 100644 sw/dir_eea6eb9fd693422884580f70321908d2.html create mode 100644 sw/dir_f05036e2ccd24a7119a5bbccebab20b2.html create mode 100644 sw/dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html create mode 100644 sw/dir_f28130cc1bab3a9396f0ef9d1631e47b.html create mode 100644 sw/doc.svg create mode 100644 sw/docd.svg create mode 100644 sw/doxygen.css create mode 100644 sw/doxygen.svg create mode 100644 sw/doxygen_crawl.html create mode 100644 sw/dynsections.js create mode 100644 sw/files.html create mode 100644 sw/float__corner__test_2main_8c.html create mode 100644 sw/float__corner__test_2neorv32__zfinx__extension__intrinsics_8h_source.html create mode 100644 sw/floating__point__test_2main_8c.html create mode 100644 sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html create mode 100644 sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h_source.html create mode 100644 sw/folderclosed.svg create mode 100644 sw/folderclosedd.svg create mode 100644 sw/folderopen.svg create mode 100644 sw/folderopend.svg create mode 100644 sw/functions.html create mode 100644 sw/functions_vars.html create mode 100644 sw/game__of__life_2main_8c.html create mode 100644 sw/globals.html create mode 100644 sw/globals_a.html create mode 100644 sw/globals_b.html create mode 100644 sw/globals_c.html create mode 100644 sw/globals_d.html create mode 100644 sw/globals_defs.html create mode 100644 sw/globals_defs_b.html create mode 100644 sw/globals_defs_c.html create mode 100644 sw/globals_defs_d.html create mode 100644 sw/globals_defs_e.html create mode 100644 sw/globals_defs_f.html create mode 100644 sw/globals_defs_g.html create mode 100644 sw/globals_defs_i.html create mode 100644 sw/globals_defs_m.html create mode 100644 sw/globals_defs_n.html create mode 100644 sw/globals_defs_o.html create mode 100644 sw/globals_defs_p.html create mode 100644 sw/globals_defs_r.html create mode 100644 sw/globals_defs_s.html create mode 100644 sw/globals_defs_t.html create mode 100644 sw/globals_defs_u.html create mode 100644 sw/globals_defs_w.html create mode 100644 sw/globals_defs_x.html create mode 100644 sw/globals_e.html create mode 100644 sw/globals_enum.html create mode 100644 sw/globals_eval.html create mode 100644 sw/globals_eval_d.html create mode 100644 sw/globals_eval_e.html create mode 100644 sw/globals_eval_f.html create mode 100644 sw/globals_eval_g.html create mode 100644 sw/globals_eval_h.html create mode 100644 sw/globals_eval_n.html create mode 100644 sw/globals_eval_o.html create mode 100644 sw/globals_eval_p.html create mode 100644 sw/globals_eval_r.html create mode 100644 sw/globals_eval_s.html create mode 100644 sw/globals_eval_t.html create mode 100644 sw/globals_eval_u.html create mode 100644 sw/globals_eval_w.html create mode 100644 sw/globals_eval_x.html create mode 100644 sw/globals_f.html create mode 100644 sw/globals_func.html create mode 100644 sw/globals_func_a.html create mode 100644 sw/globals_func_b.html create mode 100644 sw/globals_func_c.html create mode 100644 sw/globals_func_d.html create mode 100644 sw/globals_func_g.html create mode 100644 sw/globals_func_h.html create mode 100644 sw/globals_func_m.html create mode 100644 sw/globals_func_n.html create mode 100644 sw/globals_func_p.html create mode 100644 sw/globals_func_r.html create mode 100644 sw/globals_func_s.html create mode 100644 sw/globals_func_t.html create mode 100644 sw/globals_func_u.html create mode 100644 sw/globals_func_v.html create mode 100644 sw/globals_func_w.html create mode 100644 sw/globals_func_x.html create mode 100644 sw/globals_g.html create mode 100644 sw/globals_h.html create mode 100644 sw/globals_i.html create mode 100644 sw/globals_k.html create mode 100644 sw/globals_m.html create mode 100644 sw/globals_n.html create mode 100644 sw/globals_o.html create mode 100644 sw/globals_p.html create mode 100644 sw/globals_r.html create mode 100644 sw/globals_s.html create mode 100644 sw/globals_t.html create mode 100644 sw/globals_u.html create mode 100644 sw/globals_v.html create mode 100644 sw/globals_vars.html create mode 100644 sw/globals_w.html create mode 100644 sw/globals_x.html create mode 100644 sw/hello__world_2main_8c.html create mode 100644 sw/index.html create mode 100644 sw/jquery.js create mode 100644 sw/md_README.html create mode 100644 sw/menu.js create mode 100644 sw/menudata.js create mode 100644 sw/minus.svg create mode 100644 sw/minusd.svg create mode 100644 sw/nav_f.png create mode 100644 sw/nav_fd.png create mode 100644 sw/nav_g.png create mode 100644 sw/nav_h.png create mode 100644 sw/nav_hd.png create mode 100644 sw/navtree.css create mode 100644 sw/neorv32_8h.html create mode 100644 sw/neorv32_8h_source.html create mode 100644 sw/neorv32__aux_8c.html create mode 100644 sw/neorv32__aux_8h.html create mode 100644 sw/neorv32__aux_8h_source.html create mode 100644 sw/neorv32__cfs_8c.html create mode 100644 sw/neorv32__cfs_8h.html create mode 100644 sw/neorv32__cfs_8h_source.html create mode 100644 sw/neorv32__clint_8c.html create mode 100644 sw/neorv32__clint_8h.html create mode 100644 sw/neorv32__clint_8h_source.html create mode 100644 sw/neorv32__cpu_8c.html create mode 100644 sw/neorv32__cpu_8h.html create mode 100644 sw/neorv32__cpu_8h_source.html create mode 100644 sw/neorv32__cpu__amo_8c.html create mode 100644 sw/neorv32__cpu__amo_8h.html create mode 100644 sw/neorv32__cpu__amo_8h_source.html create mode 100644 sw/neorv32__cpu__cfu_8c.html create mode 100644 sw/neorv32__cpu__cfu_8h.html create mode 100644 sw/neorv32__cpu__cfu_8h_source.html create mode 100644 sw/neorv32__cpu__csr_8h.html create mode 100644 sw/neorv32__cpu__csr_8h_source.html create mode 100644 sw/neorv32__crc_8c.html create mode 100644 sw/neorv32__crc_8h.html create mode 100644 sw/neorv32__crc_8h_source.html create mode 100644 sw/neorv32__dma_8h.html create mode 100644 sw/neorv32__dma_8h_source.html create mode 100644 sw/neorv32__gpio_8c.html create mode 100644 sw/neorv32__gpio_8h.html create mode 100644 sw/neorv32__gpio_8h_source.html create mode 100644 sw/neorv32__gptmr_8c.html create mode 100644 sw/neorv32__gptmr_8h.html create mode 100644 sw/neorv32__gptmr_8h_source.html create mode 100644 sw/neorv32__intrinsics_8h.html create mode 100644 sw/neorv32__intrinsics_8h_source.html create mode 100644 sw/neorv32__legacy_8h.html create mode 100644 sw/neorv32__legacy_8h_source.html create mode 100644 sw/neorv32__neoled_8c.html create mode 100644 sw/neorv32__neoled_8h.html create mode 100644 sw/neorv32__neoled_8h_source.html create mode 100644 sw/neorv32__newlib_8c.html create mode 100644 sw/neorv32__onewire_8c.html create mode 100644 sw/neorv32__onewire_8h.html create mode 100644 sw/neorv32__onewire_8h_source.html create mode 100644 sw/neorv32__pwm_8c.html create mode 100644 sw/neorv32__pwm_8h.html create mode 100644 sw/neorv32__pwm_8h_source.html create mode 100644 sw/neorv32__rte_8c.html create mode 100644 sw/neorv32__rte_8h.html create mode 100644 sw/neorv32__rte_8h_source.html create mode 100644 sw/neorv32__sdi_8c.html create mode 100644 sw/neorv32__sdi_8h.html create mode 100644 sw/neorv32__sdi_8h_source.html create mode 100644 sw/neorv32__slink_8c.html create mode 100644 sw/neorv32__slink_8h.html create mode 100644 sw/neorv32__slink_8h_source.html create mode 100644 sw/neorv32__spi_8c.html create mode 100644 sw/neorv32__spi_8h.html create mode 100644 sw/neorv32__spi_8h_source.html create mode 100644 sw/neorv32__spi__irq_8c.html create mode 100644 sw/neorv32__spi__irq_8h.html create mode 100644 sw/neorv32__spi__irq_8h_source.html create mode 100644 sw/neorv32__sysinfo_8c.html create mode 100644 sw/neorv32__sysinfo_8h.html create mode 100644 sw/neorv32__sysinfo_8h_source.html create mode 100644 sw/neorv32__trng_8c.html create mode 100644 sw/neorv32__trng_8h.html create mode 100644 sw/neorv32__trng_8h_source.html create mode 100644 sw/neorv32__twd_8c.html create mode 100644 sw/neorv32__twd_8h.html create mode 100644 sw/neorv32__twd_8h_source.html create mode 100644 sw/neorv32__twi_8c.html create mode 100644 sw/neorv32__twi_8h.html create mode 100644 sw/neorv32__twi_8h_source.html create mode 100644 sw/neorv32__uart_8c.html create mode 100644 sw/neorv32__uart_8h.html create mode 100644 sw/neorv32__uart_8h_source.html create mode 100644 sw/neorv32__wdt_8c.html create mode 100644 sw/neorv32__wdt_8h.html create mode 100644 sw/neorv32__wdt_8h_source.html create mode 100644 sw/neorv32__xip_8c.html create mode 100644 sw/neorv32__xip_8h.html create mode 100644 sw/neorv32__xip_8h_source.html create mode 100644 sw/neorv32__xirq_8c.html create mode 100644 sw/neorv32__xirq_8h.html create mode 100644 sw/neorv32__xirq_8h_source.html create mode 100644 sw/neorv32_logo_small.png create mode 100644 sw/onewire__aux_8h_source.html create mode 100644 sw/open.png create mode 100644 sw/pages.html create mode 100644 sw/plus.svg create mode 100644 sw/plusd.svg create mode 100644 sw/processor__check_2main_8c.html create mode 100644 sw/resize.js create mode 100644 sw/search/all_0.js create mode 100644 sw/search/all_1.js create mode 100644 sw/search/all_10.js create mode 100644 sw/search/all_11.js create mode 100644 sw/search/all_12.js create mode 100644 sw/search/all_13.js create mode 100644 sw/search/all_14.js create mode 100644 sw/search/all_15.js create mode 100644 sw/search/all_16.js create mode 100644 sw/search/all_17.js create mode 100644 sw/search/all_18.js create mode 100644 sw/search/all_19.js create mode 100644 sw/search/all_1a.js create mode 100644 sw/search/all_1b.js create mode 100644 sw/search/all_1c.js create mode 100644 sw/search/all_1d.js create mode 100644 sw/search/all_2.js create mode 100644 sw/search/all_3.js create mode 100644 sw/search/all_4.js create mode 100644 sw/search/all_5.js create mode 100644 sw/search/all_6.js create mode 100644 sw/search/all_7.js create mode 100644 sw/search/all_8.js create mode 100644 sw/search/all_9.js create mode 100644 sw/search/all_a.js create mode 100644 sw/search/all_b.js create mode 100644 sw/search/all_c.js create mode 100644 sw/search/all_d.js create mode 100644 sw/search/all_e.js create mode 100644 sw/search/all_f.js create mode 100644 sw/search/classes_0.js create mode 100644 sw/search/classes_1.js create mode 100644 sw/search/classes_2.js create mode 100644 sw/search/classes_3.js create mode 100644 sw/search/classes_4.js create mode 100644 sw/search/classes_5.js create mode 100644 sw/search/close.svg create mode 100644 sw/search/defines_0.js create mode 100644 sw/search/defines_1.js create mode 100644 sw/search/defines_10.js create mode 100644 sw/search/defines_11.js create mode 100644 sw/search/defines_2.js create mode 100644 sw/search/defines_3.js create mode 100644 sw/search/defines_4.js create mode 100644 sw/search/defines_5.js create mode 100644 sw/search/defines_6.js create mode 100644 sw/search/defines_7.js create mode 100644 sw/search/defines_8.js create mode 100644 sw/search/defines_9.js create mode 100644 sw/search/defines_a.js create mode 100644 sw/search/defines_b.js create mode 100644 sw/search/defines_c.js create mode 100644 sw/search/defines_d.js create mode 100644 sw/search/defines_e.js create mode 100644 sw/search/defines_f.js create mode 100644 sw/search/enums_0.js create mode 100644 sw/search/enums_1.js create mode 100644 sw/search/enums_2.js create mode 100644 sw/search/enums_3.js create mode 100644 sw/search/enums_4.js create mode 100644 sw/search/enumvalues_0.js create mode 100644 sw/search/enumvalues_1.js create mode 100644 sw/search/enumvalues_2.js create mode 100644 sw/search/enumvalues_3.js create mode 100644 sw/search/enumvalues_4.js create mode 100644 sw/search/enumvalues_5.js create mode 100644 sw/search/enumvalues_6.js create mode 100644 sw/search/enumvalues_7.js create mode 100644 sw/search/enumvalues_8.js create mode 100644 sw/search/enumvalues_9.js create mode 100644 sw/search/enumvalues_a.js create mode 100644 sw/search/enumvalues_b.js create mode 100644 sw/search/enumvalues_c.js create mode 100644 sw/search/enumvalues_d.js create mode 100644 sw/search/enumvalues_e.js create mode 100644 sw/search/files_0.js create mode 100644 sw/search/files_1.js create mode 100644 sw/search/files_2.js create mode 100644 sw/search/functions_0.js create mode 100644 sw/search/functions_1.js create mode 100644 sw/search/functions_10.js create mode 100644 sw/search/functions_2.js create mode 100644 sw/search/functions_3.js create mode 100644 sw/search/functions_4.js create mode 100644 sw/search/functions_5.js create mode 100644 sw/search/functions_6.js create mode 100644 sw/search/functions_7.js create mode 100644 sw/search/functions_8.js create mode 100644 sw/search/functions_9.js create mode 100644 sw/search/functions_a.js create mode 100644 sw/search/functions_b.js create mode 100644 sw/search/functions_c.js create mode 100644 sw/search/functions_d.js create mode 100644 sw/search/functions_e.js create mode 100644 sw/search/functions_f.js create mode 100644 sw/search/mag.svg create mode 100644 sw/search/mag_d.svg create mode 100644 sw/search/mag_sel.svg create mode 100644 sw/search/mag_seld.svg create mode 100644 sw/search/pages_0.js create mode 100644 sw/search/search.css create mode 100644 sw/search/search.js create mode 100644 sw/search/searchdata.js create mode 100644 sw/search/variables_0.js create mode 100644 sw/search/variables_1.js create mode 100644 sw/search/variables_10.js create mode 100644 sw/search/variables_11.js create mode 100644 sw/search/variables_12.js create mode 100644 sw/search/variables_13.js create mode 100644 sw/search/variables_14.js create mode 100644 sw/search/variables_2.js create mode 100644 sw/search/variables_3.js create mode 100644 sw/search/variables_4.js create mode 100644 sw/search/variables_5.js create mode 100644 sw/search/variables_6.js create mode 100644 sw/search/variables_7.js create mode 100644 sw/search/variables_8.js create mode 100644 sw/search/variables_9.js create mode 100644 sw/search/variables_a.js create mode 100644 sw/search/variables_b.js create mode 100644 sw/search/variables_c.js create mode 100644 sw/search/variables_d.js create mode 100644 sw/search/variables_e.js create mode 100644 sw/search/variables_f.js create mode 100644 sw/splitbar.png create mode 100644 sw/splitbard.png create mode 100644 sw/structdate__t.html create mode 100644 sw/structneorv32__cfs__t.html create mode 100644 sw/structneorv32__clint__t.html create mode 100644 sw/structneorv32__crc__t.html create mode 100644 sw/structneorv32__dma__t.html create mode 100644 sw/structneorv32__gpio__t.html create mode 100644 sw/structneorv32__gptmr__t.html create mode 100644 sw/structneorv32__neoled__t.html create mode 100644 sw/structneorv32__onewire__t.html create mode 100644 sw/structneorv32__pwm__t.html create mode 100644 sw/structneorv32__sdi__t.html create mode 100644 sw/structneorv32__slink__t.html create mode 100644 sw/structneorv32__spi__t.html create mode 100644 sw/structneorv32__sysinfo__t.html create mode 100644 sw/structneorv32__trng__t.html create mode 100644 sw/structneorv32__twd__t.html create mode 100644 sw/structneorv32__twi__t.html create mode 100644 sw/structneorv32__uart__t.html create mode 100644 sw/structneorv32__wdt__t.html create mode 100644 sw/structneorv32__xip__t.html create mode 100644 sw/structneorv32__xirq__t.html create mode 100644 sw/structrecord.html create mode 100644 sw/structt__neorv32__spi.html create mode 100644 sw/sync_off.png create mode 100644 sw/sync_on.png create mode 100644 sw/tab_a.png create mode 100644 sw/tab_ad.png create mode 100644 sw/tab_b.png create mode 100644 sw/tab_bd.png create mode 100644 sw/tab_h.png create mode 100644 sw/tab_hd.png create mode 100644 sw/tab_s.png create mode 100644 sw/tab_sd.png create mode 100644 sw/tabs.css create mode 100644 sw/unionfloat__conv__t.html create mode 100644 sw/unionsubwords16__t.html create mode 100644 sw/unionsubwords32__t.html create mode 100644 sw/unionsubwords64__t.html create mode 100644 ug/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/img/README.md b/img/README.md new file mode 100644 index 0000000000..59b8b0f5cd --- /dev/null +++ b/img/README.md @@ -0,0 +1,17 @@ +## :copyright: Image License and Copyright Notifications + +Figures are own work if not otherwise stated; see the +[project's license](https://github.com/stnolting/neorv32/blob/main/LICENSE). +No copyright infringement intended. + +- `SPI_timing_diagram2.wikimedia.png` + - source: https://en.wikipedia.org/wiki/File:SPI_timing_diagram2.svg + - license: Creative Commons: https://en.wikipedia.org/wiki/Creative_Commons, Attribution-Share Alike 3.0 Unported: https://creativecommons.org/licenses/by-sa/3.0/deed.en + +- `riscv_logo.png` and `riscv_logo_small.png` + - source: https://riscv.org/risc-v-logo/ + - license: https://riscv.org/about/risc-v-branding-guidelines/ + +- `neorv32_logo_smcard.jpg` + - source: background image by https://pixabay.com + - license: Pixabay license diff --git a/img/SPI_timing_diagram2.wikimedia.png b/img/SPI_timing_diagram2.wikimedia.png new file mode 100644 index 0000000000000000000000000000000000000000..0e441147e5bc4213ead50a4ccbf1dda1dd80a057 GIT binary patch literal 60978 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 H_yVme8`eQXZV8)8)WQnK}etqifPCK zOw0Mr0IgO)13yo{#gBJdVYOBqcLI$DhOm!9pNPirQCA|!iazBWpDajtH7x%wSIHoU zcx#FI9>MAP^za9108jv{9SB$;+T4;8(+g*;eaY$`(|8lOufLAMvX3;W`n}+Mi16Fx zM+_3DW(h4_{J{;^ykQi(f^T?#n}?zOF4?Tt>zRoLF~!=7;79=Q;=VuUIqyB7K^>)W zs_D~ATv1>xsXP*=QvNx|Z(SNz5o{@?qR6zJY#%j7twP0rdpQs{qxzRsInK9APYI%wl z&3T|6E4l3`vIfZK0BjSmoEfuUpPqq4FCNxSWMbkoz)g#bivbgoJ~$r%sfG@71nukT zBpjV`IAI3B;E)xy&l}A)8Z)KaM5=BZ7Nax;Oz&xRDVNk|08bF#!_Z zP-aPPPs&v07 znUICrKY%OLuxyRyf2+OyF!_n!#|M(GSkD4KPNWM8FA}B6?Mex++2>Z0tNgfXi_P;w z#sgU7B$5F%=iOI3IqvNjS z=M+Av`MJ60pP-dyOP{r)z1@h9;%B(DRFTM?_kgvb`(32(bLmz#!s!KFx#qMQI1&UX zYMW^(nLwaM6QHqa*Rs`EZ*SioNyTJ8++4_r(^utKgVPf_{}ME95Qli(SQ|F%TU=aR zt-~<{0q>yT%x&Eh2en2)VLvf*N@!`h! zUQ?R1Lh=JWyMAeCIfL0uEnlasNOR!>2@5)50YWddtD*XO?8I}l@xO+4Tg=(_%FX$_W9a$~sYo0pv>bx= zlq8E^`>@He9;PDww`R{D2c8XS9gPh{F;#sGV$lc0R(=D%UV)yiCwFZw2CfkA9%5;B zr*BybyjY@t{ND9$0nrLzww#D(49!guOe;FNx(WPXJ1QJvoP^SG-x7{9-OBTTsc{KK zjHh*uQ+Q7ySwdqXuEn}yEop0zg$#Gi`Dk+4sTvT#WP!v7UOJJZKTJ!nbe32uo-<0@ z?CvQ1d^R6hQY>=tpl5k@1v>TrH+mtpToO(4_QIcT=tu9Pf@H2%g! zrgd%C3FaJyelWo5Rzo9^kImLJSR^G-z||#>d7f7u!EF+=YT_(J_0av@4{tV}POON; zSfif4?ihH&s~))5rA^5x_FZ;Qn* za1WMYXD`}R>jJqX#$cb2Zm?-N;k}sk*m{QJdg+VvX}d=-4$c{0?~V@5+AeQ6d+?*? zf9hhQhNEOmElTdeg^@2DWq;-x%_M8zQBq4f)6LaDb@gYwgirmK2}{IcUvi-}oeSkL z`@-aFbMt6IequLIi%4Ss7X&TRlO)nKnyW^lf#VYk@1AEqxS^B(=N*EercQOcv@d7V zO32E`;#NVB$Hxb*s#?s$KHo;u(!8UjuShtT3K#8e&wkFJetu){DDzu)Z>Q`Dw%)Ir z{C8@7Dt&=L?$>z)ZzVSG*fxIRS!KJ8dVMzNja4Oq@)Mg0byin%$?84+8!Q;{_4T8h zb(k{YoNIm=M*DIXlsuoYDYLiYH{K32i(>q@j)Sb~v&QTFWkK~dCps&J5;47rj}i$( z1wgJzq#3I=9H*7*M{#0w6fv3aFQ+x+maLUYSW$Eo^naaJw9u@oOl!XXk(kU0&m31b zkI()4s&D&$D>Q1>-kD9uKsIIopY&UG`#Z?j{D&FSHC|MtQ@ zH#Bh=f@))T;eL~Y7R@{vV>jd2^<4Ee2akAqw9w)F;yCwUYVbdT4fwxpqW@R=jrX7y zME^8=o%eur`ajYTv^azk#3BEsMo8Ted<@=zkaQ;;-7ah%?!?6>MbnPuyq{1J5Sq5x`Fr3!l{B8GX*mFXEamd5924X)EquX zSK{=AGpJsq>FX=j_3GDIwDF%v`Rl)q>-$`Lfq@hvE6o>Cevz+#GgsYA;1*KI=O9Nm zLm#`5>)`L}QYAwZL~q-A9`?|clA-08=%h{c9$}Ir9qWRJ8Tul0bUcTKh6_5^5wJHr zK=2f(49|b5yL$B-L2p$PnAsIG^bs*P4lgvS6iY`C#u*p0n0&UY8QtCq zmHj*FyCt4{LXNl+t6TTHkYgzH@ja?HOGJ!oL#qoo6!!NA`{`en-sE<7EX58iF1L76 zIhNS|_BaVEXQ;cCzhx-HUgq|d%+#Hubo%WOoOV%EXP|_LM9WVjmrc#PTZpEPUq~kj zkJAIe+N!?;yn<>|IK5qcYwO^2Rk zi8n2+7ekL6oUPr#gi6OhbcwjkIOPZjw-D*#4di~@sv`VC*GNXTE) z0;>Pqc(Qu`B{4B1vPXW5zkQRK_yl*&bGuX$KOjYyZOXVKp{e?DjD86R`uOkmMpyR*Dmstjeo2W1 zAq6)IRN?GVWVdh2!y_1ylv7~xK>%`2Tc@uC=6ljk3|D}8spAF)+$;CRJPs@p0SZHB z>#|2VKsp#Ya7kI22&hm5q#81UgP(|)I900<*zL(Aw+$Wg(TjIWeWO-z-Ua3VTLxjs zk4g~txCySPrX!XI50b!J4=7fkV&>1!Fkq>*!$V}N=V!O*?U{|9a2}p|7=h8?SI|7V z0tybf`|jev)*{gOKKd*TRvQT7OMf~A%6|CO*%hMn^vr3pBsZC2A&>K$?MQeKM&@a)U;u=EO%Ys-OC%kUo6YZ zgEB%1X1#ukPWU~X5lo$t0zUO({U^ep2FZZ$ZfXgSZW6~ zgY4QvGSC0~DK1qvmSUw}?5*NIZKnJY&lj|2r8>bSbb-p|0jgzH| zk_r7@(q4Qt_6_G(m(lncF~Luab>GlNUX-Xsh^qJu^9=VdqGK8g{SWvaYIFI*+qbtx zWpO(;W7POr<&Sl0$a7 zUM@Otc>fWuiH8N71hw$n;9&WxrA$tMtUpmVj_&M8(Fmc^?$*K_;FNz8xD92*$mV!E z`~faK4PG6D>D4JseMwj^-*Qfg5v>i<0u(bDe^Qh6ZwL^*`o;GV7aCvLg7CY#klH!butm@zg)&!6OC& zHg%(%chVm37dE7UV|=ov;*K_Clo#wLum&~3nJOb?tjk&$=GKbRANoieY|V);8X+c;5_ zo0Ok-WBjb62=f8!iz%~WT}tUJ9(o@{L1ReGNW7jvYh&bDhnv=K-NQ;EIwmG5dDE8} zkTTo$b#!ekHtLbx>+El?Y$!nK(0!UZ;CxWboP$*3V%b7C^#5I0kX{GBl3xmJ8DHkX zGV>lFg7_K)<>HqE2-86ah+0lmMgl~B3BevE zpmWpr*eF|dDe!~m(fWb=^G8px{aafF46qy=94Nttw>ZZ;x48JerpBW)TRyI%w|mf% z8&gPB^kY<%eS1+W`#PM!9fer}97YQV!72Vskb;?+8BKLSy=D?z0f>z31FP>A1TMS4k7V4)q}p^r`uqnhR6;sTQp z|H=UxV1dB5U0~=S`sF8VxRstK_rYoO4IV4*NEaT+6ktJt>?#!^2AG6|j>8Us9xWUo zdfDWp85kWnuaq;k^0F1ul{2vt=)y9xRX*Am5;llt~2c z=+qVpQ??QhvwwE)n<9*LZY*XSxngfK&}lzoAn8F!NC>V81#|Wf_JokCDi=SJ-&#z< zLW-)Ga+m*@0Mi64`GT5Y);(>QMvq`fPIfr_d(;}6KEJwQBm>S z?Y!8eXKVlQ0||-4*ELH@56WH5u&-D1ij@Hqm>}Vk1b8}wpQK8j%WnDp5!W+$B^NA9 zfr%&KG(B)8LO;8Ccz6UlA>ZKR4wPTFY1F}E@7ep|N!Z4IUBb6~ZF&EC1ahjOU;vG{ zgKV)ZZ4_b-6A7t=B=uDypJA5@e`r?#+zPN=ka)a_5;W-|y#Si9DmK0wAU%FB86+4> zq0QixTT{<-CGl3MgKkNA_zs{820FS%HaFPk3_&?Gzp%hh1=}g?p)PkvKv9Hu?OJ#8 zZG3DH;Iu$+#P-3#up_=sB#mTedI#CiPhGB|kQeelk!I|-l_5(=adAZ{YuTEtS;m^BvK7WQV<{oZn(Qi)@B7@}AMx`% z9_Bpr%yQ28yg%>dwb1KeRCLGc^dD3d=ijq(SGh%*aGBqQ-{utrERSa*ooSehs;hfq z-{zl&MT9>P(b(8nz(y;Sl$Ne=Pit^3vyDA}fPsObm}*tbmfPP6F#xf!gbp1o#9>$S z+}#m$Z9_w<>wBWZ=Qq(dwLTFrY;}9&@D46yrk3(#R@nH5SUe9mFYf@^RBUW)3{>r1 zfUTeQd<~7L>;$h@TxLWhlky>0A-p0WOGCm(^(bp>he=bxl`^2inVWLw4^1D2?H%#E zM@&|#!eC{P&YpEBvW1U=Xj#Brj)^)B6J0=`aPsq$rLu;4de~iEXLAMy%<{n~=Es@+ z-1yh;-n|F`3F~;kv>ZNqG%h_oeP+7vjuJ{dQQC#E_w?JR*gh8JUt;BHyXmPKwoC_! zKeOg}yB;a`dp{Mt9ZinD)~vV5?~)^t@SFWs;oaqD`yy~gUc%YW9zB~kq2rT#89-8W zh=lFm5)}={wG}uEe$(z>jOOD;S;!b(9!rF_5pe62Owi}>j*-hpOh$?mlar5ZZEaP7 zoCxe^LuGblSBAda9Pej@ZNx(b^8@T<@9bj*SH9#Pg(w$52Nk10N|#WURsG;TupXnL zqrn}u2O87{;8uzVz>9>eM7SWP4yN4un1h4iALVyv{Abv}PG=S(P6%Yn2)qnBG=r6{ zCTr`;^!0XFSZB|k<;K6D=w{{QU|{I?4*12sfq`^c0KeisV9k_e|TUAP$}w#tvMuyog9~sI?)P0 z1KGD!8$65Wr5);)K6$@bCd8Mvk)O0Y6^x9G*he0(wUlP-Wo~1$XIhDk7Jle}f(@!T za9_9b>nQf|6y}K0I5Vrle6^NF`|S&=gghhpuyb^?ObD!zbP?}&(sVPhG@tT)yLcP0T4}y)iij1&wpxA z1xZvyY8cLLQtI;;{UD%=7G=uc|Mr-9)DWQLd~V!ufyp@{IROshNuZDey56uZ{5Kg2 zwH{wMAX*#n;>H4(zMh^R$UCpeI+gJMZOB9Zd4Ynsy~5^81!-m&c()4)_ce!w#m2@K zjyCumJa{p?1^QO(m%I>>1=zCg#l{X~tT@U1cOLl(PUxlZ8iHZ@EB94W;Nv))^>k&; zSan5_Bkw78`ie&aG3vGso^8CVCG=?o&$2taSa_o8^zr1P(Q368sHuopbn6A^lA@yV z_%!*bLwB$W3KE39F$&4NyV$ld4VjDqRJ2DR&82B)%bHQk$|}vs{NJbTCn=zJui(_q zDJ)Edtrb|xFD0&YJ(9zsYe`FjVQ!}w%+1Y#xqli=bG6HcbB7lNRE>@LklbFmBSwye zRR%37Cntd|k$9Lz)Pq^S6c$VOJb}mKSqQ8b!Q{#9!RMu=cu?6pW=jbVM+pfDfxjm0 zgrc%CkJIQ6X*oIL(_+Il0mSseeE_9kJwS`Z>j#euU0)&og*Ja? z%IY~Q$cnwU?M1YY{a}e%?T7#$03$ArcOR`)KtXgl)TZvEt&Q$T5V5$^Re+%g7C^*9 zBfj(i;cFWnt{HpTPpr)^C@`}z%UQh0t5^-kiCg3hSOJhm;h;-vU|=u_HS;0!f(xRO zk_Lkt7vTj}{r$dKt9r%eNP12*eOl=4w>jDGhcKSQ0i^q&Lu7c!>Wqv`S9y61GY3gS zL6AKSuzsnKXea;sZwm}=Z-HJJ3oEM=l<{edzaa73kmKM`3h;Nb_AHhVK(q&{s#3ta z!xsdc;Q|S$`JDiXsi?a{d4^va!H+^PAofmJuHLuN28(ifmk=-SUEp)}WR*cK#EWLy z+4eh)HA+quum`3%62D=Zm7J9H8tUse;QMnPN+2a?dYMh#0P1+uh(97Y`nH`zQEML)zMyB*FYvX_s(UQ=>+=UARB7sIXQ{U0^&;^=HI@1Hg7rE&XT zuwBx9Ytbh_3HsGQzAyPGw}Rp7jJJdcBczfvD@-R?m<7Vsj=CE)IW^Y_j!DW_pT@<- zb;TD!dEw{p-vxJz8%&|>l>~!wtyLG))RHnXAn@0M0u)S6!gd$!SU5Q3M68^`fvUjK zQk$jWd&38@N>AJHyLrmzZi7`ULPprybrf0Td=*imSthGf2zlRQ%YdQOKQ2 zPO`d-DkyM8_LCPs6!Msmg4ZFLo2zOKz^SPz0DK7%+eaX^AtCCBst?5Vp*#x^{|*WY z;_ymWJ=r>u4LhOCaGCYQMh9S=0W;~pyB!Dy5{OwH%##ok@U&zs$VJSJwGIyUHC#RG zJ<()DEZma51SyL+z!U(}JDM>W_@$Gp5g_pnw}wk$y>5N~RCJyS{Tf7?AF^DGq~tvq zu}psctPMkz0y7*mVHDAA(b3VBljH8|fd0Wmkpo5^VC9nx3fsrzRi{daKY>W9(89)Z zaoe$GzLlfAi<WZ5|9E>$S+Tal>8D~ansH1Ao5D_j!cQIo zNCr7xA@ujHBgY5$u!l3Ps=32!1Lhyl*_A+CM|S7TgaUN6JSne0uVx}oGPbrp;Kkf{ zJq6VYC5bmB<3l@$X}W!{J32Lc^4ro99;|n+7Kww1S)G|y#+6r=Y?lr9X>iYa0FXgK z%QH*G=)zu?9n*0H)i+GM57G%>ne8!hs+=@%0(}oawb0T4_>B=r;ZrmB4E}7Gqwhhc zNTXOy!8u~!?A_iTf3;1w(0M+1AKEj>aX`q<>^LMTxV{lX7Gi}6Ik*3xyFb1u5`{Z{?@!G zpTk1Qw7J^Pw36p|@OL*16|-QbEAi=5gwl{01ceJ!4vw7in3&K>09s8bx+1k9eUuCn zzwT_!Y>-Loul2+6kbgDQZf3$!O#2t<=o1~wZW#%uizL33U%YJ z&O@~TuxG;pv$cBK9xl;&45m)wnyuWoF}_7bSw-Cv;F2Lhy5v^wJ+y0GBdka?m|>E}5)0MCf8^p09VeIj?CE3EFH*VVYVrUo8}PnGuO8|#;;cun=p z8a|h7uOI4AXGmAogg%U@9|jZEXlrLVy!|*PCfU3Wv}Q`fXq3NZ9LffrpKOxebS=7E zU35~YfW9B~3%r4FiM6IuwiqGA{oR9~8TSq-)axhK4}JZq<%b) znSd#0NB=&e9C-s%SVQGgHr(P}ks;cA_LG+1Wq671)WWW>2@(5e+sWh2n&FBq!WVld zMy0P=Mrshdvw05^tm#i!-NVqYd=_X@U0TvbVzqq;&zdKVw$J`;%n=vfFD|L5w1qTT(scX}vO-Rxzj(#da0a8ot9UB_ynfYUxR0y0#04;6}|}e8OM(+7}pM&b1eE`c1>723OSK zCKkK2(BpEfl|y?05W7STsJ`+`Pl6TGrTPB9&y)*9Q| zorqf2ZaiP{VOp`u{JELEd`rEQ`BX5>WDc{F)EK-zY_fQLa$g~rqh?KnwwI|ZY7@Cs z^|7Yq@rVBL73&mGT}}7e`}3nl3Fb&9!74#x&Yj)zn)^E&Nvkt8*}o@#kyX2_LZ|EG z5)#(YF6;tt7H;oURWrIXk0i3jWyR#o9lXA$P5Z}p55zK4(OAtjv-gGSFu0fwBRDlF zS3+j`L8{4;%;SwIC%SwbM2Aw+kI@&9<=5jPuQlhw0hJY&4(4G0aKK6eBH^Hg}<*xwd)t z2IyfHUh^L45z%5}AaFk0o15Isb!og@{F6EMw8g`=F5&5p>%*lMTPifF(t#ATB2KCA zkp%0PQk&7X6RqeJC|9m)@J5pFmt|a`tx)3 zI&ny5e#VD0$=O6TWaQbi!19APla6rt?q6Z11}BIt=U$>VbBwvUxR#N{UvkTZ@(&QK zrEf;t1{29Q@HWeyvcWk&}0}Q>Af|<2F2@pH5g+JLtLNRYZ%m zb$%Quqwz~Rhxd!d#(y7N-R8jRG2-nSY)=e(WseUbg{RP<+~LMYy&#qMW}AmGdIE~= z?W_sLUQMTeNO*XB^?_d>6^%-zBsIx7QOfvVGWeF7aDpeT=)%Za zMfAf;9=y4U7jh{^47Rp6zdH^}e5`NNLlsm(-bYkfu@y5EPI`((|2PI38x&QzG literal 0 HcmV?d00001 diff --git a/img/address_space.png b/img/address_space.png new file mode 100644 index 0000000000000000000000000000000000000000..205b936fc53e0301bd9e7b24098dd04f3d0c897a GIT binary patch literal 300806 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%0AOOas>%~^T0CLFt89_xAjeN#ZO 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%0A+~vJ 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 %P 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

u{u8ee$Veph-T7!ZV0P8 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 MvE{wd|8j- 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

d!C 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 e`M>vIYOG6^d2pgjxgwq2ys> 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 Umm-Jz4y1|k_EE9HqZ(1kVXt|* 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 Vwr1|+rsE7i;OXk;vd$@?2>|HwCV>C| literal 0 HcmV?d00001 diff --git a/img/bus_interface_atomic.png b/img/bus_interface_atomic.png new file mode 100644 index 0000000000000000000000000000000000000000..370be223af21537ce69235221b47b70ec0858d37 GIT binary patch literal 57747 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 literal 0 HcmV?d00001 diff --git a/img/cfu_r3type_instruction.png b/img/cfu_r3type_instruction.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0cd9d9647d6c63b0b78accfcb22d222265625e GIT binary patch literal 3781 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 literal 0 HcmV?d00001 diff --git a/img/cfu_r4type_instruction.png b/img/cfu_r4type_instruction.png new file mode 100644 index 0000000000000000000000000000000000000000..a20fcf5109f585aa1edd05e5236dcb25db50bf53 GIT binary patch literal 3960 zcmZvf2{aVk`^Qbgpo}HuX9<(6A!Oe&7<-6%iy?_HLX#!SSfeb_Ad<#V7?EYjS{T`v z7z`OpWyv06tTUE|pZC1y{NMNepWivpx#v00dG5LQx%b@9_qhqztW3Zs1y3?DF@eoY zVYW<6K*+JL!3H`WS%k4bCMGUDGnoF3U?)oU-Hdrj&ZpWdnG6LVvXXz87Eb2G(n&M^ zM2F8WYUKulo>!YHPmjz<6Wj|s~pDgdP zRckC=c-HuIp~8BIgD7=_K=Zuklo2ktVVxDq_K}i{F(Auc%a3&UVY-$&$R|_$bpGM< zB+>*z?Zeq4`2BAF4iEbq7}ebD0V3@M-_Rp)Luy8jD`LUFisF6S^H)dw`N{`8S#_$< z`t8kF*T#_^&D0HDGE6AJ?ah^#lODb&0i(J%{KpJHm(+L?m(BpJGFkJU7VPn#ZACej zblP&HK$TFkKXfAklez)Kn0KvW#ZnooVs}{Vb&BgeJaNCYh z_O}NYVTgk1QC7nUR_4~m4z}?pWxUJ6{HbBkuID-_8Jg8toD%8Nu$48`1v#FQYGCgd zRKWQwpFrn?B~G>h()n!<NH@%R5s5I zSm{hW6M+y@xy+M!R-wF=to>0h4e#H5na@wbB|k(^#mo3=^tyX0Q|n|Ny;SXG&xUJI z-qlN>B6N|kUxo2zuY`t)l+BBM>!Y7Z zHD5eBo@nl!Lq}k?Ui#LoAl*17^QE|7XLU~u4`c>?H*Z#bqXIV7Wkz2UUqi;XZ+arWscZBmk$!(Cw8L;bRu+PrC9PbDf|}US-okIq@qJ5iFMl+s`bc=?K^OnrlX)+={8-d9`ykwJ!+Etk z0jqf8;~xQ5Mh8 z>nUKiPMO5BUe0_H)Pxvtw=TRb)m{3YfJ+oh{!GT5erTTuw=*z$xf#Sfo8Iv()aifZ zofk?;^os(sNva8PCtc^0T??^KZ+QdUis?|Z;WhX8@6myTaLq5>+6A3UY|~*P|D)l z!{3b?bw*#tjC2PyD*$^{l9$WlP8UdaW*NAoz8k~mjwLhaM}9sx^#1mS(4=F?@;kJRA`m~8f=%|p&e ztOO>ZBl4?Q#C4&C)yyk9hs1aNJXFgg;`j0{+I=VrDT;gd*0G%GGX>wqmnFH)hZ_Q; z$?ZuyxkN4%(OR-}BKME@9Sdbt$tSVB|UifjA<^&ULeQ~=PY`BKvC z(>KflmoRm!C9)fNTSL43+-?0J96mdh>s>Yc&X1^S1IYT9T!_EEp~kA6PKH=a=UW*R z@*6yO^&%9hlsBo@<1y!J4jc-dwK?=5LzD2t$#-_-VR>HO z{y=OlJX@@~sB3WF12`m&^Hi*^P)(#+I;h~6#GE&hJJ%&WC}a7VgIHoWtYPo|>(8D@ zl6C_b*#y{l0R44tR*3t@GedfO--^Bi(8gU$qLa+Cs@&cTnj0{QJ?hDEI6SRYDJ?Fv zTt9kZlEV62ww~?JdtG(+65vYk3`9H++qs|6JL~l1d6$NEI7I135uI0Ah+C6)4>ZSh z;huaCY@inET77&H%!47GVIJ|1!E8b)p8ca{P1-Z6iKK6Q^8BQ$a)%`T#&M&4Lzha$ zL~Lj^@`>g4xkknXr4N7)Hh1D7ib=yOp*FUSCq|1+~{dJDj@)JA{PRTQh&~{aRz+wtQz}>X4_@wiLxu(vFP~}m&>~2bZV2kbwlq*N;!IsXmTAQHoLKHNf?hRof|G>Wf+-;mz_MLAh?bFj|*TaBf$+X*vLV_vO;#oa^GBontHowL6ggWGd-Dirf z;rU+fwz?_=b@e^nX%dO<1Tp6i{6!K~#l#o%_7>2bNZE|3@|j8wrRHeT`kT*8R%iCu zD*!Dj?!ai@FD@Or3jZT71>9|$;)(M(+nK{EJCmz?t%TTH(Ftvz`x z{xmE$kI%!i1q36|o_o#L@Syei8=GUwur)HZOVmdy0W`Fe`q*_lsJEc?^&7 z>cI97vlr~bfYD{T_+z-UIp6G)N*cy%2{B|3W|Ey}>=0&uOVMBQ<9b35gIz+$8T`Md zG^JVZSilqoOrx0pX|>1wL?u|2RSa+%@(079CohYqn<76Y4nIPPTW-AX_+`QPkX zSs@E-UlLs1wOtzBS@<2vyEM<(qUIbpWF_b92`p>-qp@~Wovl3l(;9SY2toOdn4SE< z6z{K1agaJ1D$H_?tzLapfjH$byn2{fHGcL`;0}oJ4NRZYox!haX-^1$68&_`c>jvS zr=4-iV3=FrB;5GTx5mZ9%d*5-CDp^sgaEd@o-3hk5DD8)lP9kqcnf$=B1~uV6AT-W z+|KN-l<=cwUq)uqd-aZaa4dWIe31kpn$#;#jwm@@-l4)0}*@O4@8{%Qu6 z;~r{+)Zlv;t3N(wnuvnzcvl~pKk~WBs@p}$mctHfPNMC z4D3rm##M~HOAn52la*$4W>UxsQVe)KB23h;VRa7t+)4kX32{ts2H+-~=j%`vbver^ z$~oy4rpIlf>Q66nriBb-S^5VR#juE*nKV{7dtznB$&bc7_)zB}z_BW!-+eFoO0K57 z$LsQ7r$~aajhExfH+fZXe6FE(1Os$;~({k9U;hVNqJKyOsv1i+Wa!P#Z>iX{b8lb`8JEt$Hqb`K`Cv)B~>cc z?3}32YOI5e#x5eN3*E0zJ-7Zj=Xd)$za!{|hQQ;><7FdO?pkHxPU@)Wra)t{l(Wr1 z8&Rc#t0+3Bw+VDX94#ItB38pHvi(+)QZ})I@qavbVA_(D_9CEqGmE0_)WpM_(db0D z^`+3J?L*})3oWsv@7@o*pyqM$5$8b5coNRRj88px8FA`yJaBmpJFkDn`lTGIN^J%+ zyr~Wlr<(+pSjNsnE{@nFQXTHUGv12pLDyNoz{^gUg7pUqRk&0ZLu)d@-4=h;#lyL% zd$Ql$PZcM<7cMs%>3rxnOn=e$K9+&%r!7o9kbKXq4BC1`SXoa-X}N!WTGw@Y@GH9~ zS7~`&92q4_R$-q{(P)SaC?f;~W;T_Dn5^7pc)5libeZ}m5O5^{dhl5scBJ1mV{}5( z0^H+0pTE&{Gx;-NORGg@ozT_IzJX*?>-PRAFfg5eFEqyG!%4VQBO literal 0 HcmV?d00001 diff --git a/img/eclipse.png b/img/eclipse.png new file mode 100644 index 0000000000000000000000000000000000000000..ded06dff153d18014933e7b5098cd2a9c7edec3f GIT binary patch literal 132828 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 literal 0 HcmV?d00001 diff --git a/img/neopixel_timing.png b/img/neopixel_timing.png new file mode 100644 index 0000000000000000000000000000000000000000..f7c62b91662e9c08086b128a83330851def2953f GIT binary patch literal 4852 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 BxzYdt literal 0 HcmV?d00001 diff --git a/img/neorv32_bus.png b/img/neorv32_bus.png new file mode 100644 index 0000000000000000000000000000000000000000..f081f957c3aafdcce2dc021f79430c65eb01664c GIT binary patch literal 148186 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%0A8HVCLo{Xk_=CDFoBDSK@J zDdM(1cpN2m=)o*{3K7hN$sY+LWx9*kX~IPd;)-Pb2lZDONK(qpaOIhlbQ>?mZ2&7d zgTM1Vi=NzAP$eST$tJ^_!P`@#VM+K{Mu=CqQ}J>S-B1EC6@=GUyC+yPaw+tfZFfrM z1((149pHg7y11ez(QW?KB-3yU61ppn`PePY`bAXV{gnZXv;l+I;7no-@roO06Hvfi zt-Qey2Y_6z|Neo-k@z0-sCDQka^z#jJFQ?)Zo)rT@Wipk)=q^RvB-#?j#2ctW$IZQ zel52@AaRta_K}UQY5PauOe!$PELA#vFwHTIG}>lzGl6Fm0Y-dMHR&fs8_fs@FL{Xl z(!3r4ls1Mg4HmEK@E$j%9@z8yQDrpIMNdYRmY28oY@aS$Fo{+Bw|#`TA3`4;4Sd6L zV;kzMB^PY+OL4Ha0LtYPfF%JttIB5 zK0?z)Qp>FY3YsrVGWwV%bPt)YVvnBeeY;tXSn@dhc`O{M^4fMay+pUGHDaHI@Ayb=wz0SXc7>W3?%xJTSU-2QFLo&Sns z02IK(B`4=!rCTL&yyA}sE!<(CKH_d;)UB4=YW?&oC2_!(Ple^(+&?u+EqC7T>D3r~ zz}5J84@(~ZwBW1OGetBZoXBap*DWd`?wm!2jr^nL96MQ-g9%v7{)EJTAKQ@_*6~IA?f%N1vcao2oGs~TcMMTL$yrm|?QKj!PCaUBlV7C5@~?0)_!hmPc<3ENprKnPqv{#hS&TWC^` zMvM1O-iJrcDrI$PUaThUttB+Nr(^Pg@GCX{xTE`}f16XA#XleoQ*?HA9>9nc=5ii6 zm^#e6Q0M(wg{bo|Tb%BQ)J%Jihib<)18G?nI!n$t)$x7Gkx9w3E_1S3dsW;gG4#T& z*P%kH!n820Etmk+3wk9_w@UnmqNcwxn$-D9QAm9oZRK)wqP^)VkmW;L?T%g3%m{0>R>&3sZ&JlK`rRA8J{!q70nhK1^6lG6#=f!{O)wAA0Ko%c1m zRI%^gy}LuFm*bJZ+po&kbxOZ|lAM+@NxuAQElBplg$v8wS0rnU^^+(NUZz&oxns~m zcyf^P?Aqenip{EARHQg&_CwAMV!i;ydM$#=6=OSjRbtCJC%sxI@RMe-+qwn4543;A zr>3%fkzam@K(NoyP=TT(A2X&#A3uHKCGNU&R)7x;OzDR!f2Og^4i zKl*Ln@3uN$JwsG8H3n0u(c?#+kd%~Vr;mz?RDKwWz90%$S2X$FTW%aLZNJ!x`-#cN zmwuU{7(e7zqM>MWSI;wGH#B@%2$W!VpY6vnkIvhC6D(B&aWys4oQ-N>Jn4@n1Iojy zK*_m9HP2UfjQu_seLx^j{m@;^Qwl=Dc%I0AnIxl?_-GwVSPkRx9b=f|MU&QS)U>y} z*+PVLrkKS3!=DRCYWu}9X%2cJpY?hAD7(6WX`jZ*Ie=1^X?V8`h${E&UvTnXtRYRx zMKf+wVmxbQ)sRTO5Q$NM>c<#{V00i26Q1NRd#t&CG^coTBD?8q*=zE>j6tXruw3An~c5r4B z61@<7jq1qANRm{%C!W(;0b&i`@L_@mWB9(WE-U-Jy}doXEVgKp)086wqUj0yOD^#Z zefAE{;L{M(@pKeP35;S~xHYIJRO|BIrB>PSlP^Z`1|n^OM%|?Nlo4e?jL{{EdgTxQ>K^o9A18lmmWG<8Z!iW*(BI<0Y4rHk4WB=0`LG^2otN71Y_{4RCe%s*02mhyD zv13ruPnv(AeTkCy^*b|$w6IaBYIBiCy%W?=o;>L`Ao5$977)pE8gi=1W9LxvWO_+w zMD=YbP-!XZ|8H0uopl3#PLJ*2KXSG2!gyWx=e+BRJS+)qCmEGDiv-?28*%$9j15*X zD6ZPbR&a@B2cL%Wp}XYa2zsp6wt?VAF*<^n_0gi*Ln$3EQ6UhlmtnpD@MmnegtEwn z^vTAeAYpm|7|xi-Ff>=+I}q@G>)+a#$cE{rFMsW~&p2#olBplFUh#I7eSI=$bP0$hbe zMMKLGVpCueAt@>Obw6b9Z%KP7DZV)Q0Ew)xb$5)Z8@p=|AjM0W?+}tFpebqPlKS(o z&&$eH3ywD4yX|M2#ay~c0~CozUsWm09|Fee1isZ?I%7wkS9p%Vp}ap=0-ZKN#{>%y zO;KU~q+k(beB-pEK4)LRfxU7}R6{Vsz_jupToE93&w2Rpp)^~Z zW$xsfJkoYBdBak`Y$^-^{Y2XK6h1{dXvY~9lmqlTN>UKK$8Cz z2Kd5^>Z8cQz*cJbZDGQGMaTIF#er6?AlA$S}NOlKl20OehVLXG&>9pm$td}O&<^ZcZB!HIQ0Fz*S08l zFec0$)3SND^ODi}#^$DcR&gZbv2)2|3#E2#Cs-ogO|iOTki=Q&GDqkA}M{fIxZ`>=(D#j`hM|FUxg zVl*fF7-ec+#oz4TY>}+ZyBO`7z6BGZi9Dyv>NTuD)VjT3;UKX==U9|+K>vHdZ zYL48!kK!v7)!5UoQGU0?YsnfVJ_@tH&sf$zQ}AKwj{So)xxmV+sh8y1+7@{h(ZGYS=R zO634+QjhgSz18VE*@457I#3QENlB~x_Iif7{q5Vk-(20B1-=%b)2gj`x zK7M@a8M61qzRi}FCA7s|6JC~&3y%oo6~8SD>O<|9zy{RGs99{N`{FUT7v>hq56{9Z zhQ3TVuq}bRAryWdhGZA4zdIW}jK}xhv0wEvNsgMA4NWPU{3a!%=DicV{5XZ*^oSFs zqP+=M+x%%Sf)f#7|mf%4x0qdN`T$ZQ96etpe6;pvBHw&8&x!)im9gU)gN zN#R-vpN2o_#y+Re_Zhs^gD!ruTu^X01uNfdCc8HnTrl0y=$hg`)v$#Y>e6bEeAoD* zTx$Ep6VMs0Y`?B(f`sNo@afoHRLM({w>RsUMU+30=Osb_ zu*^IATZzV>k1bB*&-#Wg^eT`mI9-J`$`;|rvvyys&baG}+4p)U()l%dTH)X_*yL`` zZaj1NA?^d@85^i!oHQqxqMA#K5aC7lDvLyVZxjZ}58Ij~H-IBAC@U)qLHRI=ydaSy zKrbvL6nKlV>_YNbH%Qv8sbBk6=(%M31f=trwv&r=vPf0wP1)3;@brfcsSgW(S0k?l zK^0K;Ay@5i;gcuDZ!eWIW6Ep^-)p?ady-zj*($ndQVTvz;ZRdV2}H;3WhdIPv_8e? z&jSNCePZ4nm3xdHt_SYicS`+vt|Wq+_s2*4?ns7iC|2TkrxP;p0@;Ft8pk=}aa$W% zt_FB`k<=3_@~ibUCnO-rI>!5mkr`$#MsViXjXI|sZ%;D_ka41b9mwId{8PJ=?f;CS zVmSrxBVE3|=WI*+lCDTfM~ttw5qOY>nG@Q!9%vu3;tzjERdU|&QwpMpH%xR)?6@aK z@U2ZShc9+dvlFv^)p3j-+4&B3$8~678W&Vusp`gI^ul}cvwQgMFS6Y-gxF&`i`Dqj zr(C~WAo6R{oI*#gjhkZS$x$W67ALPv^WwdT)m>Q0paNgPFxaeAyjcl8pjI%C^lD*W zW=i`-@~?bh34#w4%}WZY1o~a8(_6Ri^YIs|hMx*3lD4bE?~hu$_uu*>jk~sldfa&S zX7{gGmDSk^vmZ&MEiL_|0ZrY4mXg5%Dm=4)pCEjyf-lZ6isdbs)3xV~#U?8W5EF%t z94Uk;U&DFg*iCZZ{0NaoR*CV@uNrwta#>+YPax0J7Fdh@1?6J#pTOI=yfM1gq8(&W zH`YTbHTK2ZE0O`mp0>;cm)hw{?|b*|9j5S`XBHN-6El^aI{gk>r~@@G#rO?P8?T&V zR6bT&Jnr)_f#oPON}9A|_L_HlC-MZM7b0>5bVN#Q$?k<(+kvHN-Ldy4J5w4Txpzd^ zizoaIh(J$dCyK^E0#Eb-Nu6GZ?Eb!+8);tra-Su1FWFE5@J~8@WB3@i!(QbbctA}k z@dbG=nt#|8NPSHd!*!13y_bAug|(l+KZwlOYW1o(+NuqC zpy6csrOtl8*L&0|;OdnPgFKyH>!_;h4yo@YF=?rcEHYYMj%QYtyxjD6^uck*WcPRC zZNkvMWu@jTk-YEc@08g|plcSWdjwoX=D?jd<$1yX`x8`)BV_#bRQPR;2imG*)%n~S z@KQ|8mxGnk{gye=GcegK|1uSY0lf;E5(#IF7_#vGFv@#GmbojW=7(C~p^fU{WrmS9 zvM$sYTq)b!{U>Lh<=Mw7aBDie7Ne8A$MtE%4T2Ge=$xmbN8uM4+mJY&WsHYC&y2#%iQYQQm!z0% zFOt@o3{jt|DNjlV+MhC&c21Zma$O={&e3fu`WGf@HjU@KPPMtexl~?LH2JP(AdDwG zTFeQK%mND_pzNJVK~cxpdQ=!$^JP?UmIlsma**eBpIE zG+(AXUK}9=Y0>ycF&-Fiup^zVOjwt>IY z#^8ik$WsT?q3Iu$fa_{1xN^r%3-TkuokO5~bLN0M3RUiu&o*K{-v28mk46IrT&^kF z`UU?})Dp0r^ssl}RPEp)?s^F+qAr|?%nS{uPhz6Irbjw9xqXRbHT&Ox|4F4WdQhR5 zF6f>3E=3O)uSlDxRCDnTsd})p`vT2sF)E0p^GCc}rmKcC1*T*EpRHzJ9P0_E`+d1; z489YaFjup9tmNP{(Hv<`ABLxHZ96_#8k$%7ni z8@M|~MUxpjd1dn|DonLhsoygxo|Ye*D?$xpMtJvj%;Vg0(o;9oCF9lRMXZ&>OXqtf zXQ2$(Lx_a|*%Q=#=!y*?CpgJ_Q4?d);)R9a{?jjy>O)% zVlpj=ctsx7ND~K23t!D~i7+0&=w{VvO>F#LNnV=Tq^1%=_abUJ+`p`In%&SQ)>m|q z;es0TqLYC4lqS4tZeQ>>I*?@(H!3BWBKe5_G|lynF=g=16Ez_a)Nv<${*r-C3`!qy z>TAim1>J)COF*ng4$mqa&d?P_uxXei6^E7p@Hzt3D^az*abEYFVQ8! zYEDM(j(YaF0$l-2@IQO?cRO!5&pk~W;N?8wiln6g&56cA@3$cfKiZ2R<^&8iyC3E$ zMbDlE7gy*)*3pl({nUXC9Wv^U!)Wjk9)B!P4@7+~wo(w>dn;DZ*>`=qDiEdtwprbz zQ!pDlu2XB3_^6AcO$Sb6KoyvL(^oAesC*$@T5bbL>iyAfq)aI8^ zsXc@@pZRl#-h48>p%Le3_NGjjf-&`XF%gTu;n9$5#Q)uFxGFFB$yPy_$>H^0iH35U zfbRFkzoWe2*G8p;t?D^CQbfBCU+go3lxbBOsX7WMaIxnL4jAOb%na5xOX^J7&d}A$ z%68}0*K-XAuW;fnLU9WXO1-2O+MfEEo4Y_m2w14I>u*w+# zMt7qVG7wcx!vO|z<2^||$CTAyP8S`k_p2jUBf$F1fYx7Q%-QZ2HCp`^oyhZ&qF(+S z0ZZ4^OE7Qgk?c$Xs(S^9+-{#$L;T#4MKx4eeOn_`jPYF!0-rv9^pd2rJ8o3$7@VAOTNpWeX6_S2lWlhgyP(aCLoW<(W#G*{y5 zEaS=d?pa(gGV)bubKj4==;T}G3efjqWu*`Q)3f0>kY`??iXT36;Es&F$!0MR&1FXA z8kFHj0bfm;i&QD4be?~zz>})i$Vn<55VJpTW^IhH0@WaE?)RfyOE|$ZuxT{jZy;pK~YW_oPQ@|+@ zS|#-~$G9d6M61ooG5~;%=agaUPg-uNRPgDzRF0jjHc;vOu<(d>uWaF8`Dxv=n#C?x zuDpke>a6K!4v57e2R&nw+zo8YE?A!XFwHCeyrpQ|RXOk9=iR|C4EkqoMHNjF<`%G6 zlBy~*QK@yI6G?VGNTaL<#Hnaty8aEsJC(k}=k)c(-%9F0xJ-HNX!z~&1?Om1NI>)i zgO7qdxxx|&f-Z}~Yxj;DDT}gOzp|BX_!)1To5H#KoFX`f(q>%4k(!-1@^E^t7{eXMzq~ZhLR{n>u3j5`ZETA}AfYPp{{=ASm zzK-_t4knG3CW{+}C?-AKpJFNOQ_ch@*X_YUf@SP7^mAUB<5?Y6GR(2eruOz@P>;D+CHxlXTFT0ZMtK8IOrF@bZM+=9{#=Rga5 zN$N=nmLFE|&vd1=Zpc{}-j8NIc951kkC@0eohbjXmNv-%YeB!_GaP)j^Bab(uAiZ? zS@|vcT2e=fBfidi(8{!41~nzMMj|~V-?9=r1V~tZSPwF|RIr*dg z;xSBu{OeZOs>>W-9doH#Z@hTy1-ddrCPOXUK!Q5cbg#q%I;W1ZU6V4Nm7E8re*;n= zo1!up7(Q>e8|eMB4{k&ne3Z;V(ss{9q z0Pm(NzdPz*Ge|{aahvb)=>vCeqbU!;!`#;^IkFVM(0!@AxMg&HL*jupbZ`+oG=Yn< z!|ch5yV2n-fXt#)%mVTyk=AL663-id-V3qRf7zx7Hkl$RPb`3x;}^h8q`}aIjjx{G zLC5l*`SUx&xAmE<>$5k2tCTlcGe+9H%SrM<<8o$QnzR-qFV7Scj4&H8^PFTU2OTX4 zNSJL^L-zPvas6K+nj(C->;vs1C=PfmNRCw&*N2(^w-9dDC2*v%ZA}W+Q|Hykd=$C3 z^4R`%14G`5!%5p~ZKEKshLf0xr)k`Y1u>EL;&v03F+UXsuz=#v18MK8<#)~r-r%za1WPFAK$Iv6~y@W{mTUctOSrh`V# zfp);w;VN=qqv6GGrpc20TRulc*Ya+0Z-Tl%aj- zu|uja8SprZt3-QZN`YFg&g!CfZlEpvY)i(feVjWU7qMDWPKs{0I zr&xq;EX4x{8Mk9D&LxZFCy6RMwyd%o679E~xdH zhXW>`c_KMTrF7`Wk6N=t(p-ZrGdN)}okd>sMok`Cf2~AP%ns0Oi@uxz?(EQA6LjKY zGEc@r%fCEz5oL4naKD}-kfzfcyCBP;tiFI{Ybl4ks#8&`Cp$>i+T+cIIl+Bvj0%0eJE>J z^Rr%=W@vG=8lKLHz=Jcfp}qe~e%-#YW3i6C@sP5*^~Ty#(RUwzaL@vI`|!r@=;&z6 z)O-si!Q&lo-|Bk2FgIc*bvFEIDl22Atq;1Aya#f2LmtLo>@<`!&|I3aK*w>UkaQEY zZ;e)p$Ry%R8X^{NN{68{cNk3=4}7(=`83k=9dLTUg$XWb)i6|nr)FiEaGUU=n&(-c6*GnwPtKU}Fe!4$&@Aiw)vsG64r zz);84vr+jDE{FS0#rIBKj-t%w*%4DZ@EJBi!O(a%z={ZzSAA;!5)7^O7>|aS_f`bk zmKqD((|qP$I|y^PAmwEH%V2V%6Xe%^-S(0W)&Ni|96y?FS#0zef~m?s#w|qJw+9AQ z6WcF_gpQ0jvFuo#Z{zkRq;9-(`H_EG(7S0(J4rQ4Af(ZAb^W!wdAXIQrr>pNJzAmM zQ}J34@^|VJZBj3pgfujdd?Qp(cPp1xt9p{wSALQ2v*##Wt<6tbZ{@YR$3(>umOj6MlQCGc}?^w1FeVD&!QCs3l#BW9@MH zV0>Mun>cpTw9i3Cnjg#^_bxavX$n#*!54-)j|elV=C}8R_Qa`TNO;6cI@B;!<}^_S zM4a{On|mM=p&1HV)cG6K;Pp9e-Z49=2v}lv64!at3$Zx@Aa)YZA6cp!aOS^KQSclS zRR1l=4yPEb**O?LwOu%%o@@^df(2i6j(sF0)2qFvh0gx6%4omKgx7cSep+Sb${c?z z-0_tR?z=Q>EQh0~1Gvyo(ChGNbe<;PVcFG7F(w2M(*x~%T@burwuZOg{5k4J8}^M* zV%b{}piczkY%`yhBT#_youhlvv+T>$37^`Xd4FPqUI=$Eca+sJ@cuygi(^ilt6O&t6A!`%9aTCHc+hAhNBy4;Q`mfP8?ocO#*Akms zfJ2Un0FI8N$VYB7yUrikKQ1-1u1a0?G*#i!F;jUYyR)-$1cq_i4^&m6 zdNlrr0gUl=EZjhr&Dy8T2Ih}GJBl=Eaj;{-0-tw4iSdYq2r~_@C!a=PZc;t#tuyj~ zKC*!Hj8ZB6%D_P2w0@8mwL8p@IJBAU*(+9K&umj+MH$QKb`U84xe{`UDopT~gD}3S}XSrehBQ(#X(l zwiJx>lcgW9eb1L<@OLAmZoZYhdUI{E)VgUK0X34+5XotxC$D<8e*LWMQkOdi#;*A^ zWHRJMi_FZ6`wR~ZR|!Pl=5vU$6Pa;UTQc3dy14oKN%35-p2A2$R>&)O)s|fSbVS&s zj8fuq*J}uIVuXsSw{Zu}HHns`VjSLSsE+lZYHTB5h*H~@U42YSP@0U~V33ElX1~)` zo3f1UD)Y=-=9u6!wP!6d5u5k|a)YZ+*4FvGSGW@I5Aei?jEPw9} z7x;z#3GR)Z4YAW75ao(5T@A=I^ka);CSmycT{ z4lB`o!8r&d15IY&IftknZETJ}N7p^(;V2ca)mZjZo(X(Zu0#J3kRM(U`PH2%V<*$+h@fYQuY zSzSKtv>}qG9N0#jh*AJqS&Uz1Hxi7jI?d|kdbw-%K3PK1%NsT&hpBFqvO|SuuKcE6 zF5r)10+-x^(9_U;mc`86!GHFsCUEU0{4WaDEoi>B)e%if=GzJX`_>j_t8@m@@D7n$ zI%ab>3UIU`o2!>)*M8;pRl6SqShPc#1}G9nrV#V8C#6vyLTI#GQxLe4(mPZ`32isd z9Jr3Q3d+k0=K-cL9@wADZv5%3UhI;gAOJ=cCEKcz@vEAmT#H&CM#_ipv*eu7mdD_Y z(2QPV41*p1*!JnsEgA1D?v<0nLECkDA$|#kk^7Gze^6bRbA8@C(x^nu8E&;NIks=Y zt@!1#>AMFK)FBPr(K$SfG}%DB$QL>k(D9Z7HigY32K^iqUMeg~O_m61qxmqv&> zDF||b%dg)*JpG~6PVFfw1YmY;I5hxU*A_(Hc&tZMyz=Qk;J0p~1&L%b;1;m@e z_xM0s=OKs>l)ml1=L>D}C&}GmJWi{HL2rJH(sN!!({)7YCIwjetmv*6plkl1~?XszvV#>3bk`MAEhQH=jQn% z&wXBn?@WvCr|9HZPau1p+MWDfOsoS0%^*8RATL#d6xJQggwMPlb^lcZ^$CSeZ%N2T zfY(&t9&o}<2(59aJb#i~oi}410zyK~jn}ukx9m5{4&B;>-AUY;X_?u&8=%{vZI~+W zmIvO;5-+=;F1zsNAbCCGU=r-4I3Nro_^gP0hhGC#qAoQPhyGw{`aO5|qTlA~_&ho| z#N&?Y_fL#O(|w2hrDp3EQDKMP^?SQ`dDjp`#dUM9Xo0FxKet=g&5+)|wNZTU>96b? z^sjewck&Sal3maB*}2GXV)p}z}c54 zLvVCl*f&m;H{{FwHygUuoP5;m{c}enbB}iZU)UZ>PXk|CKDDT2a;;xIRKNO@{o*lJ zubHo`hco>S#4Bw64O+OVI$kBQOvKR9Xj_89ap)}`JM`z{91sDp(59vZN$AQ#jn1Ff zzSTC`vAel%B|&@Rt@XbHH@)yTn=yMmf(TmDKRsqL# zUp`nG!j<@YLPiKOkmrCVAI1G|`Sl?e=SJ~HA3#)^c`?rQ6`RGl)Rsyr(0(iZl;^Gk zReq-AgPhvTTwg|OE`jqon*Bm=p@;5+`3(Ug%gXrcXZ zL_@dCtgP3s_Y{D^fd%1+5JpN0@|_Bj=SEi%>sa(+hn~WQWc}K2A#!3L4&9Q=3|=;& zW_WG zmUS#xU-YW+9JinXZv_84I&VGyy@mV&uHZlV!p0>8e9u>iminkjK|}C1ypR4MiGINK z6Xe>5qHWE9ooWaW3(0yPV^fA?sUfJUQu-?#B>3;BJK;jc#Y#K+?vV#%tp6SHleu9$ z!4%U{;+{KZIli(^j-`F2EVTFYZy|0vornq9SR29aX(h*C?2A#LPtE@0ChegoT!&&; z7sqp-KBe;lp_{9OYieBnlxZiNuky9}@Gr~| z)~CuDtPj&0zYOrU`Q6|JFxwc~kcS)C_v|nBG@266yDf>)Z6|LqDrWO*xAq;j1sTL5 z+h-b^q0TplyAQQCh?TEC1I~Rl-a^O)s&Q-))Lec9oMI-g-RtzDY#RY&oEieS8#XNS zj2S}SkpDO*WISjL@QFD^MfAbz%Poiz^O$!ew+B=N*?)7*_Z31nXKQ#od@mxfZN;>W zUS^9dtwa{Mm&o_*p8cwvNwOyl%C%#w_jqJ6w_Hnq%=xCZL@q&6~vjLAU1JEXS`Bab}~Gx&PR`hz(pU zK)OaWF?0lS2)(1mbqifhF0PWAJ4nnrrV{&frYwxP@>3NeX+#5r@Gnaqefa6|Vpm92 zNpUG@()rI`eNfp-S@OYiulMO?*VM3$X9kMsN>A{ezi=T35`4n7tk6x?L_VALME?6H zUAYL~o|bpLf?mXZu8G?2&#w>nPdKx|zVTp68hN#SP~&dVIXM{aCS_joS;VZ84)1IV zqcX1Z6DNE_QQdl-n(HQ5xNn6|ijD}sTStUWeST4*60<;-FzQ~%gu*bLb&){yVJJ+} z$ikX`AzNbcqsv{F%3a%ROM7v!6qzv7Gdcenk&8U$CKe)&gSb`(eYtlqaDBZJxHeI+ zhlX+&Q!Q$_=IWQ>jOvNu$Ti<82V9!HNfuG$h>Q3r`cYhGU!;vSR`WH^=qFeg5DXz1 zQ87mt1gy-&oj($RAfw20wy)R$%~IR%PoLKkjfEo@yA`+#G6Rl~LvC2{F{ck^9C6l0 zHy8~VOG|96zoQ9ny1C~dn={UN6)_GeJ(_<>UoWnGod&@>2ph!j&j&Sq3yV0Uw{q*w zlVo=T=Ac}PZ>W(Jk39hQME);I1)k*BJLUg=yYbIBKhj>)0inwm9&PHzoHFGkNj{z$e2 z6Vr5vLT_1!9x=JnPRz%!?=IPm&vxOJdT)g)dma&GYE$;TH-fW6?~|S%<#r!|Y@+R+ zk>xE^6GW@fjpLF!r$wrcUf)-`&x&Zq9z$i|`AV2um$vfn+vYE+y4`bjC1xPHAfp(&XUE=A0G0%nB=RUdv*K z)V?}@&+^aCIC)3=ko#ii$x*Bq@=*UgR_V9)!&zq}*{G&Q@9lC?Vq_aE{vMbFdu-sF z*BQ4pi|ra)?KVI5K=|VZuq<)k8FO-ipk)%qkN`O;1BkRqzCPap&B8rU{HW4qa9%>g z1y~nx9=%c8(M(1%{0q3}46NtCJe|)aM!eDN%^4SX)BJ;FTY&ZX{UfaJy#9nN97{wJ0dPlPV z)rc4nZ0y=y!9oA#+u-&^r6pLJs|=I{e?%6?H{L()$b=Y)FLJ}kDtNzW!@pw)D(8RQ zFzA1i0;F;O_bFHfA&@;eTH3O*j;PW|uDDnwE?MI}em@^voxc&$6 z{5=kR1yCNacPIMK=tCPMwe;~Et+!Rks=fAuV^pZYv5Ckn3zy$F3XJ5u`gp>LIUKQJ z|367BR;l-IYaUNZa|Qh3b^2Ppr?BulDkh8x?dV?YtkF$+<<0@xjhfI`W>0GwvN{$f z1#=8?ca+GlWzEtmIi34mFaq8(yr)LrCd}h@fTuj*C?kW)iAqLipN#I*MMUA!OsMrRC5sD(J?@ z#hQNBhbu%d>nIzlk>N{`2@Y8pq$=aLfEwpkaM&H~=T-UOwd~8?nK)%nC-(%DUHWwY z8^JP(woCneVbhx>QvZHPm+PwGN)(5Oy3MCLhg5Q`6si8U%{*wnr5csz{IA>uTg>WT z8LT-j?K^`b8#k6nIHO_Dt_ZiuXH_SpeGc7iB43Cx;}RDAw||S>Z6F`q$1{9wXTHAp zCROx7Ds4TqSqy$aRz|vJ&tb@OQdiCZ}yRxIm7mU?1H2i}kWj()z z{VjI!4Pz|Z@m;4Q>6&sAK`^M&uf(BKrRE93N_@tB+JLLWdhZV$qY*lQe ze~VdL!hb0TUJL+KR+?@xT2-f9{k6TYFbC%R_htP(c%4Y-Sj9bmYLollQe!&w)Xsdb zO%M2QUFzHXh#kQ%zxmhhU6ulOk^#9=Cs_s_#Zjl%_FDbSM=b|Jg--+xNZ8g4phhu# zP7quVvXj2QIhYWR&;UN2k!}YH2Z*9?2o=}uB^QtN>oc@{VW(zm#9)s2YMjhu{KYDQ z`1Qh{-=AoqLXWaxiCE0`F}3L%Pg!~1MRI>(j?)5Eky8`}TTmEWtDUK#B{yoQjWWXC z3>ykBLeAJ7A;${w{mo&CUQ^5S&Vx1kBW<#Ap$+OZ9vsww2q0Y%Mm|qFVe*An*;))UaVszn77Zy-F2++K zSj8>E`mhR`r%Dz!2|Is;3Xw>}q9z-^rSiR(5v&@sXC+(Pk*+oKU3^v;`6z(zE5y2z z2s8N}8>}T=R4LNe%Hi9WO8MHu>2w`M4n?FXAPgWukNCqw0P zOqYDx&6gsD_|aXX9Wm?wSVEr>j*cZT)%i~bIuPkJ9Y#2OE`4&QFX%O?zErX?u~o^SwU68o$isZJvUeg0Vy0xMHA$M2klj+f%R|K> zNt;Lf;#Ao#W+2mC(z~;5)E$^*7=I-u_>l3jd>$5FwXr&pHmFO<7I__e(ofd%W=q;- zwb6H99t>)(chDA}IiUXw-l5aKpP#vzLEsB@UNl3d;?oYLT@A4-Ww9+~`93dY@R*3x z$^_qbB^U2YXrmpOSXdDkHC+^CYuSJmTiB-u2By_pr)2m{GXGsJs8GOPSLfTcG1fL` z_F7~+iOz^9)Y)I5s5z@OF&vxR#1&xW6+fzr5~Letd-r~o(hH)Ss&viOVz5uV zrwO3Ljic&l@PS-@_qgF%?rqiy4?gtmYxs&!(i+Nph)nZq=;iv>K;HHFfj4H#`2QPG z)sip?IHUg>jcRGY(r>w*Jf-9@o@@MJJQba_+zzSB{MTfFq{sHG$$+s6KBJ!w-DSuQ zvEK1Ti&S;K5IAJz3TWmstddP(kRvd@=FZr?$d>mf7iItIb22xy{TjP#U8$iMOC6nJ zsPdbwQr}^B1LDM1qrxXSIXQoyltF$?-7uOXCMqi88@k<3qbAO@^cF`)bKRVxFORYP zUbnAXqOJGbdx^|F`gAnZ0wx}joi+P5X7QA!rsifApT=eJ);a)WFg9@2 z#g^nue9Zh3z_hUisg^d3@uTFl0)Xec@0NNY?-KX-_ecCLl!qw(CS*?J$@5<;>k4N) ztaf~vUXGz_{&gVQ)*CSK?B@FH)(KB`et!ODoYWCfQ#1~3waB#>v87t4#s|=oY|H9C zOcN%in)nF9>w0y)O>ytvA1y(MvwrRCtL~g#5q;BlnB8vbYS*fm5+h}6-z#*4MmP#Y z+_Nwd6yrB0BF9&_YgvW~^@O&KrTr$&Z zYwzVSSt^^RT-7I{K=2GPe)d^d;xKFbpIgySkJR=$?1boDHnu=qK0Pn=J~r|nzpi$! zWHrWy;bEFa#UmN~TnX@t-IK`o62}oQXLOGbWHI%}81(vgUyfbHc5ymkhB`vG{izpn z5Hkczt563`AiuIhq;#~UrN#9*4jI-{-{JXkabbbUUpBJ=`d{)d!*g*meo5%RaHw0AL#of?f$3#Pny(Z({Ri&SscHZd z`tC1qk~ZvTOS{K~-hJ(s>{{j1NVKdneFlfxIR}0H4?2X_gR7%Uss+6-UXQpX!N@$K z^HME@tD)yiO#{va1VfVn7fo7duO6Yr{Ccr!Kmn35JD4a-kNr|LYBR-sGDwrb{rK3Qi>tDarI}AwWg# zFi7k4sj^`y#!ER-^`)JBcEK^qO^Obd%KrF*lh6;yRs{&D7@biz-P5%ideKBxMTN>| z=IhQUpLS^^{+ef(?~#apX4N2{k-)J}W&X*#m0RM=;2KQ>9^LdBFPd`xF#1idr+5W2 zTQrF{&hSU`yOjwyUle@(5L~Qci!#I3jEOrhFV9G#b?U*3S=Q^b>S>*o#n)k#H=1)k zWEqFEh34ivJON+miVqY^SzauZ7dwI?MdpWoR<9k_I3iXd3{rCv2S4{e%#^dKv$yv*SM4CbX3n6Ub7|oU( z0r@5tySTWx@h#Mh@o*fwW5WV+s4ZCDN<2})kNb{2E7X`~IHGJ8iYAO2ce6eYp?T2F z3S&Aky5=AWsqtG^BzLtM|NNL>9}yAJcJjoDE}T9M(rN&_jIe-+i2NqL*r1E+=Q}YR9Ky%@PutlYL=y&P75C@X@T?yF&9sNOJx$m#8n`Ne zrEfYqBxF49+(;0Q1dsr>8+a-D`#jvI!@BpyM&{Da1u&q`6jVLLU|u2W#k zEERkw?#SSOT!p(N28*rIE!uEGt>bgk6wp7}otGwMVfL@+;4l%4fY!^-&h87VgCWr2 z##2qy+<)L^(FxK$yR_8Z7V0&tV<(z12pj-NYv@urj%c<(%p2|$2D^6pqKW0B!mALD zH020ffG!T&g{>pP!mUfrlPg{wx5MRQDB{EZ;PZg|U@tvTT@?gcs;ej22<$f?oJ}b(z9>Nc1pl|N@ ziD-Ui?juyD_GmSS@s2x>iAkOGQ3n+;LDR~zzO8-5-BwAdDG6WSA1^O}zJ5Pf!evDy za#&}q&w#(}e9(5@z@V%wJNw)H*4EaYND=ez%05SLLxg38mK_?>lNjQ}F~3}*UN3~@ z3c(kz%WgP{+~M039TWp~yqxG_A_&U2X`>x1S3c7essqx{PIlsQ1%aj^7C%lgo|NNcP3h_ao_)y@j zbhB9I_Bp+VVXFrg#T6A^mvAK(xX>(#*4DzpBfG-fK<{&FB)-P-U_}_R($189Q6=2r zXm4^UIwy91eZy0t>YRarM{4uP{S-}V>HgW3;{QEsyJ??wM--vJi?s*$Qc^%$K?a`J zHa3McwY0V}Q&N0s6U+DPV71%&=>78b>BEN4n=IUXxc6K0)%TD-N#F3lA-a+4E_tF0Jz8h>^{ zD6A=)m*!PqYQE0W`i3K+q^GCn6IQ+&cD$~jkWkwE;)hC0;@sYzT^8tjKigp^cyz5! z)D%^9h$zs-Ch@fcLjFu~MY>j*Udv(*dbZDS9lvnt@Ljq2)u3ETrRtlWLovvy{EHr4 zfu_$sa}^ezIM&K!pE543PxQrWS78@)nfp!Y6;G=1bUARc@orLeZH_PbG%R&`Ll{*` zr9Ar-@eE^H!u(`6_l^H^OPT`Uhdv?@=e)S4U%{H^ZTCk`b20!@cbsR zI*rzX>W5-Wy~~7Q6}<($>z4k{N|ZLOkoI;HRjy-jI5|1F=$&vDGTJAf+Kqeae0%L7 ztm2WAe|QNv4BT?=4bNKLFAU7!p*g9QDEZo@Di_?lCt-YTBg7fSQ?v7l0nYTr7|c}j z!*&EZv~U#Z#a%)2lDqvB$VWg5*{zbTE-+_nO=~xGionFzy?v(=Bb^1w>SAmLhxs z8A~hme51?@kRZH^)@G%0Av-WXgLsbsFmsIhE zs*saqPSvLWs0Y|DjYCLOL9oKOen$$@U21F%YZ|D|sly z(C*r0EXy@J=_TC&ee1)?fbnG0v~pnfanKSS$H*d!>dA&-*Ug)7MaW>av-&YUzVh_R z6G!pC1Lqni7gseG7Z*3MzuD1O1RS>zdW;+bht+t7<2s|M`57ZC>*JWW##1?mBdDcW z=tMAF%ua?J0(ltwF#0AVdE&&7k)`D(nN)8%?)W+Ahfi%cz^I9&NT2k@qi{urvxkT} zbyeUw9BT=2rBw~mm>3HjgjPb05xGw&C^YC{FMh<+TrVd%#0h-k5C6fD)m~L+HhNgIDNXVv2lXXd^XGm4iWSmd!AmnP75q!H*&S;^mjAz(!!|c@f zidz?dTIUJuh!lxd%OB~k7@f;N8*@yjm&+#B@Mcb*5wYdmew7DDqHR&RF*v3!m+{b` zFmFKnzlB&O-fB$UwVIL0XNX)_Mc3@sKfNrvu(()D`t->H_hI?!&&`9Yr$XzolFhMj zzT(=&C&n;RZXDB6_Vwy>%mviBva~M7mI4A~#bf1e?Tb5+*2xvqQh6#v7fut8f223O zW0C0`^Vp5^rq2>vf;v&+D&r{$6L(Qj$hNS^v`qUjoFh^}A~S*{q55cfyg4i^Y>V{% z{n?gNE1q4XW3AG7)DjR^41nJaZNRhF&?k-$I92MQs$c*pT?W&BsCdh;Rn`&pS}@e- z2Kx_3RJQ1N;J~%~`B6(cr!oz1IL98!E`K1=#&D)+b?vX12*(>PFCXvAz|n-9jVh1L zd#cJhuwLsSrQZ)(U~H-5ow_jvjO9PYISdHpRH8&Crpito3v6>Q=`Xfr_(y$i3#1?oD$Ib-~iVl=*K^! zxL%BjjvgX^>Q^)v9)t$0jVZu1&IGq&8oOR+V$!6; zK;?86>JKKm9a$yD!r#&ddY4%2s$eqki7TPN85eT*@n|TD9rNwkJcgIG@dNhg9Lb+! zV@FXa;&%VRyvM}H+!U#C{FPbE+YHna(l5@a3#m|u@`f{d{5VE1Pf_QK2fNu{4q$yj zo~p(H__z&A>sXWZ97k(k@0T$gFnpH9?lR14JPAp>tO731SFW&d-8$m}u`UDkw(Abq z^aX!6Hkt1@O_+1g?a-r%YOX>V7lm@JfbvFD)5>t@*4K|~ix`@2ROAt>N9jI-(p?Ru z`(e~ZcX9-Z7S}hP7ZxtVb;}pc6bXZeR+4O-Gb`&^+S8v6pFe+2!sw2XiayzfD&<&f zNXpFFlr^w3yH% z!+l3=VxOVe~I(hlX22Uy!`*wC}O2|c$hbm?WUj_`*wD$}ewpE7XZ z8k*YX;dZuB3rXWP5_~0&8`1jGvD2YbYTOlL7bb*bhlhBm|3B8=JQ~ZkZ5uz$vs6Nb zD9w^7Ly;*{r7~uS%pzpS&}0rFL{WxFQYb@0rZNszb!Joj@yab4GW9mBqF`!+0RsKk$O-kBna8t0y@^bi3NWbsD}#vpy*qa~VaaB{Nx zvS4RPrcAGu8{xIzxj7`3?h=YbX5p}XSj2F{kff?dacoQ`t0i%HbfpI*a;d&R2`J*{ zP}D7?ttYF(6>6KfQuRfkDp@-hB~kDgD2<$vc=bJ#N>HS~t@3 z!?>wFh7rLM-q1_qwx`^lpoFmNB!kV3X{{qKEDkXX&)x3U4#x*>M2~7(Zo${3Hn0ca z=5h$$`J`|M!wt*d9QWupoZ~sDBf*e4&Ke}NmVo<^)138eNlZjtaj@Ow)6AT#k)h!Q zru0+4f3pbN`oBJSG9)$yEp_=LRM`zUGW+y!WX6np{OC!Rc8oik@X7x`+^}}>3tDAp zj&{R?Nj#vK5@M#^r~3#tJeue^&WrT7CZq0%2N_G3Tf80wZ)u&T^Q-`b>-pqH3VOcb zUcg&%$5Z@sS7+M_)favlcz7OK=x(Jjy4)=ole;={XPjM`vSGVAmEhi@9{C*c@NAF- zAG`@RbDVDCyarC(l{mK+c{#&s_=2+>fwTq*RXY_2d2%Md3RM;=kXUhvJxSivUZl!Z zTf1>IPUIgf+A@3%mGH!@LEQ-gEXmIzw&&R0Ap>be-o z7!X^%8GFVGtL4;UEaDQ#7sHM ztUYb+Uyn|uMQp><9rax{Z%#fb_e9gX$Ft*6E*S)xV za;5OF^6hw5Y&CKm!DZl$Uem2D5qQtb>${rAC4cnb-?yhsZ!YT3Jw4{SxbV-+x$o8F zp0GNrPHB#eEw%PVDhYPXL71Le7MsrTg-WbHw-Gye*HRr4qFDSx53w$PPfD-h2+uen zrd9gg!n@ncqi_r-ar-KL37%`_uBJ(i-eqA?6X=d`)KIr;OO-u_>?h zw&&w5J-4<};SzMwyTPvq5v^(Gue*rdk(X2>&kpp!b1r@0c3zAs)HTXog@}S9hQBh& zX@qM@X$*SsyfHId6ULDg^5AI5T_ECsajviQng@qVQ3K1INct^W{Qa{asuUc_fj`69 zQl{r-5-K8XQ>Rl7-Iao>xE~-|HtzaG33F`Ry?94;ICzn=e&IF9!!akzWrRcKJM@d$tO9i)rf zK_hmd7?+Nno$4#$>FyDM1B9mQ%areK85x-bP>mDqJB7>Oa9bv#{r>*g-^)0{s>VHV zoUFoY$K5`^_qc<3XB8ep&e?shiqj?PzZds>I|^aHr~Js(me>k_b9aJ-&ezBt zG%UR3<=0~;yNsmxBY$vjtC)y3dDCj>V$*Pe%kKL~ds-(@{q@6K{^fEb0~Ec+-FwFx zVqUYcFr}}S9G78493K7Gvj{D*Zi4;(jC^*z$)_&281X&V|j#PS^T0p1SL2+qY@caDnw3E|znX z%|3TGgnEZ-u04*1=;^kK_xbR?Xn}jBCtA@!I;PsOUzl36dSBYw_wgx+(&N2lD{<xD3_aPmFTcsH>}Mnr=3F7{g~1E5fqf=)SVKxd1?qXCu>9spb<} z>aR3IhC{uhwA~sde24kc7ZvQb3yXw}@^F`_TE3l_vrux8hQO2AK$GhNfs4N`GV(n+P+MYVYlZDhK9?&r0N?Q zMpC}ECZR&iSL>C3zZ7TB-27dF{kDzwpDR(=vmQ_uoL;qIc+#i(X#@DQd^XbS>AD?8 zTUl+QeteW%x`;!Dx9D;&^X1ZsW>0Ztl2##?HhH`FC`vIPQ7~Lrc#~610Df) z%yOmHEjBH@Q`h*nXm@<@8=@&jx zB8-L-T+Z)knrOQ2QCnCWWZ6`a=Pa~-x#H@dD?BK-7L*27r9H`zx5~m>Q6zg*z_&$S zl!pziR($!6%Sz4iFnW20_zV_HtcXuy+7i{e`Teqp!*kR4K2%9gF}`Jf@FT6zJ%>(_8=@@E+1~?rc`gSA_{v?; z`k5kOqhaV>eB2460Xpiw+}C@zUq1!k)%z-AMPD>j8l0ypr!+h^JvZRm7O|c%y9Bnx}qY?&5e{Xbq zMH`$}M=vbHS-sJ6&UIB{Zy85}Me%ak=B|s`hmQ^(UiPhis?+tEVSMR^oF8;;Z~vUU zV|r`dg)COOde`b*c6%g#jc)5*NMvQNJiEbla)Oq(JAcpIOZM#@4F#?hL0=g;7XOG{ zRq$S0_rp+EK{|Iuex+_$$dh#rXBeMdOS?VvIBtWIpjIw!#X{dHYeFwQkRVzE?n&Y4 zQN8(@r;E=49!C*Em@G7f(I?$3y-;8GAdl@K=H~jfJCAGT~h@ zHF`IVu#{xR{J=)*dgQp$)+`l7>-(Or z9MsBrE_+U&CqY3l?DepwYR=Ty$Rb-~hpk+QZJxOB(<8g@2!A{5|99oWkHn|xj~;Oo zk|RZw3V=`veIkhgk(5cm^$CN-}!;ohnI>c@3G~6_;h3G-Yv^L_Ve3lBR+hqBD$b72npXT77u-!K8 zCl#k+&h1u>@iFO)nC_B_!t($6FIbE7J`=ilSZj5~= zmsI+5|Cad4@_qY0X8+X^h`HXpm6O3s^tj;jn5K+y^|(L}nJ^tngl0@X->N|ORH2~o zQ=;2&2bXauh)t{-HWDGAGS^raQq;o2%v0zy0f29+`MTO61)WBL`;Z1CC%x=PTx8Zl zgSVM5*s&RJYsScQHXb|9MIWLnEH$7w-7NLy&H-MknmqF@5vr+OrV^z4DrTBUT^ryyq<9LT`cLB8MYfWxcvs- z{#UIRpGV)OpHEqE7xhY&P`x^t}B~?W$0^yxstxy-r%uAC+I^bEA7; zy~xE(f8^-Vut>3T=DR5#tW-MS5vBP_I@G)-$2+~)S4%!)Kk{_p@5!S0LyC*G z%Z>@$Z;UqJZ|ryz%Nc1HU}znn|4hl^L5Y~5WZ<@E0&3bA~M=^(RghyG;7%|-KuUwtxw@x+xkWuex^|kz+O`&#U zLvj->4~#2CQk-d8p2hzu*7VV~kgk)UbLcPRn5gQcQt#+(TEAO}vM3D~XlD`qvo-XT zU-}nTR~{)bGH7?gn~eT;jpcrKM)g2- zhdIkW{RfqdOgUe78N744$Mz+_>{;5P9?ha>dzVS7@|+CM&(Uo*ZDOl@n(tHGoVv5} zAAc#DT`qm1#n?&}RBa0^+_cS^=d&B{tRblE!2 z%(rVW>%f&yD8czp7uHa2U$gJlj-Hk=*{Q>=PJ|~^07$Y#7DG7slyaLiA&Kb(IlnD` zZ4${9S3z$%bm;lK=aEzAB;%U0Ht)IL{>?~Y^wNH+y4phKKIXedReelK3q`!Uc{c96 zd8gH2!?9~9L@H7g7>wRIelfPK(Vy{pR##fA)?>{wqhxsTeL(aRbKCnj`_>-*_h7A` zZ>}ukI+w5s zG0uCSHsD$MJ4fTn-A=Awo9)ij&qsUh{l&c@H}X4aC_kT!wPSm~L>4c8zg%j6x_;vD6r~|Ksa3R} zy=aqn_20wM^}DiN>J6h?c|xgkYz;au@}Z3b{MZahx?8+Q=2yZwq+Y*%9e_M)8qA4j zLG94h*Qd*EkAPU=k=*;BEfM!}bL(m^ve8f*G^0aa+1G){bi~*g@y{S~fk$*_*CV~9 zo{Ue*Oq8bjn-*i_j)!csr&XA58MHW!KDItRdXgz)ceKD@ZSlya;F2T_j$D~%aW=zQ z!)5B{_vWs3Ex*M#)BB!t>T%#Qo)C)K%PMt{2i;S>8_Vb(~8J-xEdA|{}{2l z%aa!^Y;;%HDBtQ$k}bNjEz1U0+$x>iefsPA+d|iztd<8pF}FKC;TW8<`C}V{Fkecr zgyq|IbvIt)0Q!dKPn#Op>@;cE#U)Ejylu>S&zhP2{3=%GqbBj}UAuMD_kGic+(PE} zM-^_Wiz=43Rz;Zv(Z(yv3k+1i65t8RQv+Q#G3tq8=IL9M7PStc(;?zKP#pmZ0Z&sf zeqcl-J^!(&!C2Js2-g1Z47uC*w)JjyXza~{Q7$ZWGT-OrjmO&?Swr-*mr2ky{GR_~ z^yxcX1Jd7DRfXJ+DWNlD5pqh;kqLZRKKy*9`0$!HL-*6%ey)>A@033|_5SW!&JU2Dv z**BHQ^6knK{l94wssYv_W+(Mkh7%8LFn+Xq_2h@yx${wcvHU@!V|L5Wm#*(F?N;XwGV^Vd?v}kqJ3s$hEfj+hM~_ z$H*R#v&lcx?yWS3L#h`K1v4}&7ytkZ0ck?+(^Y-0%L^$hu5Qv^0WaQ*izq3So$ft^ zXA%FBtki$;f~a}ip9H&~oM))hf;mB9&6Y%MO&nYUvZ9h=ms^%;I%$6-zr@DCLb4?uUBQHAT z-s%7g8L86Qi_6wdetOGHPb2q_o>zloKV#*@`Bl$)jx*3ucb9pqiamP7Z+kb>=8Voz zK~_W0wSW?a#u4ok{9`5Cm2X}@|F75DdTb_ePnf4b7A zl}X#aGDe57=(j3ci@=TM>3^+0!p>c{(vKfq+v~D1N^aBYFa8zlBmO9f?0o0I>G@4Q zY;|LYajD|!dra#Y_nLCme{Gi-@4at%aN7l1WYboyhgcgR|HZj}WhaqPbW|0MKkFP*JYiam@p}BB-PzhE zXSIqFzLdL`2tvfu>(R7>(BFy1Y=|hDAdrcH?|afOrN3V`I1Rd7{I46}RAv%P>y@|> z&u010dlheQF^A&LV__D&59%KONHwm|QIWP!ZxUj1l~Y`q>~?8?D6rOqmg2V@39w#%lEY#fuAE!Xi~ z_{Uh?HqX7ygu$SFm~R7A&0N0t4DagO?i*o&__|NxHp@Qns)VM9v_HQtzDwOcDyM>KHvA zUaARZ+JIdEnhGo!@dxg$)#U2A(YyEGPkoS1WY+Rr=Kt_zGrO?-z*YT2tA$L5BRBFq zFA!TR%&d_!vr;9f&fK!b?(VteN9DXbotQP)r5Z{+%~(29j|M1N9HDZrj8ER#C|6=6 zazyv;tqhIe8sv8Go_tp&;Qsr>VacaPwzGf3n4Rc$GtLwbJuLd+=c;HZU;gW%joYa` zG7|}Z``EwQ)qOVK=Cnrop3}ohx&EN- zt&Md}cBw~>SZaS}U#r}6p6!Y0n!uVs+Whcy`CC^@*=;|K^=6&<;H;Y=SToBX=J(kGGCL z^?UsD?SVH{=X~zvK)w%dJ^8;7wqy5k>?kMTydFoU|T3|zxH^X)t3_1>(y7R!GGWCNz$albyXcLTq5)2i1y zQKvqf^?mkHOQ%{$$lykGeJZQ9J7&r9hj$jh`j8?uKCAjw;3F#-+m18zCVlR4zo<8SqucH~^e<+&#;NFcUFLMlB19Eb7Xb-l?i)c%3j>9k-v$QA) z@p^>E!YACoP+epNjZO2hhEE=Wp3z6P$XBMrRm+AQwpGu!hRBbA)eh)4)C!lmfOn0U zUK>K>+=QVaAJMvYA!kzvKP~sEE@R zusK^beyi5lBVl)VwoPmEQTyy6?TN&sUw=*XS`({YDJpheiKexPQ`<7oCsm%YLX~qT z%T4E3mjSqRBm|k;wja2x-V=3&Rorab0VzEi8O&Jz9x!awI=#f}<7^6-2M|=7Zlv;x zr$AxIDt8^)kYFF0jUoKX8G%QdIX86YN>~@0F6)Z5r3Pl^IO@Arrg##o;H0b?r(#tu zde29+XJ5l6>&3&UmoN9@I9)Foa}>^od*-H3i`=dk0b-8HOM`s>{TeH!q8Ysuk7hmP zYc#=r@hjqrMAuj{`+l!z(_Q|JQHSNcDab|M-o0SQN`DI>8(+PO>q8Dt`o1s zFl$A<@iJX*7Ytk7TE>c+Vz{Fuz#lcw*wPZyFqE$_SxvX9+l$%!FmvP9nO;xWy?ZNB z18X*!Dn<#M5ir1e&Da8O0-5A*;isOjFT3Q)IZ4kKrIVDkSK7t2yQtgiMGZzeM#G;z zaUfkO4LZdIUvGKg8(;QgI+FzFe@&QEYZJmWmc`d?S0HY*7*C>jm{}j{~R+ z%t?%uJ|K7e+fk7cdr;FmK~`8~#I2<-`{qax;U$p2B0Lv~rHJLt^)~0fb@97g?y7BG2|&H^ffC=qQOn(OerJi#!XDYSKDrQArV z$%78W5)?%yTSZM7#10RpOiUMtNz}`atfvlpcklf%e%LLchEsX}x0$_zjazB$>aXwk zwRqt<%?rvodvRhr`G3aztfC~Sl7AO=>Ma)E`4IoF`zY)hH>Pwe7ri!W+w3`8uKXv%czpFe+G zIO+nnl)R%ldv~(<`dvQ$_k4=y`0?hXs}`sH(`FL)u8Z4|-W~Znf{Y}Q*QVZ@J@!;I zUb*ejxcVG24Fr^nHm_2@av<*K<%}&-*anq&+LGV;W#ho2c}T}KDfZJ>fsC_F;TH*J z({b->8_!*1^-aWr^ux@NE#Sf2>o_Nh`Hrc}%*bCGw-*1#vt0DT*Ux_VXU(T^RU&J= zPU42K2a`?8v~doDS6XJLP1N(>BeQyA8~JRmj6b|!Nii?R2^nyOpjUjuUe`5pL5F2x z;v8&8^tm^(rgukU2!HkJ)p0Onv=029soT#i%+#LG;tNT^DHSdwsd~{UiF-M_LD4_2 z>#gWviJ|935K!vYtX(?+=5&lb*0NR}A@RiNFB~QGOi|?jz=WU{B$FF6HXM+o+-;Lr zTyq&h7i6ByUz6}YY`@(cJ`-^H&BJ-eaH@PXYhV3eTP32v{RlUNs@}0*zd>DF1SKl1 zIZusQxXe23R6A%wr-X~*j~FQ@+ry1TKQc1Xht{}N{&<7@aVEA_x zTVRgm16FdF&%}ov4yUee&K*-tTbHCe7zV?wPx@;9KPQ zILlE2k{3Rk-6JU&C2a*s9uIKuq5KIjbm8-@*7>XIH^r;I9IS#u<0uW+*^8j>Oo(VF z-5?~Vk15k~0V;7K@;F$Hs0wP|eWP4x02OV<|Bj#LR%MnqxOWl!pck2Md4r%#k^}|k zM%^Ia_NE_`U^LZV?;CVGW?kB|a|Rab5E$LE;v19foSFN#3=F)JREX)CyDPJWuhXl9 z!$hKIOV>ZcCq{+Cd(g2G60b`^LUJoF(Tiw*bt>vU1eT%$6beQ1BdfT_LB`N- zI?4=A3Y=$dYC;y{1AVBmD5Ig_D|glZq=t~E=8fUy7G8CaC4yOy&WirNWw zTOvHt`X~I?S455PdD_2@Uc6nL9fhyDZu6A=E^_?Cv&9(tAQ2~~SBaNbW&Le6ZE znCmG8=VH^M$bjKTnOO9fb8^1Be0}YGW92$q&cGxzn+{?^Px)-d+qFaU&_!YNwWV^5X3F8}o^v2K4jl>frp-80t!B@fL= zWr~Ln#ysJ;K(vTBawo)*@0*qPC)k}xD(UPnryOwgnaGcT;gsA0!tKP&(}|h6*68Qf z@f>wWU?2>uSd;GUasLwkx=Tt;H(UbLv~RtVMEwV6y&J%U=$9Bk;*M`KxopNyjVf>J zE6*MKD`@7Uzd%wE!ALv{f1QnfPy6}PFco%O23=_UhAS^vTmBU9O^azc!vx*{F+nIl z?WDHN|L;O`=S}=tmehIdxjOrze>e_0z-~GH{d@mRM>*E~dzx8@44sTYUzs2Gpuj3T zUI_<*dp6vvF zLx&3B*2wgqAAB}z;YDX9$NvOklGc``qa=t_fV^N|{~o`n8K402GLn)Mj+>bL8G(dM zc3rvfMm~0rn1;HUPp<6??=~))fvb^$yHRSj4KGO1eqeaXAFRJpm(F=MgnuutXORY+ ziZxL6uv^~C8)HCyLtXa#kRZXMrL*gxN8&}#@0L-!1Ot^s*zsbK62G;<3|;B}r|Gy; z(RMr*CQ{4A!ouQ%V^OytkNTUqn~h(!G9A~@t5o02V%t;(#{jpMw$zSjIWYBHOVxC* zBA3lV*TUk-mI_W`5n0eMmWVdIUEhBD0DB+z-b0LtOcIK6m#cbEBmB3HFz@mC9@6e~ zF(=0`Wm*MHF3Acp;o;XPBx3p9dR$5yao26fQTNGBj#%zM5xb$}Vq$C^#1!`)Ja`_X zw1By7G{Um4_fI_CULp9uKYK(^Px4?~Cd8gYAuA6ltEkX`kK?@y#2;wUh{Y_Jz%Zc* zg(v^-r=wZPUz+e%Z_&#yF-y#$_7QDz+nxGa`fINGi$Ro~ICy{dT`#HdnfML5RS5rC zZ0oqSqET-+cvU$ySNEHPohWiQZ9~W~HxBSdnv^&%7DtZ9BHBOAH;FL)f9t4W@dm!8 z$_IYRU{L0^@3#?NscOowJ06cD0UD!rCzl_nch7Ou?$ebX+aLF+Q#n?`p3&PV*DJ z9DD&-S{8K&yxR*0A9$fE3LZTGf+OBqUfJh0#QMk=W3&8c`KU|T=_lwbx21-d%%<^&Bude|5?T?JMIUU-vdz6axHkPl4~ zboKOt;3pEWL>)aKRz@$|>qeLH=0yAmzSP;V^nT+;bPeR3q0kH{F4?!cs}rg45_nn z?kVAbwaJt(zfo?xv!i*{*_;<>>}W8eDa^Rq)S%Jt&3@T zFpm=;rhTt0eX0X!m_bN5tr9 z>kpM@X5qyV1?L+}ltMeQ_JB}aXbgIFe8=bJMKjSx-I9H}&PFk~pm6Q925M7Ur+F9M?RV|IxIGCJl~S zy=9)D-s0E^2YE}4=prU`oPFWPum~efE$DK zRw5%N4~)PnBw#6VauGZ~sq&u*TYbGoCEgYcb#*#MG2178nG`W^GcaVZVGj}lwlD~@ zZTh7N6!hm*(jg%#GpGX_0be39I56+HcVL~Af zFn9asSIJ@U_FLuC=f#UqHo{{o>L!jEy?%4wNDO{g4!^~2?+js;5G)ZxTVW8j(Yx{NFbzRP^pO}r!L%lNaqj729q;k; zZ>+=0;hZLjyr??jQ>FB8^e~y*GE{}c*0C;K{tkSMuua7uD0blqLHwhO7-r#Zqba?{ z#e4h0JN?596yc>HR|%5xU@QToJrlo5s`}FAo6M-xe!bhJ(9-? zZpQess^QNXj7>4nbLy$Oi^~pf^%`PW2>TysGG$rL_QU&5;pb~LvSWj4ggWrUu;Stc z13`Ari{&U0N$c&=rOV9#c|UPJiFMNEpr_T*IE*6zZa?>KbWHvkNmC>2?10w2bL?85 z-u;H3*OYJXv7I^zc7#I*uS6OuieG*O7@F0vCJHp*ssbBGk?{h~n5T1n6U_;)VTL$B zY+qA-K3oF3jPcOjl}TBH7;Q?8!FzAnKneu4mN3oyTw;`W?2?uUt#(}VPgauzcbKiH z85&Bh5>D-y0{!nJIBZg#Pk(io5dqvWEVX<0?>_?xkg-mj0LZX+qy>9WjCi2J#YrG3 zYnS#I1mDDAoDjb(VfRFVW-fl}LuFOgX&@6~OGR?mU<&xS)c~vgVaSjfos&aOVOYA- zQ?odvK-@oKW)=y%L^=w`Djk@YAHOijBy+IwiiIErS&pCB`Qlq^QJgte@a_dGvBHXP zal3(~22-afLeT50@R3dQ$F=nsR&7`$%TONhd%e?@TbLc9A*PV3(39h=Ex<1EOvSdd z8fi&|%6*)YJ@H!T^w)PRm-f}(4>LG9OI(afPaXH{CKi0K+RQlB{{+^d>)`v$Nmb*R zi-I2~(c(Y;7_og4D;sFKYMZoYAK>+mr~K#Ew#bk0A54*Z!=C3e-t}gD7qkG!2$_Aj zppHl=?8C%$xnFS}#{?`qBV6~k1`UO>CltPdHgEvMbqasCy0B%Z3cV5~&;!|j{=>OO zni&g-cnpEu{~w79j%M%g+sR*+2z8T-5>^WxC>yz1hhz5*j9822u@GvoxjBJkV7|>s zk;e;rGxC{FI6LnHkARr`pvMARo_IE{m2svh@Rc&V<(@f0t)QKxA-x7XJv@E;0yYXm zQ58A<(3~86*9G0qucGhZnZ(+y#@q=1i3VRe=US@glg_K0|3h#G#EK>qP$ULQ6!qw2 zCntnq-M%GQviNASdlD~z7D?`PtmdAob2B{CKHt3ekTV~Tfi7EjwOIL=^~YdO_V~xk z?XO1q0B9QJTU0eX3jI0h6elwHut}^ga_5t9e8vyWyKdsR1;QX<{fyajHXlZeHy%`g z{Z@~Y<%HNGsF+-l&jGO?k{b-+nW@@%L&ed4%tfY7Jc;2oLNuTmHr!)=C=eB{+Y;+) z!U4Kvy z@4RXly22t9My<^$gGkW0UUL?tTlnhcU*Pm*PzgX0x+OwK<0w`^D4M?|5BGEIy}-=e zG?#9uI}PdTIl=EY#3%%H9`_fZ5OL`a11gNN?H*ivCNHab5-0#>4mcbzP;zxo{aIi) znqG7`Z7)hf*-6~vEAyZH-Dctc&r4x(e%k)^Ul1|V^YZevw^26i8C#%MV<$sgOkz2u zbgWxaMQYtZ zHt>a@U~Cg9_4z&CZCv5KLqxk4@e&etFS$|CPDlh`&(y72x?1qgPl3DqZ|3pr$4K{f z!=p=?1F)v0&kX8=zc6gSx}Cor^vT?xzc%tYX-BXhlX~C_HbmT7i!RDlMdyt{54E(1 z;i*SeJKjwV#hgAvGe(fiyO94I3TrB>*~vjF0Ov?@-K9Hs=sw^(7`T&YQA@5o6cB3? z&AnF>lUdLH`e=cZoMkfLHVYN^!|5AyGniMX&i(%OrpV#2Tg$6|itw|2b)jXvAo0(s zv-E6~?|5N@TjR#W0kD2+ST?6vW@!^kd-w+K!Y_*?R&mpxUm;BCgk+_eeZ!-Kn~^BB zm||6fjgxWY<;^dIYO?y*ZXppSPzV-k?2D>6DJ-Pm>${$RyQ0NKKmNX$4X{X~2VA}~ zGS&mXP%&)Z6t9G9^y^nAguij~@*-I~sm4K+rw-jDBG>UP+m{@XtUm%CprtseJGr^J zi5)9sqPStcKpj-nagb=|$ZZY}PCviBkkcmL;e&r2u6xoKfC9pVHd|Ly;G#{mJR`^> zgKk~-;rVdn`0<#eq&4F8uVE(Y`J!mwdMi#kqa#NG@aBrHU6%-rh+st_k6~`dcqK$> zV9Hh68E?XX`D^!(p(7&(n=K zl)=K5D!LP_4~=q(TUOY+_iei&A&e8@3oUGj1~y()tdGm=>qloGPncfb7RN0CIp4>H z197$;`rOaiH!-M)dwO`8%j&Ov`!-+yw?t$HhM6?Tso`TpOM}7F0WaD|-Olz6iaKrB z=m?5B<4j;-r@UYui`<0hKU(CN4P)BxC=@a*3a|9Y=Sd3O>W&h|2M?6~wP$pUl0b8Y zn=gxY+$Ht&Wa(W?-t0$_KlgsyF^Md{D_Zn$gu@@8uQ79JS~{yzI2GF1>%Pz&DV&R;;^ls+LTEKeXbj{qyawGQ(8pbKVgft*a z57AwyXVEkkm_FeCxgu_eUIphUL{Xz}cFB;cu~Fp~0IrL9_b{7-*vEfQY75)Yl-%E$ zi5QF+?A1K*>oGR2hD$lA^MNeDbxH{ti&ZJ+F^=1|wgG}uH} z?PqS>k>ZJsia*#H!f+`k&IADDRkd7!y~px<;AZ;`z1brA_q*%8bT@{+@dBRk3@UPEdK&vbT<5;n&4bKG&47<$qpr6{XOzu z{O4~PoQ;@-;qKWYHlhbUMovDAtYVEWlb`*6F!uVt|79MN7gyU1q)a!)Z)SS<-@6k% zM}zlvyk%sXC1qL@#$JgCnbD8jqZKDDc}449RAG$#2n&TfCjl7PZn{I?3(O_Fyz44m|mS%mN;sC)%Qj}~9jUPr*6yT*bm+S3J z{NxD2{34K)3nBdUQH6;BVR>@flgv?++;V(>0G+1U!zMf_eqZwZU#MWHJwzoH|A@#4 zHx}g?Nzn(88ZxgzW{k1HnRkpVOcEf;KL8=UQt@~Ez^Ra>Z(8f2*%@`+eF}mx+Hw0H zRD^K-SWBeGs+<|n^H*|T+9zZ7z^KS8k-*Z!rAwNB{(b++`DXwF7>gP)S?>2Ho(oL8 zItnUUoKO&oX~+E~euCqY9>xy=J&UssF}0kzB*d)e&EU}`u}`-b{ukxDD+0LU&JmC` zY-v0MXIIaiHscypDnp=a?IXq%&wDv9SKHjbWA*aI;6}wu;aQHMTO#11TJ;nL5LM%6 zLt=Y{?RN@=@UMY^b>i8dU#4z0eJY1%#Lf|Z?#U9)?Cg*mTOur@-mf;LBZq)xkkDzI zbw{K4B-Z~x>$&qqo+fi6$LY@-MKp1BC7e^ZnT?}LQ^1QG{1AHWj6MA!!|Pk*(agxW z_J&)EGh;wtXn6SN+&^+g1e3Q;q=Kp~e>T-$zYFi4FYwVM!+eE`ZNeg&=oldDejdrI z)+UWH{S0gZ#K=p^|NQSK|1C&lZ1Kw)+YPQ4BTi-W&Lvbg3YR}nIRX*5wfIQYpT+Vz zf%D+SEp?WlkYPB-u%W~h(OzPh*dE2iOQ=p95aC<@vj&DrwR^*a~s_-x~ zQT;vO8sSHaNBV*~*V48Sp4G@2%gG_W#xNogW;?su2G=rv=yToZ>4nb|*C5L)JErry z?vuyA&vWkLnf+s=2rqJIt%nP!@r9jJ zQkLDR&*=jx$+tZT2^8Wl6%_i=5u&xAPjRbd;Zk>h8k!9#_LB$XIv9XsH;-?7<<7%*hG?dAhaKUD}s10!@0(!?ES6oDb-H5Zg3w%_KQs7X{@v z{B<~$KX~2-NL_-lI zl343TWY{_n4rm{iRX_m2d9-ic&-tY6+2{R~3=I25S}`toj^7dkq-E(v0Bbz$ymU}* z1e5{-d@jKQkk5A;iX)L30Zal9MJJ91A5?5h> z*iiSqdUz0(4}fBPhZy=i59kIOfyhYY9Y6?jU=`3lr{bhDS09Sj;a}m4<5mX%Z$Boq zN+_#I(#%nSGpwxtp{Q*4W}w^fBUyoDDjGs?-4bD4B4R4aLny1{X}Fes;vwBGIG1Dg zPd1GXy?RoWwm0GDUXUQBe|5K=y#D$0Zj!)rz2-Z3mL$K0Aj2nmN_LPWK6TwBg}Xw` zI?=Mzh@pp-q!rpDSky0@B#zH`1Lt%kVUBbESlNowe!q&<MAe}B+3aXxu0C>pu zc8Hc|%WZ!@tmwK`u^Jx~AFb7;s2lwt?9`L^;~R!*&}&TrNgjAm`k@xP2L{5;>-?9D z9aOp1g;rH&>F;=(_G^45=g!a6=1$AQ`Aou@zqD`41MYse^=^tJe(f=KDi!gk-d8@X zi;}>xL^dPv0DOD(QmqQX{h*bTFc^aIIrl#i049z+qJ6+GZf#)&-Uzi09KQ(1qEDaIS3}g3@dR01p|X4zQkb0>FO?zb=tabTQ&Pd)md21!->`DT}KB3Uyx)Z z<5-B~2+7WVoE+f%(;_Fdo)252M!)RE=(nY-D-?r}6G?EHU;&nlqMIO*WM+VVs#;#t z-CaU%1f@0RUZkbRxr}-?5Woxu4%Z*#0-mVHYsP?MD;Om)&4g4fRa9k3yH1jM18L(> zpX1$Qh2aAP2?2Qek3vSAu>mC$&=D!*RPrnPC!yVMX#g=65x?omN(BYbmE_PWN}T?3 zgrM;RXMt~XK$O8nobmuNtN@31Rh^R^_pbQE54&hYFcFJmIMnDKI~Ik+zV+O!yI73c z_-s(gK>}X`!ybwvs30-BCI~edm56%`Yay@B5-fJ~sgg6d;VKOcIr#`jK<>n3#=yX~ zWD{FZz>zH>7%HLR!3=92T|3#iC^}x3xR`lnTthYk;MwJoygL~w65|3Sp*#=Z<$qCw zs1PtzAR=1epPI1lLDL18HukSXDZXXrt^yh`E@0mp*ykFSlY_IDV2coEFjEAhBaZ+V zTGUb7MKp21MnIUOj$nj45A5|{zr09DY(MwEO5Be8U#>E0$GHKsu*OkJyr|)0Z---( zJa2%gqJpr1rK$yddIL$@jsOZQq}iVSg$@x8teAnMlX*3}I*$c|UZ5REEY=5sb2!KG zo(0xN*y`xQ1CSL$4l`a0-x~JxSk_^@1#jY%UY=)ztc~l^jw?_a1S-uBE+c(0W-SDm zAff>hNrzd?6oCa1Pb1DQUN3G{OMl;@Y7Oy%#~DqkTrzM8*YLmj$}qt$#rwVEV?>AH zmq>Vz8>4F}QV=+?@Tb+kp3J}i$dkW~_#Y-Xq1criS|qY$ETN=3q3nVR5IuP=gBLfv z(}DmX@nRQ>16K_JNb?aJ{2-Gu&flfkPEpHlHiSwydgGcEVkQ$VvMA9%BWi;+n2|$O zO^q&gHwsqTn=cE^0pkez&$~me{Gs;{sN--P4AJ5W@3ziX;Ntq_{l)iaBbnwO~1d6L@y1r^K%I-KEXC!cp7SS;qzFVwvf$Im!q@fEQHwLr@B7!XY=)VyO5yG z5WwpAY!HP_0&)3ZUM%?@M9qRkPkrTrTHqZtRYgDAl_Bn z>D?Ci?S0(o|A&oCZ=_xcUl==n@Nzjw(x#OcPeG`UGk1Cdhx3irNP}Dt=`~19wSQTS zH%*e2K)}pE%`AtQ3Q}<~(=Y9B46{NJRh&0=FFPCgTO_!{;>@R2nAUstCy1FxV8*o^ z@724aN}KIbpQ~&eMnVuQ1|zBqLy=}nSr<%E|7W}k+PvK7>oybxV7A`er|%+eDj0un zLg5vS4q?UHmkhxw^WRSS*AXC=6mDe16npS?HSUmQE%GGW1mFZ2IP82fyPiaOE!_g& z9<@;vJnjRt9La2$N(Y66gn=#n1(N%K`S_B7DXYcV(T!BK_U6)_OIig{JQ|c{t!tE!gtbar^O1Kp;(zN+8+~|uC z3k>UbF2R#nu3_lYD2mAMQSYGASnH5>K_-?pljL_*V$?`V9o1X0tHVtn7-5It?13VI z1;;xoI0(&_vQ6-6Lztjb6fs1BAp{H7Tv*^x&u-fs1j1-a?Nk!=T`HQba0!9_&9CM!Ph3*`n+uQfPe?BD+mOFMTd1Z2PzsO}{ko(bE1wNiN(9NLC``minw@>?&83nY#Rye! zZpIZCC_t}Wj)T8^70@v5$ZB+JNgn2%co1*?S5x!s9#AEaRiX|?DG3L}8>7o!X9A@A z#wjHqqMhRytN8#iKD-5U`hofz$u@66XXG1J05)@}4oBAJ$=7?kvX z_G`3_i4iBmVw2EiNyjKl%U!|5uBuE zM0gS8$4EQTi&O~XB72Tl*6Jc0tjmxX3X|2+A2|GNDdHMLnk~eyNSz|=4RqL;=aGRr z8Rru_W#<+|Cog^vJ9eGDdpU7EAlx4t_QD?%6VsY;H z^aVsUE9_mI_Z0f|9_8Bioq9Abe|^nr^)?*LWC*TNWV{GedY3V`ItT$tJL*Rbu0Dbz z;--cPH#t=AFeJ&?V(*shXMWoJlw|J>TnC#gNxMhd4a|JkUtz|q=wwH zZUhxL@SQv0(-&6=tKL)|&R=G(Wefm13GsomMSkzxxYRsO+@PLsu6m`I?~r;a4|%fF zOA{y@NP&vGdfU(vL}Ti=8jF=t@62^_hvQX}hP7ZQz>TBoLj1R52=?Q{=aU=J33@dy zVGn>8`YK1pgQNhDShXGNrTH|YE;qT?=KB}_ts^geFDHVSN}%+)Bk!~?>*w#)HgnuR zGsnhVnoYFhl8RS2bhLh#>sV2bP=U4Bhxm-7xF7*yptyvYIH0J}>6pMQD{`U@*D7w$ zB>L%dXFnXg5%?9oU$VeTy+C_=s!4x?<@lwmyIkP+sq^*jVp^I1jbAe*{Z91-?z8JA z49_MfymRx}@$Uu11Aebsoq)$a7iWj}J5dy)RsTF&bgJrCf_%JD`SXW3lm9nVi1gw5 zSqB4KM+lGWWXYNml;*O1r&lig%J;uf)mJwtPI4VLspW8Bv<(ZdYD}(QxnL^Kfo#M- zX?4n5BZ4qLyy3_}5SWF36aIABmib_3qfH}(75I69JVLq+rIqt zpE1`GX!ok?ii0m8bz&a5dcY=> z(jPzW;vbX2kpUK>2AplCPjl1}$R4L4C{)1EnkCKy3`J9rT^1LYa8c--w z6xy(QQu|`Af5WDy1p!IZBduY`)Wr2Zh4z~l_awNeIzf^x^1vR6ScoP&+7-+iS_DfT z(bWz7)RZ`swm82T=hU>)xu)rN_vmkHT&C5t$rS@NhH}GQmt1#sYj*eRsCTh;Q4$38 zc@?_cChA6@ALeSrM+PxlylB$Ri!Qv8<{%^&+`_Rh+eq#4s`@7iVsWz-7_(OOtC(-X z^^HE9l=-BALi8RTu6C1F+aEgQ~)ulg3CCc_jngdwr!*ty{>pp z=E=X`X2$yQXEI|>Vt7c(vq{8up)bzr)>@9@0;rxnQw18;bKlFD$VVld0+L8p*dVx+ zO-LG8T-zCC-;wtegg&BHoPB<-f3Y5wJZt9fQoPw$rq(l|o~}3@1_KxC7tW&g zEh(4S#2!%yqcUZ5mLcY@*&9sg?;3oHBeMeGjZzC%&l9T)%3KD zCIvRJ)F5DJGxi?khFk0-bkHgyD;$5^yqEKSToFg(A?da?&_`P~KSJjxgTou-f}{uK zK!Z?As)08KzCI8IlEsa*VS-B6SaJbv0biSxR1%0nZTI@Hv`NG z#!SQ2t@>oNOdqWB^IH!uLY>u6z~I=2r6JZ~L`1}EP?iYZ14Cs^alU8h*L5*|hW`p_ zBy>y?NbN%=KzwAA-S4L(wA!M&mW>z+#Y%(Hy3)xc1 zCPfIz%FfEJBxEHkdv8AXXYcP1-_QB}0pII%uIrqxjMsBK9{0y>9yClN_!gS(<7{L( zfaX#JGe9B@V3iTFZ26}-gFy_Ib*NAIS?9qCKpZlsHLMCFr%>pRyaseHvhRG;yg>vX z7L*B}0f-C+NhAzmaEuETibTQ-kr5u|OUbGT2~u3k-e-IWW-}nU!V7cS3%((Ej}-x7 z_*df$_pL|hwQCOvgE(o3T#J;!-Dkt4CfAX{1dbs${zb^$guw~Wq9MDD6qw_n{CyLi zNJjYK;dxw0M>QdL^7x#oSZ@3|1jm2$Pa3D3>=sga2m>3oAF zFSNKAk+8vm8<4gBvjLEd!m1L7X!&4I6@iZlP{)r_lU9i?1PKJp9zZ_GN{v4qF1L_H z5S*D;`EafQB^1J6z#RdE6S<-HW?DiPDv%Py`&qsmkep~m1Mfbp%JAcAk6yw~3f~B6 zl`}MT$3np4ov66tVg&U>NQE0~BA~K6GpznffIMMQSjYCaREfnCuay>p92MddbSN@B z@oy!pymWc;U6+*xI1B({VU2~$50t~+WB3DZB#FnNuk8`>n3O1^Lw%T$2%V@&@2j_0 ztx8HtfRq5T7jmBAPy;VI{N{ki)7;ZA&aN_Dbk*Y%wYA<{)etY#k_}`duRSRD0EWFBS570L>1VK9xAvy36!OOT1 zjVqPr(R-&or7-OM?m2$w`_X%S{#hWLfae-?t00yDk{gbLJ4QZ#KQ{j}6NrYn!E^@O z0+d&LEO>q6#oAOOy}E<{%&y~$MiSLE2r7i{49EkV?ID{zm{n8}1jbNBA}o6c0DpMP zMn*>9nnOPvY?J^NEZh$%R0$rslVV`=F}!B?CF|bU+maGEcVGZmiFofDZ!QlyEi@I$ zHvbok0M=3DE8$raXK>lh0(_cvME%s!#Ml0{r~)xb^Qnm@u7oAAN=pW@_}A8nrql|( z6}S4G#IhB^%EzMwZ=cW#hc&FOu~wIQwnW8Q6$!5Zr%;p4*I2HKCB`RhXh)htJM&Rb zR=QHbZc@6Dak;W@PW6MJ9@YLs-eu?e0)x+vq@+Yse`fuFI+`zm&foUFUQ2@j_jk6B zv?{0Pb{Cm5m~rhi-4<3}*lU%qWj$kcREqEv{8V#nKUUtGHB}N2ptX+$S}F#{z@q?2 z9MznAYn5+|PrR@9jQ9gIVB~S}VVgx-0s6xg^R>X1-$c@==a+%E87t3o7q!P0Cgal| zc4h8koB9=JPZjmm`#qNaYWt$AqUdb$TSY<5S+k8yLUFO5SyADEz1B%qU^yh>D-&#N zW$kyU7CPHBXT8|p9bdPX5S|+ByFu<(lKt$ge$~GDU=LY38UGj2k7z4W&6T=m6Pmif z$o)@A5z4%JB*OSbHPlHx0UN3;;zjDY?D+%WZz!wCU{ee5 zG8-J^XN_VSI8wd)tOzW3%=cE+o@8M0V>@N8!2k3K5^^pw#0l;H(_nyTp@`W#=ttNB712Eva&Z4fC2M!YSM_N3drNR`LpsV$^Na#F>j1rz5$ zQeswpnIp;oZ3qQE0sgBo+cQ8EoToMZ(-#m|BSHtXKL;nGsA*_fA=gdFO=jEs?sYj% zD3-T3%;qlR>ccusSO7^D{R8*K5OIXjzw3$CN#pksYG61~pz?Y7I;7$ck*L0YZZS8i zMKJDR^K^5=@;E|_i~J|~fQW9od#h+VP7>0iaI?VCCfs?R1-FOgPs@LwF#bBQo>~w$ zE)d1r3-X3?@LdW0FU3Y+v&A*S{JT8m9o8Vnef`4>43k9vTueAmxMEy^Yt9BwXC3dz z?_2-3>LS^bAHD)DaA2}D_utnz|MxZNFM2b+OrFvIC*6qU$U^Mae{1z1nyW)`-vBE4VBw`O92lycK>(_;5S@+q4Jp_?+{ZORcrs}2 z!!-$0?>+0bb3zcBRs$7-57>c)!3*d zt4k~v0lD_1><;GJL5@Y>0rjA?rL?S!KSR{fK(JvdR~U-GZb2vGtG=I?An=3}C_8g_ z;0$f~!Enk7ZGDfH=hRbdX<^{x0mTTm-H&O*lRal>ZXhw?eFjp`HdBt6D}?RQXtf<1 z2iJW=Zr!@o>nvu{>~p#pX(~?&vQP@;7g9h^62T|Of=me8xPEuZ%*C5mE}>xIEeuXa zy(L!zD27c95mhK%NdTGJWD10TX8=bmP%?5{z;<^~TLcd>h3%iVxahRfKq~*~4^MvP zyq~!=#Nw-0YN**iE8C7Mn%QO4!{Io~+fSD-!!V7+J_&q#&p&2Ks&L0L#sFHdtNclMf zJ{UcP@?CI?7ug`!fng*qHPsZDp5IVZ*~fn(D!z!gRQom#n3Da3K@+6~U5yzqXd^kv z`SFtY-VK@P=I90JQ^1x&X*{Bzhv@=(JUF0S>bCbJhAq+wwdOt15ZW;;#_%NHV&XE* zcY7Ym`H^;8eK{r#g+RZ0mK-6wuFm?8M)jpQ-cd2yGu6y=ctJ3Z@%#Ttx~VX>!oUTQ z@oZ|zO>nRVasq&CAiv;3KmRYw9ALa;Vm4~QPEGLDYh>sL-9vi5Y5?857z4ETJ0!wP zXPccn{*ysLa}m+Ugi^T^|7Bi2zEW(cM6&}cbb*aUcdu z2et@lABNL3050`YY?Ln;W`VXNY;OVoi;kfoNUtsjPvNi{Iskhxd71d+3conMa^odx zV&k~L%Qa|yC{F^*_h(1r;IgLZOqo`UjSRPLH(ZHt{Y2EoJneW>gzRwegZ=r={$5*y ztoS0VI(&(?zO^0JtzdBhV^fa3amqyFpKd@~;pZYC0I=aO!?Q9FUsS-ZJ-=GtTnK?C zLO>`Vy#oj2W7yKvypII*4GexvgI<{Osme5*h+oP!d}2Sj#(Njlf<~e$v3Len{72D} z?xt5`uE4lo|7Zh(OZrl9rI(Td*~sufzzhBfpew7!#!=!oPTD=0jo6ocbskdUKW6QG zdWe4(KTi073Nl*EFl$k6DkP7G=4t|I6t-^`S%;LK=s?D3UT^tZgD4g7AMMzQU|)qfIkK1Gq;>+6?@ z>abSB5ei?ubdPtZ>UR(SMYZ_i^{e&afzFTew4$7Q49q}s`kQb_`PG!4=&NTan~aiR zk3e^bv1tj@!*TyI#(qJt$dJrdc;N|6Q?ABy-CjyKFyY~Y(Vf_mRgXPHKJz1bs61ao z_#eqh^z<9iG98rBZwXNYy=4mBNw-NcdzL-XgIOC^Yd*@Nxysyo$Lu$Y#*E)~zKYFK znqWn9#+SV6t$K-JzEo=gA09@6NrIBx6*`o6A6R76_#DCuAOh$rJXDz;G6D^&qk@EC zg&dPV7bh4`$nDQBx7yf(#+;nQ#GlbmQS;MGvANxXIa-5ttcJ;2-x4_+G(W$nP(`o$X%C; z)jD}A*HMMa3#ellMK;Rjv~OR1K!3E@q?&MfYu2I7;;C)!h)oe20{6= z8tg$u%9wC(@9zk(I*5xIwi(FGf4m@A#eb_mum(^}#QI7}NeSmAkXbEHWg~`ez!EZ~ zf{v3Immv-bv@&DAAY}lud9A9frogIcOAG3IIPPZp^1_SUvrHZfhrW03;3Plf6|fBE zMUtP-zXM#cEvHs###@0K355{yf)5Ubz#IWVYHuJ&Z50jeB~?P#{eY9Tnx4CH#KCto zC2Rp!IRZUX4lIXJ8j#5n1ERUlAmkhR`4hK%)KOEa8gO5y$$I#8DS?yrYt#g|!Wz(; z1+TmuX5W0!hk^5j7>N@0)+mM#3^G5EDM0T@9@j$kd(hADr#mK$D#Uht{ar0+I2Yyw zPETkK1v>%Cy1q>I9J1ffrA`ca+yNgQ?V8&fg}4{b^V6e~-GCcXO%gay1{Y1ZaNFL4 zbS(#ZrX|KsL`Q5Az`8~Z)P4^?L=1I;b~Ox~qYQ{!1CSoTkU+Qvw=n|9*dOmE@^6y# zy%Z$?{bWzYV<|?2utZ!YeFA&P7s53o14ax%&k_9W$DlXjoPlz$4iNny!HTTXRaqd} z1Kiym*cn!eW8d4}|C!5wd4AJCn7i}~0P8!z4VRR)#Shh2RERwRfGcQshKh=dR5MQK zDU;PmE}#Uo?rkrBuipQY3D?8Y4QVX>$t}xS=ep7L}Mpv``3w&qYYTm}2ME`>7TWy$YO)qP&DxgxR_ggF=NL|FcO!2EtT1>8Vv zraMvsYGm*cqrp&K(Bq|$%m!Ej@(}<;i>f;Xrmz!uO~~8f(8`MQ-P!jqIz`~Vc&Ktk zE+4!Vsdb-#;PC=OV0S4IwWFN_u5iO4Z@aIF_`Yh=#Nc{Bl^{wW=q|LkkxjqmvcW~gESHV$r`oyvEMyDJ~Quz<-QNL{Ge8e>>@7pKsej|=@td9H_YR_51PjV zVJjRT0Z!R|MSROvZQAS4+pRu6DgyKnxfDlrK&b(4##7cw9Lw&4RC3T8X@r`g;1V}T z&}tvoche~TXGIg(sTYyn`caO8hG8`&c|AZ0L3ag;bQmf*CXgiaCU^|(M%&=P3@ygj z>!{X2+?T8UX2dij-iBh65&LV+-9(4NfcZ4T&9AovW)|m;lSaQ@;yvd%IKXeZi{I%Y(STqrDXYgv!1P{N zF^C3ytEfgi1|)D$@2xxVk)?H28>Xd&flPt|O>Q7RMMfu5`X=m`&w9i_RpYt*73-Bp zU$*Qt;0OJYKzvvOy#T{Hk_Vh)ALUuRfsqFqc;u=KzB5=UN@mM^TkKF@JpszXev6!i zhZp9wEPsM@DQqp8HZ0@Z|M_;9)xI(#7YYcemsm}uM=$-ps&VE5hk^?En? zeEdiSx>ywuQ-V?l%)k2j`Y9HLaOeUfl_>efVt)n>Vp}8g-kAEA3a^UwmKMXHrdyEE z1Ak#xq>s-l4^gs0pnUN6C+|RZ32rF(G$2g7D!wQV^|Zr9TG_AqGN&@WZ>c2p4NI56 zPr?I9eH%))H) zmG0eI{P`mXPksP*p|ZzC@<(o>;tXcmDyq9oG0q)=;8m6Prf|IgkG`~spL1HA&&lhebuz(Kw8 z`f=CpxMP;h>-S|-*f+9Z!~P5}qFT)ol*zt*=9)H2 zRt!i#J9Ak^n|Z#<%zteYn%4xNXD<+EhD>?PvH4^BGk|!#^5BleQt^d$&B^QQr;X9B zK_WP(Xi~Kyh*2w~PB5pW5@^)XSbXUYjs^tiXje6MeBsyR0V=K^h1Vd5&3j#HTnGI|y8uLa{_iO9&!5uKY1FJP(iiCbVr7-O~z-UcCIO7}^_CyhegW$yY# zNVEmTX@~W4YvpRt;HZGbTR6ER8hHR)<%YCq2(dxeBHP{HkJVebG}&-{fb)=Dtqt}v z_urrK#;z-42a+xj_`!0H$yu;AR)ynGU7sodYT{X6)-U+!)KJttqu5iI?`fr{yvhAt z7i3R?fjNKmABb~RvJw@FhHs~V03a4fFvR>WCzzRgWteIJ)+>bDMU=JAue&n(WJNLK z+D>VaVzRNZb=wm)U!32ltg4!4cnjO6X+@^`=In1p$V1B*Ts+Y)`X*oWE$z}7VLPPJ z1i8C!A%TE8i{q~}7f*X-!aG$r4?h@HHLx12t;UTsNb1*~eaa`me`Ob3M={ufk8j9G zXeGzqV**h~GTZ0;uH?#F4}7oMTZAFikVYLsVftMk78>2>eUZegs^RF zZF>Uqz~)&CQpy1y9}Nz2yT0ckz-)hMT85yHv=Z^~IqwF9U-S+Ag=o`*E&@TJfr0z_ zTF$GMq_(t#D?a6JaGPN?ahqvDV>S}w6%wlGQ>xT9Rs^vw>K}g!DpEqVWKwGCC^-J> zJK%CkNYH|gMH(TW;Zo$l4rn{Y6V9fF@T$QxiQgd5=e^@7KMIMS@a-tGRKx{1*3QP} z9lV!~0W#A;kYZR)_w;q@CeiuIqlU?ipH3eS2CLPQclCV-%2ik>_?xk1*PIiW_PtvY z{3hm#8rQaVn!FEvgKoV0^+-DK*94>Ns&m4|fu~Z_6(33po6xgRl9r65gGavfg}a`I zrm=3hD|?SED3mK2`|UC`uJV1NDX0 zuU}yecCZjm(pA60dJmsc5jR97ANe!SY@{vet`3?B?CfAsJ$V}s${YIPEugZZv3wWX}1`+&I1 zeHsEUr=Y!AHkA2Y0%;TAU6|XF18D7n3p-waMbU0?Srcl0#;$qLNRIuK1iPAqD$`_& z$6W6w%n|q zy;~hOy>U}hGyYRDewRBUJ|kst*cdIhh-jD1{WSjk`PUU@;6zJwt*MdhAosuDum1V- zr`yEGY}&10CdL(nM0ehv0i~$?@ZmP)ivc%&@%R&dY3Va6dD3$MHh+EYk+f@6S1Scq zOnqK2a!XA+vYXeg`R%UNUdsF2vSv6Jzi?x#&3W2tS3`C#s4+<4Y{_3v+d+?;%aj>A ze;8MXA|W!Izsub<5^vHGqEakH=;rl8Nr4Vh00Yy%OCs*EK&Y85!*@~$Tu`^2FtVyj zddiuaF5gcnK2(VKl9ZHGVGr+L<~3pAbF;r?bYOiOc_3m*^ZF}EcpB9w$kAfST6CqC zcxY2?P86P4ge6}~(jw}WVu+>wme;zfvU0PVHDM;{CSxnS{+polM4^7q%>mpcB4Ynl zDGQgX-W^s}h5659loXh*Z0Pcr)Wd-83fj@(4k0*}Qw( zq?G!YjpH~v)^hSFQf*S24~$C6lq`~B)Z9no}m zl;UBI<0RYmpMMu{8Vu)Yt*!c{XPyib397_WMZ~opTw$l zrgd~Hdz?4rUaEr>TOJ;*au4j*l+66(hN;$QO9VS1J{;*+^6jR>( z4|*$ug$@PS+bjiXatuo5yImfdg zB33z>?STm0=g*&0$9Eq~!xMlf)Dae>N4jibCTOx~Jpw2%K@JR@SwPwtJakGqTPX@`D^FLtN{;o({5b zDL-aAMb`!WikE1fev;B5Bxv7Q%fHSWO*X5qUHcmEKtA_U=TKn&a5Vg)x`7J#*oM~D z);Yru)C>7xxi~#!3DTdUBI_JkCZH^a&9N9@BqJDt+~@V|!6{LnG*|0T{xwHi0&*g! zHw3C9BF(u&b@7|0EnZt=gkGw>AF31YD5qPmI_CJa`1pzT$@a(1gLj%1 zZ?r`r1ox_%uD85=>vL5TjXUrwPe}KJy6u*oAQAuembQB?prL%_nr>bl3BWRl=ihW;_)R&@%a|4F^_JJbLV{xP1k)%m@@@g zq{Vx^`Kg-1FK&O6V$^ziGvR8XOL#w{zP31%Rr|w50phzRIwutlS~pL93uyJ;McdpG z%KE!SQ0AIS$#rdEH1!M9Yt+Ecd^hGA;=q2Fh$DK}){~X>_Nn&%p%1MrQj;f~BJuqZ z%oRU<>(QDfr-&>&g5Q@BJvWl;VwTl{@#TP28)Vl9|i}3yKPJeB>FA>#?G5_|8( zN+`d-!>#)9v~_YcU(<vaWR9Kkl3pNQEiHyxT zE_y6*Ei`UsSWhG^1Ro1in_HobjNYAj1d8ge!gGnNh{9VHQue)3JL zeVqbhc$&NNegeJ8N6FcTF)fsLd^Bg(6)8HLU;*6nfgz0Bbm^u%ntZE?sVT$u9Zrw} zKC0%Y=LDpVRADtKGUiRpOyghXaQ}`UGAZESFu8kD%N{uF|vIt0_` zkcKm{PK-Rp#iG+fCL?%uX}J6w_Gcq}G>ef1@(22X@B!b+{G_sQTF1(qdU9?S z7$(1l#X`YzP#w1OkYD;X`lX+{*EQ!p>O^g=m9uyA5M$ENJPX#f9JCTJKU(7LZ1R#! z{7riF_!;KMZhrYe%V`~f@jcn-0maIS!=fuKrXjdip~b+|U%V3pYtS$D3(Kqaocw_Mrk3^{H}#~_GJkmM6iYCQf{d`RJ;g>I}_G%VR~sW5QcAjW+2@q@;sXVu}2h# zh0oGJu20W`SyxvFX-6h+el6aWC!I?8l*Nw`2irh!ZxiqR!Z|b;Qn-SR6jV*U_{kt} z@;aG9y<_$G;fD_&PE}6|Iapcqg$j2KOASn>!RzWI*8V_*JINf2`T2E2*lTMhh#--( z=-W}lm{XG@%)%ot+f7)#eD0zVT%U@`ETU&NUhLdy3<~YA#QE&8tEd#pT)a88@o4tl zB)X`Hm^FP2RrAovO{I)gpZoo1;yMhmDiw7;3$OJpRf$ID^vNmGqaTbcqBIu?hTh-> z`ql`!)L+AQiwU_cEXGU|8~->d;A_-?Ga(AYhUvg+>N?gTyfZjjhb^Qz?q)=cjjZ_X z7xV-wgO*1J5k`m3EP+2sY1CG}>LyTWcs-bq3;Uk?B=}{EE%nwwrN4h;8D`f*f7O^f zvt{dcpQPB(+`YbcOaJZoOft|iUr2LqN%;6c1j7X{74?y1@b`>66XTM7=Nw5ViXU(2 zn$f1OjDf3np4UCTuUTqs>y0k{yJjpOS3TysugdCi=iJ5MJD#S0%6U$X@hBvCt7;%8 zN9nU-W53Vt`Amf#CVx~k_5D9B%g;7f^DAm|OYq!y?9He@vzN8gL$>t*aCVB2ou|i5 z2`~gH1sS~24U>RfMjDi06@G`Hor{FUqmiUFhnKs%yHi3!LKali)LM(afyM=A3bW#6 zv13kCPBjxeX5`IZ&AT0{U9d?taP9B(hdwGFe&Ezo>C^^UYkFJ1N7EC*ttIw-+4CA6 z3rRSYnzlA>Yb7tH{H9v6NO?hl%`arK4lLY>ok=DzH&Ci*k9!o@K;OYAU0-CAuT?XR zn)ZFhQXW2og(}jD%_yIUx>#vqY<6lylU;KpDOGQ|CT);!emd4-Q~R>5?e|VO!O(qc z%g+mAH}45~I4Cj?GDRmBx7ACFqA8&w&~vPY-cHLqNo${15z0zkGANTdpV(k-Ixlq^ zH+mPLe10tECaL`EXxGZ=C#7npqqbq#ToJmNUDSf)yNqefqtcC&E@3B~Yjbx>{iv7S*VB^gsdSe4K+>y|UmF7m<4%I8Svp_NB$s3}V^7QloKZ zzt(+gu3It!5iQ&)KPhY!dIe+iYR90%JrRzJES3H9mY<_9{jII7eehIe?vHQN`1TWt z_=a4V9qHlym09o&lq+bIf=x;yK6dYMqYc0^BXkk-;x3qlAJABA9J~T)snG{_;5~IA zSFR8W-r+)vaKxl$v5_tGWFOq|yYh6TgPr=51CuvXGjZ(oX-qs!Eze`}%XF6s^=!nc z(9)0)ZYrD5yQqX;iAvJUI7B}Ia^R{T&^+t*pU zM@2A`{C+_IM>C7BG0(b)O7eq!Ar70R_ObhtDCR{SAHK$4$HWv)OPV0`D9xiG!MkA? z(;r&a+Zp|LJcJH?Lp+}ZK2n+8&)|FGYVCe-Hmn*n&n8U$=L&yJN6dBl+!G=Wr?ajn z4cW4xzpkMDV8NSlCfdyAB>vqny%wEd=f1QK_Bb#|{_Y^1Q2RrLw=`~?(A?zuL~k9_ z+>GInQLMj_c(OhN6*=?d;&KOPNlapLL1)NdhGNM*l>8+vY9%6kbCl|>TO~!`me&hY z%>~qwE3FgIxeD{t3nk^Ro@LI}>bL$WDR~L2noqdV7HcbpmrNtcY7( za1ZDNeylAAZ#;Swsx#Mm?fO}$#7W!`$u~?1 z@OeL{(qd6M-!P~l5_@SbVXobk0C+h6?-ZH!bn=;GWE)dqpYpzD&mzyX`+!%-Y~VA@ zZFfa7rCympN*L)+TTMf`SA+qXWqNZ7qbDbL@Gq2!h)`ghd`6fb?c zgxEgZ&C5q=>MUl*!Heo3mT^n>&Yf6R=aK$@4|dapH^z_q)e3Q~A=EDBcqvnOs*5ky zG}v%M>8=Gf;9zOqiwLDgNrlpdHJnEp?8X1itUj1i4MeXO6AurZ9K}%R$DbUojdL1XaXI%P9(-s-lU+k2R_9?kP-o73W?&;UQ zy^uexXpfMr;C^L1g70|YIkP_;6_PmAG?G_v&6F@*ZBz4wFnjCb&d6b?27WbJkEI|* z0+Vc$Q(0PQ+!Y@*$i6Vnc>Y{GRQI@+D+ba!g~=6CPv1B`pD9p&V)a}h(&}Su-r=Re zonF=neQHq_pXNz#R=5vJd3BhB2gZ1fKgf;H4^2t&@mjiqCgawM=voR&Ybk1a%jKIj z>4z$Y(LUAe2ihzGQgg;iGZZj+#M(2WCK5Ypm(_ZB@DPRCXf~zRBDsaRjn(oQvzR|M z`iiC=$}RR2#iKNpx*kud&lRIuZ+TEs%BTq zMiHrUOr+QMpAGM5cfCZ7YPqNtg|*O8VuOyMl=Q35r4Ck`mkEs*rnxEc^^35vHV(Ju z@_}&SLXpJg{S4Q2P;y%~jc`oKF-X$m)@KanLoK*5)Lf~|Y!fwqMi|2IdxeaQEO5l3 zdIPnD#vE@&L&T!gE*Mv7mQT;3q=-ALqn<(=S=VJL=>KKsR5*T)Fllrs4gD4yDJn1| z!or5fFe`~nP^pde^7S0s-}bcwI&E<*6q0EqIfS2cjP6J4?eLTxajh?HZ!q_pWdCW+ zsbg>9Z`(*x4|;q#tklFz^nln=_dg|6;-~r^yaNwVhgWm%yE!hl_^wN=Cf%W}|L}G0 z!sSV*+ThHCc#@qazLtt>A)n?he%WAu$K)AJo5|F|u)gkLLpJcv`RVWGaqB;dLRR;& zTli+D810PWLOdSNrAYbjIO3sZLNfY>I-vo_F9N9~+2=^H57R92i_jg%lDqvroBLbP z)rsmVte~JwHnlx~ii1Sx`VUe#wE~+#?YKzWR6_gp+qWCd`{Rx)oZzKr`)cq_PqNLi z+ISJ|J*mR+mXw7vo&`hK9*UI6(#y*r=nWz0fMd6Pr06{*&3M4!{pXJjut;*HWv#P@ z5ynq}Dg`nN(JU-2JpgyPzg^YXvC78=BYxj-!?})fAU!6`GIK@`H$4+X-%vk#z5N!O zTUN^aGS$ThJ&wmpOU~8H%Z1E|Y@v%T#t}6680F=4Oh^3WF81}*7o%2lN1R>yoNUaN z8$k=Cfj?(Zs9#fK;iFyb`HFWg!zEtL!MTiMn+p?Vsac%Sj=cx3*{i7Y6pXaX`vK#G zd@dCznV7}%N0=J{I-9QHHBYGgY8r;hF65)h1doTsKV2(Cle&MVU4dD8%qaH*k4aK& z)T%x2^$Pdt!2+p{wjVG%>LqIdQ z({N>NUWc;P4_l6b<+FBX8>m9oVb*mPrPFwt&R%6)`mNt?=N6!o;000!8bJQ4eqSr1gxvB`yQ%=Hv3={>KcR+e?Nj7WD>lo`6S=~gE?>{PmC~qh;`y5) zZ&aW%`ue!g!v2Q4hyY&IMeXIlCmjfCM%2Im-6;(l6LaIqH<@2D+oZ${B%X$tawk;B za{TL70uRH;t6d(HbVUl7%#>TKEuHIGN+(6RR?PHt{od@AyfJkyGQ>x_M@Z~H&frDw zsO>hMphB`1HOVet!m>1U8z(lYV~`-@cmG`pniCi1%sgKVqV+Y~5OYO0-mZjZ@48Lh z3!gZKRFpXTVF1}nsfVbpuuG<>pB1%N$0wayzrW>7+HY;HxBuQ=;p3`~&#dde6Trf# zPLxVXzaJ!YxDg;^bnc8sb!LQ#dXQMqd9D=}YB*>)Uu^yB+CsEH?_DXL5nBE%I?_*Y zuDq8&d>9V&Jec{C5))Bs^?x~k^XQ=|;6f5KFcxm7hwcDb0~;|VHF!Zc_K`zPORM=B zKmYn7*a~iE^gm;?Z`Ou4wSkkJ-B}8b`&Tmh#l*jwGwN@>VMi4QY!erLp9crr&XL21 z(aW-d{uIG1aQ7f7UkNg406B$hOQ}R|Xg)!MlTLrI z5?Xq+A3QD1jSxNJJ5BjJx>zC9|3NHWeoe60(9K zkyPP}z$|$%&$2)=1E!Yxb>+^T zJFLmLRLfebig)1nQtOT!v_Us{!wq6KCITn@~hq`?y^mOC%KrO;WWb~xJ~ITOil{r8&M z;c1%OZdx?O#_e}emv6nab}^QAYbUd!&x-Ca4LB8T#>1YZK6BN_Ob@@V!g+7a?`egd z-M!OY1I0Ibm|T~JtDiEOP>FTCeDSoxYTc{0JW66y5^d-WZj*mLOH)uI%e!{6tsfW3 z?uRQ>&wEF@#t-Q3bz~4>qzq%?;|5C_M4b4Y^5ihpb&$Q;&Cy=bDH$>QU|gzFGI9mZ z^t(f)Ioc3s)>6rvoRR{zPkG$sKKED22V{RL38s3n+6CQtdlgCz6!V9<+7gjzs0J^UHpZt%@Ejq5Mn=7?UmsM}J6sFujNZ)6TXmn!4e z&DK&WdG@%4`X@KadUJfa9Og$S4y|v^f2SV}P_E+2C|IOm!@ zu=Fv{(a|g}=-wEm>fU^sb(!#sZkr)UZP`c_013@CC`n7b5#d3$tuJrA`}oY3uZmlZ z49_6B_ICV?1sucGTD}?92RPqM9xx2nlh0M4QRq&4B!KJi;q4=er*i|Lq?S7s96!B2 zTqPAkE7iqySQ0Up8a@Is*9SDSmuvC^%h*QQllUm@>&2v*bPUC(1+};Ei14S$gxmXct^lp-pmzr5v)%n_@J{CF zzWuY;>PVYvJI1qdoQoMw>1I*ltSv;wg(WjRMO3ttf^wE4)W?&@N|}nFH+GF^w`%>} z-#CMZ|7#*+Ez)44Uh1d;zmTQnZ$I%;HKA_ucc1MGYxJZC5j>&2Y5PT}_q?$=MzJDh zS55aFyEYCk^tH9!I9Y7G3)ZYbiZrsahtgiw%}v`^N&VWC$2EnK6QdTi7^!=l**kv> zx!VM|*G3q@AKhDNIkwGYt?5tP%=Ni`HOPO{iKC+9E~#}Nf0Eeeb&M<@@y(A?9ps_4x6z zL)PL2ANd_3K|<)u5^sWl*Gu*#(drggX=!QcU*CSQ%`><&GJXfNHwEBhyjix(z6H9g z(G{?PMycc{?Y!eE)GiqT;M=_1FpHr`_bsvq?meFGU)({sZ3sOD%KyuVH4PGLpZfKo z>t^EQ#zC*Q`c)7O-R2+%ssI6yku)#Z2S5(V+iM`n)Mq0spFcbU5!Z+ydw+eBAfXEb zVBbh9?f|Hc!woSn?*g&&Q#1^0OQ?^P+uXUTM;=J@xaMaFBT>~1wLX_O{d>1NuBR0n zk8#P!Ro$VcCJZBvt!B)%7&|*T=t^W!+=LM9b|V4$&{dP zEznE-@j&D^g!8t-Um^_*3=$79fiVY`9C8G@yStH6AR$QULlQY5$FU9W1x!5y^o6z% z+)+gf!qG0IC89M92l-$~fEn^#K7raHCpGIpT;CSV(ICI;I6pgquj8H+`oRH#n)Am% z^O><8Sa@@xafLdA6ax;=wE3UxsAbrh@{uuG-14w&OjUy zA&NOGKv)@aar!c@Yf<^-GWQ^9fXD@c=m+?;5)u;7m&65<>1afZ3SR?P3Q22)zcKnU zNCawF@OpGWiZDj0fuH%b{M88aauD@BzjmJ(D!I5%a^=IYt&qMl(B!vsI+%$7rw87? z?tuXn7Z-kFCK>-$)_nYGoDLp+awK90J*gCZUQ7z*JZJ5 zdJB<|Lu8554fyFG`Hls_bi2)Q&7Vswm|zsKdcK1{qCL^=ZR~6*E~Q7ya{7ERuX2r_ zouR7(76&|cclQa}NLpI^a!OS~IXuRt_jmy}oP(7YBUMA@l-&;>`aSA9-DB*#*b(!u zDZTMybvannPtv+$-^HkQ%K-i_7v9NV1bz?y$`=rNa?757Ti*!&$^Lczs^aS$H>@qF zXH!EhK>5*@Yy4bszt;gp4& z8y}u)gx-UzYUAEr$qO0CVXt1j(hXdPtA^Y^5LbmjbxQSZObN15gIKW5A%!(aJP;y; zEvolzG)I=Hw{PD1~$1<%j(MttQ^0M{fe10Z_020tq*7+lUYNG2bY(%eJV40ueheK6)zs`y>0 z2d^m9t8{?X1QRp+@y$4z5Qqk%0gYlC#3*BAYDPiABg7&AMGHC`P@ab9a;M*X!cdQ| z91c2iQ!>p`16X&`PsS9EjC1M2(j*w$1-GY1B))s`12Q@X#k-i#Y#+h2X9!RdFH6BV zwc}ecHtfxk;raSAnh{5KmwFdjUdiiR>|CBN-g6eo0BqNp;CExDt8uMj-;#b+DlODB z3hN5H-~<1qm&s4>0}7F0vX0B3bu}#TcnK% z1ic?eb6C_yBC7{A9pAH{6@Z7uW9p9=Nd)4#6Cd4-Haf5MkcgS7`eQ zTT=OG`Zkux^KI%WF}A;~Ea5;-_MR&jeaqbOL1eoHx?SZ!y-h$4m2NCNNqflpe!}W3 zs!@m~(B*CqOW%v$bb)e%1TpaPV#d$?^KP$0ppKHm)G)f^zhf^>NZut7uW zmR??WB~By7#lfj!Dg@p(N}YjE8GH}GGf@bV4bsqmNXy8 zIYJgpLP$`9(6m0Gdlhk%aq;q|GSL;2>rmKsWI|30ASy|A zf;1mj;Bmrb*#i$C%out{#{+3DMvbH`MarqIPogAUT9z_`09_Qzy%VPRhT1HcCX8I= zDK!XGg|IpQDpThKH0B>}>}72I>gNG@&4y|WKkjYqhErQAN(u*zwEA>BmSorvK@MeH zx=uybgrIZ0pC;$uSUA*7AWfjN&=87&LROBGgN-i0fNYzEVNV0QIF7mN{6Yp)x}iqR z9$g0K!zD0EC{10!?riv+KWD_D;?airDJafS!H0)F5D0{UlvmJ+JP3wxOV(@G$dP)x z-@ku@J2szSGO(#P14Iq`mIf~J4SKz$h*_F`|VFUJzL-~I)eHT3t}9F-i$ebvtj(fKtgu?p<)muW&dd|;GZGkyI?qEdL{0T zK2hV^1;(={pd`jpnQQi{gdY_PIc#*$RzMC*c_duyS$OI@p?wnE5^P%Meqb5ggqPkD zU?Y%lB6lC0j-g09B~%iRjE|8jyy1$egWns zElZjnI#iF_ie)&b^xLh($_3pq{iZngPfBM6pHxnp88}+Xf5GU8K=J|t3t?a9k#>S= zc5r3ScuFQcf6lcbJIa-BP=e$+{|W9uY8VjM38DjG;)a?+4KLUYy!d2)G(x~F?HELaTf-8>)R8GIsSr-X=>yr-V{1UR)ovr4M&=PtipZ0~Mp(fu;RZP!RzQOz zA^Q-U!B1jV3YmhCmjDNp?0|h*cp@<|nJ|%!7wPkW?ZZ}58@xAa$%3#yA(QySs4Wn! zg0>X#r$ICtnBF&Pl%Kpu|)OWF;RtKZ0SU(Msv%h4ii)IU}BbO zmFQW6d;-#hhU7GcELb--w#C%#C%Rh{RSy9nb8)CXz7s$9gH+*MpmMShPNz^?fJ`7@ zNx%uU_XdAm1nek~y-pO?s{MNK1~tsXaHrrf`|yGU^^{H&{mMg^7nbKGY--(Kz9d7s z?F7|SOLE<|jQUkbJ%BY^y-)#caY%b5lB$Qq{3FG+m{nF`D0x7u+TJb2YFv%Yfgmm70H(bDfQ<9 zwG;rRpuo|L<9WWDJG5>Vk2qXz7o1;gPgT^%+$dBKA0?kkL*QW8@7%v>Tu&RH2H7-n z`VrsVflrR~ARK~CXnr>7Tai|}T3b0jtUBNzLWY6Aqva%++2dfneF|$S@-)b~z2OjP zWqwGIppu?$K_7~JM^ac=SP;bXQcx(e^tF%x$;d|{B2kDc7@)|>dcz`_!4TX$#>&+K|u#tnv zdKPLvFheg_e_MXHd0L{di6&n<{2)s-qyH*+w%atpvH~;H;nLEQ_u|BDjyqw-kC=um zHOt=MyEs{9hlVQ9a&ZCF0-_#c<*Dg;XYMq03!N_zc^API1N!qCcuu+;j5mKzpA-BK zSMME9_5Z(*A3}$eBQr@vWhE6t3a5w@LPmt_m8=rVN=9VQG!&5)N)#caA}U1^4GF0v zBuS+2_2~8ae1D_c`;T|8isSiwjQjn%Uju?W!=gVBVh}ex_&`XnddnIHt6e_QAi>Y= z?ynC^M9(gM18a)_wd~Cc>(f5czH!O&?}_BLgSpx|{c|K7muya?Pc9=;81lxGzobWqHUU!Hr=NI7U061#BrX{ z*8qC-=A9A)Y7konkYoSr&5m5WBdost6^`uWZYh+mY1`wtl1>FpoFq=d^I#CUGntVa zDa4nQd_GX~l@o}yw}ty__+uBvunZ52?6y}B!cVk}d}JtK1r^K5~@Vf-X7BfJiA0T#s zZ{RDrzaeBhlit2Xf1AHdeX@P zMud;k97hSo$(RW<44igVZfe@)n_Ox%Fp^9}qHi6sG900U^h8R_%f!a*;EohS< zDQzBr$nWH${GewL%%8M0w@r+7|8iiPU%{=G+&z6y0Z`H^%lNNfJ!S)%4ED*fKa}UhKf2uY zSst+|7KYn|m!Xd*1vyIivO1K(Cq4n~29h#7^%fLh=-P>b!CxrH*dEW3Bxt~21c=wO zg1xJQpk_hauRd{~XK(9>)+s(d`b9@g&698J@Lf|Mu~b=Fe_n>J4Q0u!@M@UxUpsJn z84VZ!1YOz17dq*MERTPS6k%Z}R;4^Y3{#%}OoFjqWs`WK+Hyx9PA0%yBnD!YAji z9WHa^oZdQuTjGlXG2z0IvU$sv8}8lGxE8s5Et$eYB!emyH*Va^{~UN1AT~WdGp=+A zc8H-C=13SWl%*3Wmj;L_GO4_ANZO%n<9j+-bI#7<82W>EfX;)3+-h~s+9nlt&g@1< zE#?>}87mGLXW!?b7>4itk*QVBKOgN5ej_B#n@p?{b{Vm>R}e_lR_XjE^t7UqCJ^f$ z@Qe)ya{b^lx_#o)En0oS3w9yc!alHfU zb;ta~PGZ}OBORp?(C=SZ>q)7pi&&-#;3|cmB??_%`vIhTG*w)?P!jomb}x!VFv9`o zgyH#NOOPN5(rA)3*f9=09?^7RA;o|A5ZeBXBRmZ31C=U!*n11WbD;EP5w4c@M34QchK%7y52CqNvr$Od3XP6-|J`7x8`ZAQ*8p`) zE3P^rhrSG32|lJkTZT@%Nh){Ya54@l#Ad~{`KkA2!B-v<2SM6T^c>ijLh)?)dB7P} z4wD$lkpC{QA`7WNsbbvUU42{E&volh)ald@HuF^8IjN zh_18q$2W*v*;L%6Ktw00u2E542C?`ca1Ka1}}OLF~n%@R~XZ z0!xHXE+t|}5`jb-X;deUlga@Twgdyf6-8och6-MwPqs&_4$=M*w~g$PVX<=vOK)^l z2)7fQ$8z}>u7*u-JJgy?0A><3Vi5t;kt=9g5g$QnT_xQV{Irvgw{*0IAH`Y`RQ47n z07;y%%5sAKr>xy`-K9fBg%|3((@z9!jy|9o121t4GtD}b3opjrU8kt8o0$gdW@1x;-+fGUC+K$^}PE)#`- zc}`+uP39U2w0Dc~-kfiS5 zi{^Sn(J(XPC%G2@_Hik#S-X~%+?KGerl9n1=;ylG8wV87G~ve`D>(qVrcaaO6A~Vx zWSMMS#ML<9jXb~~wRuXz)o%u47<8TtLtcO~5n!-hg+j zc)Ibcl>7hJbp@O77xrxOrAvwbBmDe+VL8jb#XFO(t8B^XSWjgpv28V*pP^v60c2R# zvXV+1!-$$JZTy;dNI-TbF0#RMTU?$tu=kGSIGbv02p_DD24Byd@(hJTVYs4O3By&# z8G90?w2qFB1};2qX>p!5qqlfTI1L{=Z|S>rm`n%)jiM(U)~;KZi_Xk9WZ$O?lKIfM z<53W2bAq2B`Vu#;g6A7SVi=5jX1M3s`?if_a06c>xIw@z27tpeWXh8Y1uprIQx8ex z3_{mTjL+auL11X8F3}Rjq39w~VH}?r5&>bv^{@@nRAMfuaOfr8gGU&+8@LrTsTfiN zg7y6!h5G^Dl{C{eL9fxCkh+>wS{65*lfrKvn)?2o(9EztaK%4r>H2(>2%AVk+Jy_k zu&o2_5G6k8TJqN|SW{)&b74qME_n&v@5=pO9?i_wJpndlCfNIxe#5e~1D&b`z9M|G@>zQFF)1cM zGP+-s(YXD07Jc$?HOj@dJ>_J9jC1H0g|_*BBgj0Q=1{!oIP5^*gzB9IA0M}Q+mV&U z9PDyqCs0q40ZMOgFWv;&ik+By428wv*}!R@_;%oHih~|RQtn_&Lf#W_rd+$`DExij zJFl^_{Oh(? zjGVN7rs4*~f7p$ynepUFO&Zn!W_N7(_|Q}|j!Y?*J{_H8Xmi&INCl9cgvpL3ZOC`M z7*&k=)Hvc_C@sLvVY9;!Rl~8@#I4L5^Lv8=nQ7h)v1`yP%2qUktn-X@$zkzd5%8)Q zZevSd`#soAUQ0~jE3dl)^}w?=KXyEP|NYFsbI0WuJZP#mzXG4X&ttB#Tnd+no@UvF^uIdm|Gr!16! zBlJArMu^wqYi(banMwERQ){wEX3vaz-z#)$TKVp8=lk4c$>R_)42A4?!4(~3RlS!w zUXEKMYtSS;N!sLl@3r!Z8Hai5gj>2%>G>;Pd^(num9Xb?7W*KN#I?S=buV6z9jiGE5GehDTw7p2HaY6$8iyrSKFY!sZwDvCjA7Pjw9ao0Vu2F` zLTqxDt@{xiDca<_IlZ zdjxYX2k3t%&6+8VzrXO-W}cc@=z$7d#(2BPUa1q+i9F#|zT$JE-xKzk(iddkc%cKS zN#v?`Y2^ab7vab-`q=F~a3x7uE24vAw)5F+bm%&CT2Bq7s=T>{Rc!)8Dz4u5JiIF< zF98Sh8O&sP-D>w^;8>cQW~SJPPXgi@@?t(B6OpVnzD+`=lY(nI5HHu=5B z*zk1N>D>LLJsp@gjINCc^6K33YxI-f#GN?GiNjC7K!R*2AhJwA;$)rY_D@mTAhxK|)7)%f?gP-ypVnRxB4 z;yaN)W}&sGZqJgIypZ^eCv@U3bGuCn?d$81^0(GQF%P(Ew=u`@z9J89we)H$Ii9=y zZ@Jm(m)Rtq*xuqZy5_vKY?^WCM88gIIK3vqS|ua$0m#iLZq|VvSlFz&rvKfX(zuZra%!=nq`aE}L zTbZcTvUl4Z<~V9$aOQ`Xu#T&yQCTZRUcFr>+jn%!_wAFSDX(`^XZ!Q3jimCS7P^qJ zwK}adoURoSWGY`O;RRTPFVp@`MRK^*+VrQ->zv0g0G6}Pl@wVY@g5F|7|NK)C4|$d z8BSucYYej0*h|fp&|41zW4XQiR>?BVSdT_G-<1&4KI7MW_=b1$VddmYf~}vs0~UQS zA6znD;?Z{1L-D5DLjCwI#`QlsTOKcr8C`SCDQXhgp_});wf{K4(>rV@hOTuyVxVOj!gBPUzmYmtz;K_ zTV;7T$kNg>{-yYk@;9f{M?c)rzmRGV_7zgAV(3!zR8d?^(HN)E%X?4=y?Z(}f3Edb zH*0>{gqr%kg06VqK+~{KyBHpFLJzXF;@+`FnVg{MYHALs{aVZKGR6;qhFFWp;wwf= zPRm8N3<%R%MUi8M2hur#=Gl*-t$bghICna*jc0iQyn^_3Cn~JscX>Lw#!B5`+|!%3cp` zK;!OcXiAa~9}>cL(%!wh!OGBZLSI|^p+NG_C2O~DuRo-x_xK>_4M#vipU^oGXkt0x zD?GD~!V_ks)?t2Nd1bfzpH&)LFB)W8bwQ`}Fmd&2Cwak-t_tVw=BO1N3id_3#^tnd zyR(OO+|B|iKtYHauAyagK^3&5nB>E9Yhfa1Sdf?ZMlAM2Jw^3Q?pYmb&8^Th86Mcp z>ZVA<(0ql%Hm{uIIA#3B$>Qf(3Ej}^vbB(rF7WhzG)_Ta{k3j)0o?Yr^yxmngM1UF zvh6lgHBT@!#|=bdN$ekobaY|5Rmq$O00#`Wrw%TQ9$W+uK#%{Fi5vNF<}bed8lsxl>twD;t7)0bOhbjRfGXTB`i8L(8-B4hhbYA@{f1za2*JrX<& zyU>0{AAWmh+Nr^duQ*CV_pgi6`37k5XDv%f2*=WEuZz7O$OnFROipUQwAb-wugKbn zAKY3usw8wXbmkPbH@8=~8}Tk-vPuc$GiQ#VB|G&BQ$pdJ#)=!L7S11sG4;>9ivsXr=ma%KJ@Aq%4sNkZ|iFO`b71n(Z`iyWDqn?C+$ z#-LzJzvE^_;jNx;x>b)@=CIYg4CWIXx&+t0Tal5G8@cK4;wulzpvTWl5LWr#Z+e-x zO^dsZ!%1iF-oI;i>{z%30(+5KM}bx!A1`k)TZ_-%O+xYgxFUnlaYJnB1oyRui6%-sOH5;WT4C*B-0X_NmD^ey^!%k@V4qvMc$br2viIH-KxA0a7 zWVm5yM0vHxXju&Hdv%koprg`xzyJ5Yl+Z2wW*jG-F8#><#*c!ucOvNHim5iq z#>b`FqS9drhd0!2^Nr-X{ri>kQXH2ljV^6Hc~v^x{D1#5JguMu1dhg$iQ&jRHP71! zPGc{QnHd&}NYJSO&UH@FOEvSm-8H4UwT0Zz;d?lEyV*sS2s4TVA8#}lz8QXxwb94Q z9x=JXEj~AdTeQyP3a+$b%kZhO@(Z7Hz}#dyAYrgs6b&9#XXKpJ}O7e297X7%U0>}FeV)uQ~MQs~- zoVD+;%yAq*+u2U#q%-mvWSsGR%@{`}f5PDMC(cI}A(vvrWglZ?*Y4f^Fn_hwpk{IR zb;!qAreITbY#Ukx8dDk~>O(-q9mknt>|GHB)z=vbU0w}4R|snhx-i%=f~nMCs{{V- z{GQ{-k9*bIG#Kz|v8)zB=OUSp(MHZ13Sg&Y(GGiHz?_JQuX)V8O}@9V|4w7$&L~i< z)?&bIOZM@q0o0U#2Lcx|Q1wtbC%2FL)`+Mh^IEZX*-xi+&j-9c%u2cstcYSiY>hO< zCi%xn&vslixNXY&V3=Z(ycjD}a;ezRPP)!D?JF^$+Q!JXTT135q9dKbS7KH&7_aS6 z*E3qhL%$mnRF7eo8|HH_Yu|ob4O$cqst0n+nnJT)M!cHT0p1%Yx{ovt`)(HzN!zwM zJz+xHsvZk8)bYmtDCLVMA0^}%NYr^`gYMV$IjGP1=93J6X-P>F9dKq7wXaNy+EyPFEP=J=Rjk0( z&GPxG+zhFI>{*~e77E*cK@fT*$~n^Gc_y}O6%l=f6YftW8Bw+lk+%Dx$-&T&5|%E2vwhOi}lZ=tw2LSRxD9T z=-TzoyjoQ>LeCGEXp~g2F0Kb$WTzsM9^fBwaEwIK?9aq~mws-|8o6XW?=Wc8-*?b; zB>j6Vi*L{mU*2tE^1_Dkc}a5AxvQPwGbnu2jTl?OS39uEtyT~QVYmZS7hu`@Yvzk- zp-(_|$8r`spMdq@wnsB*-(!j6O`+(vsABulKb3{wi`0~QGBF#JFTDlp^HN~; z-z^oT_lC7-EU9KC`Z;OqcJ;|&1AW10UU36NTHkaIXyHm^cGaZ1!JezAg56DkDPI9R z4!tXBLgI%x6qhv1cj1kJ5eftDIef(QH{_?0P-`o}OE{{^#blUU%fTU_6Ofik3%A{1 zvjd{Z;b=R-O=rW6OZo0n6i^hLyI1iwOlPMS93$^Y(mG= zB7U7E-b)+hAIpd!O;TQvxZ;779mL%WpUoV18a?|;8V5dnt#Oo|=D-K+F)vNpj`a~b zX`Piiwc&J$bc4Mp=oT~GUrtXc*`oUY_uZ(aKXItCbiq-fe$dJ)Xk*8eI&KoV4H!-; zKD>Yb&G5|JYY_EQC8R21?(wnZo3KnUht*R;)D-*a_vf7+c*rG%tPxT$nZRXKO}fhkwZ z!^0D*3RdcixVSj?6Y~F$i-gOR+TWu%Kw$jGwdk~X#QlSZ!y(v{lWqSgpmhT()eKpqPOf0Nz~n;s``6XhSMc`3x4$BZypGgtp(9R zG8X7czI2Y&nSb-6rI$MVJI7}dalBp9zEvZP!|%Y+qd)v{b9Z?t9ngj+M$Lj^1QUP6ET{GvOeEb;FpbkIMn409Dd-RVVzk?`hU+MH%403vc7Bf?FCE*Q+hQ(&; zA~k$f3=AQAM&CkxHs|c@{4L&N->M0<{#3iO(-AZ?8q3)y9}Sl}0<5(>jbVQCKv=H_ z(#iXDrRrlwW>Z>^2`p*xk!F16xY-+IjshM?IMBSEDg!X~sIh8oU&3-sQD`Z8e;6+x z>uryDifU%`SZ(SXPk$r7cPr6bV{l(L033V|5?ucND>9#W3!4j2ny2PEoWGd~}_>vpsEA;i08HO?gpIw>z~O3ivwCD<{SSTcOKaePMR zd_{U6fT}MqOV0q1!*HHbz5e_0Vz#nGDgPv+RIO>wIr(Y$Qs?{@R$3fS~TcelcrT4Zgn%Mz(I> z9()&FO&r|Wf{za?mjUnDnkcv_S38t9%C5L-pK=`1=yEdVrZ6IDj%oh3 zba@eHTIZ~Ex_dDEK@|^Z%(+L>)@<{9@JQOq9oINs1irqjLb9`{T-_ z%>{W(3=}T5Q(_f?>6-*O$y5VqY803{_K4`j&+`3`ARnLU@XV$xz5P}0eB=*7&JhRj zd%S)}MOOGdC-EQGg}x=OS^WcNlq~<5pi7%M_qDY|ieT3qUh$W|FHP%UnY4rvFTlh6 z^|q#36E+IMEm_J5XE^I6#gzmwWNjp*i^@s`L_0y&vg?>VkYkKc%Ikj$;Vih0Ol;h9 zgUF!3jR?<`)Z0IP9DR(WV^D0iq9+vo+&MZ;h#~mP6PS(N12$JYSJ?IWI#|A_5u4qs zKHylw%l`iCGe$n)02~}9-Zv3-56JP8V3f%`w~5?CFI0PhzLV%;h>`&3?03aOO6Lg? z$sU>!G8iQMvEbiFUwJ5zu^)+t$N2cE)NxQrTowMQOgLANZqgnlKZ!Rcxv2SjGHoi8 zpdx=oa)55$^dXd}H`Uz#3@!=8d>?5_H?WeWwer}-!0FKNrk{B|X7)`p(h~BO77SeF zkqVC?svS5W;7{g%MHC7<`C*Yt-P$vWLq0hpBTDhm%T}pvKw9pBX~&pVfxkca=^yae z81M5lz;C$J=5NnO3u-N@47tJH1%W}yZ?qgt67q~aJp>F;%p-;)gruE&54Cb*SdTSL1QdidjHuHDk?pbQcI|PB;vF|*R3c}| ziz<3?KCgj`?XU~znwm5XDj=4J_!1NMmTa`eJmqrQ8thSwoqa2RfX+^MuQz;$+c>n! z@%ID{2Axzn^6@e#`oM>)N3u_lEPC8KgeH(A@%e(A8sG58sGld)M96>+=erih>^_6> zTknld(@VPTK~^An$~Gs)6h&Vx-nHEFj`EL*6?fHleR=~zYNh4jnvpA)4ZF}d5OM&S zj-wqW!XVV#m=b*LZ&>YhcXl0~R17X0aaC0zP{n?McaG1`?&9Kq($R)c|(9dcPIgayhuvEC+>v3>OE%eZ@1$65tRF{9Mmw79qnbSTM zbgs$vm7Ri6AZ4jVhABs!*&^JkFgw@6D2<7-a;xWkuZBNSm_rg_(!T@@G6BKmBF&Q% zjG(ck?CbEz{CD?zFwDvbwc1O~B+w8-qTr(yQvc?1-1 zycx>}8`m1EU%yAonJB>Sh;|3`-2{xvRwGfKUj%{R)Ns)yj4I0w2S;;wMd{T28R_On zIhPJc*$hqwJcHx0tW`A)j9d*&|FC$6dYF=;op#Q-?&knU^1<^fy9rt8x~vS>bQJtn z!Tcw`Cp_qgB;VIkIJZ&nV`V-_5<3|)kB0{GcGPoMqSU}}b@&$8QOUu3KP_GDQ+potGI8U4n-+3%~j_>J730-VO5(-@Bg_Iyd zRRL=U3CSroZfuC%{cf$a0wn-D&qclGLrESK!$nbm3m*Wa`nIpMFry6KWQKNH5Z zh=he-37q;!&MZO)!_ckONExP6@i=XZO-qKv{t$O#B#sEnHaVRi92_Jk2uSA46j1sn zF{)1YiIS+kfAo_wnk+z?xbg^h1llN6BrMp@Ad?Ib!X0ekSju~rWH{L=oxkDvR#k0w zC^Z07sN~dC@x;@PE-ntBp$l$yq!K6n1`t;gz{XgkuD*J&+9V6+mh2P^s9B5dr2GS$3f45xK=A=%634?-?)l3{*g8 z3d9%k8x*jTM;4xJ?I*B35!{9RnKq|15~@8hwC{^1Ixj)B0C^neg#7$y4y)$?Lr}&_ z6-M<3Zi)C$@+~y$9rVuG@XOub6r;%5FbyY`RYVB`Zk3*~Nk-^ZgeU z%4;eki}b1UP5n6DJ9hSaJ_O#CoL5Zi92Q9&NyPwNYGY97QbXf+NrUMKrqL+3sV9ce zltw&pc`&RA@r)8STHYW6zS>5}1MkZ$;w~^`nwmI$$k%uCE+fuE7K-=89ZJm0AO2^J z4Wxm#a^;dM&kJ{@@Vc|msVF!9vE0j_EEWl%pwvdgog^VuDa8E^2l=cY_OFIxzo_nV z+|vKlRfN6h?k@dvyq^np0NXsEh}EPeUA!0%=9De;YABBY77+~w-rNni`&*cd9#w^o zV>PKUu%I9p5hN;9bbw7rupmJV0PuvBy(vvuPx0NAkA9-zpOWQ^c`v3H9}ojhyjf6T zfv-md33d2!okVPrFdBvFE3gd|&kmp$yjMn+VgaM3iG!mX8Cg3~zGFdfQZU~qmn<|& zRE89W?5IY}@=YaIEn5r%Eua&B%`Lh ze)O|3QBhICNE{bYmEsv(_a2}l_p#hFJ z;W@uMKDvR@hy{|cZM=>LEQ1Hw!y=NyK)N=BQ)q>B-~`5ozlR!5L+b6* zsi5dqC4p1j?qitpW-x2u)eh&lN49B(r@qV%T?i!XY?zt<0`U>OAJ{gbM3jTmn0((j zZHFRmu2W56p$oH%F&t;65cVOt6Va{TdnYEpCkXeopn6DMU80l48*q?G_BvSD9J(pj zgXfOL32tIeGbREwyn$vkl0?i)ChHXM*N1Q0p-O@j9b}P*pcy=?blXQrF~7dmj^jdF z#`4?j4bVxl+Q?RrSap zdMW$(f(j4SrX9>OS*(FmIMh}_DzunFRvlsgTgjP!8k90&PG>~c)u|EsMw)SS|F{=~ z+AkWptd|0-bvdf~RyM~M6vSrYziQ4fgZF<-xaHNFKB+51QV8x2gP(L!Lc zlY27LZChcC-!Hx*pr|^<~*zyBrXdux7w_cptm~_VMtZ<8; zgW$*UU%!6oWjKwh3MXu~7dRQT^t$XJ^p$~1a&n#?u4m%oFAA<)c|JQSNp!p<=81=r z`u=x;Hf{hnNy;^@+|Z&wIjvrw^Z2QCOJR;9aSv}l4$Y~Ce%Qdxhf)x zMNPfG(v@27l}*|}2c+$&d}f&ATEHC=2M)Yn9zcPVsX1=vKXGc&mQ7|9=Gl5HQ! zr6Q&1m8(L?z9qLUD2y2EG@i+-{j!GwvJZCnSalgM-56F;AIb*=_?4WlaX+FV@^d8_ z+E;E^6)caN_zej5B^d7IoQE+_ky*mQG1PF#T}Dc(_n0DQ|0d2wNch5{&gcvM@#(qm z`u+&lcXcYBZ~!M2Dj1fiQLwTC5OZjEy718fK0?y^Id+C?$1e&TjZ$VthK58TU?e)@ zIBh34ugG(d2h^y4KVF}I-|_Ubh)P6f198;jv!JOJQt1YsUag5{fUEt z_@+%pB0IJROo)>0tQ$wY(K$Ikw5y$5R3H2<5TauPfO^cmHN0%IH9h+`eMcFu@e^! zMxIank;^QR{~px*oTY~!CFKFB{PsE8%Dx%jyt-e-^!%S;e_5mGg*L&G% zT5@tKZ6LXHBIr-+ptR%*1vp{gD9qfq9GX}7jVyui2?R4Slb_`kpgy5{A#oXyQW0Sl z_D!IE-WZFFI4{$uT~s&U8YPmjvTmJox`eL7y_r2JN7v_@oSxslGc}M^^A|`PGnn$W z<5ugxgpx#s)z_);M>^2z-A9CHzSqREPN_8@|6m#AS@+klQ7f9&h?gAyA z|1Pv(yZz%cnai&a z&_Ov@!(gEn{PKK|Nah@TgbNuel^}%J-Ng1F2R=V;yfs|iYVc4XKlkvRTu3p|S;_6QXK!Lx zhC~4*zf%Z(Nf!TWa5)bDAMBn=LCs0o*fl`8;RF|kS2KXyku7}hFcC5~%M)D&NoE4X zYq1}$^u5WbMr)pyhu_P8I6gB7HE`Nr8-xhG3;i36_0lx#YljU%Dibx$tB^{%c3q8E zQ`r&$;VtkPc{ruW?!QjiogfU_28olrfyY;4jeQN%ieF z-Q~sSz8z8u(u_kUc+&RsV^CfPZ?uS{miMDmLte1?*H0%ZNT7|O#{G#Yl@}Lr(>AZe_u~&nlR&n3h zdjyiZxXnMK=*BGiCSo-}lv0Ekud+55G6*bkRt(X+VJ+WgR7|dOD4+wdKPJ)56N{OD z^11i;2k7fC2;&5#kwA`4(sL635>lN3Kud~_JMrVwNsv|O}(^TV`%Iww%8uCeru}l%}AE zP>=p=J5gItqG)Ry?nG4*y(9SdWmMV(qClP3RN+zN5ViaEy}uh{bJxW2$t}^dP2h6w zSeE8)T4W-q;7Y^eevYz4S*L8FNm)LYAYrHX}r|Pb_`JN;{n8@Ut2^WS`09n&9cv` z034pR`wCrIGwzriIG`<7D({g|Pm3C9+LMx}cE8(LK}bKQe>{|kf!<Cpny&oZEJh_KN1P<1~B-t`E7&1(Pu$y7L#9cgZ%oNz+t%JZN|+qYdZMa#TC zvDrXbh6rvVtXKQ_%7MD@3(ZBisO{&@d}xp9sIv%S0&&G4tQ4eD8%&_vARKcHznH_H zD*O<^(LgI57T_8R<7W zdN?W}8NNtBZg~0m+diuStp#s8-=^HS2qa$Qb2LJBCCwY_9BH;QE+HYxvQ*CRAU{7p z1|=KkR>iVF(?^;=RKA3w4TKijFMyqR(Zt4s9QMew(oJ2bqo)_q^%=2*@GAj=mvW_D z47*T_%8WZjX8tP&-<1~w^#N$qNE9t3Q9yWez54H-PE5=^@_G9B_K;r#iv!nopap=# zfE}JJWFE+%&AdRbgzgNk9{i}k5q%@&pZ~lh%W%~@oR8uEw6_wt*<07^dAs9d;KFAzhrQ#!kHu>Y-{R5Unq#%rJN_npf*f45snt_g zH%2Xa?Q-3ep+b`(f0{3x9nD09)f-~N;;uGe%`=Fao zCkA&GW_PcO+gb1dX!^Le4|$6WyR49bF7ZG`7uG*}*v_MrNLqV}vl^ zxt1CPfPsEFtu250UNG_7DIZ8`z(`g!qH%DtbwL}^m?VV-v}>OSzb`Dwzr}8oF!-(H zV8cQzxUvoZhNpcS)0S}8nd-WoUKhb~Z)x`#Vqi2nZL`hXQ4s-Nh8Q(KGH1L>lnj+0 zIi3A_toG|O+&66=fVNQY4Ij&u5L86lgzGz*H5~Kvx1Jk$HZ1eoj6VklKUcD?TXfgj z-G&3p#bb$4X^p*rX6@^-DBRLl%1yazsUKM(^8r;He4ry&KY^lssl)uLzE0Bbpu3yh zSQI34#SiWb=PHMv%CXvdy)Tixdi_`r6}D7vRp%j>rR?upXN(OCb?LcPg@rmIKBs^1 z85HchwWlfVLQ>+Ac%i6y)541%j<~a)05rAUh|!RsU?rg^FHck1c#RHXL}^;5z-u5L z|Fn>;<1?%ANV|irBHg2mrTrDsbBf2n3*_Zx?CV;)jgPmOCwnBZ4jRsVfGk7KR9bV& zw%Y1N! z(W)fh?HE`_*b06O8qVV7mEHxyLOS<)h^sCElOT-R+5h-AHqrsvGm~oLMPE4U&qUgt zwP#30*!HHhcJJWjy=N!5E{JZdoA<{)CyhUXYokohmGFCHB@VQ|P{n>*m4CoWfmQ6F z={rMoc|g%xQ~!kD{ZedYmM{|d8N*@Uj;t*OohoiUUoWPj+$?zRS|Jz}Q?{>Q8KgQ( zeEAI6466eG4WJPxvLn>snCzQ_V|^do2uzPB(>gt(>}1=f3om;+p}atwN&eom#@Mv} z3AMk5jfjximRU5N z(Wv1(bo8jgL99PG1EC8#X(y=VDA`J*qoyXANHjW3o^F7yFoogUg*cBBHvkjGKyZ?k zGrCC(oce1bNI={`JLl^6eMmRZL^~zV6J&jk^XB64J6>FG6Iw1A`{_;17Ib~0l4tN~ z5c!Lr^Vl(^Wl%9nH~+E)d-yik!^=U5LYXr2w4v0Gkm3o zgYuC-z4{g`AC`bg_xHQAyo{vir&j<*QBoxLjEN@j)t4#p2o3CIUaj)iV*43o=~JUS6s8< z)!G{7Uar+v;UU&6e;&&Ml<~)nzrSXlCR8Uyp(iau@#~%r`<|p3mxwImliNt5P%Q{$ z(5ehO|7Jf1USlL*XHV5c#1rR3AZ+ui2q$a=;-IET45_*6GTjGaR;gYryQqCd_kYNr zijRORRRMl&6TeB90sC#_uv7w6Hd)!y1b@Jhh-o|}F!g{_(;6 z`)W4(_gAMGtEzR{EDdn?y}w0Kaay(BMqQ-wPg>{k9BO$=pZD1EbE9IqDVem2Xyf06 z&eNah;a^j2LO2}tC+zJ%JOrW@sn)?2Q<=H@Fs&}rDPNH_@=zom(>v`eKJZ@k{WSeM z4O&%`6M3Wd1IltT($d9{4>VyBXDwMXmboNh@Lj^0Gbg}27(ak@Vhh4qi+fcWF6-JW zmoM8&cTBk@|7>5{;seRv2eywRBj$ZlHtgQQE(j{TAsOqG`P8JEpJXCk7;{;vU*cnm^UDB6VuU@^zMQ$@3xI?isqy`KrT`McAzw`6+5Aegs zR?0|9T3NcMzBgSSMh@zKzlv8eiu!Ej!)UpQ|CrZx5lNDiP04d5Oxn72=KrYLkfq$A zX-)3e)qP~Fo1#RhkGd&3hTF_6HO%hhNa*gN1nqyjrOqv^^)2By|NCVwkACv)G!oXQ zJ6cnWUvX(=l-TDc;a&}FBEKB2viy_tz`kgu z+b&W4JRICF&O;SdEO^9kv%^EqQjm@wxhgm#List?6qt@hIIG9MO#lA7B}*?DQY#u^ zWNHpDoB%LtGd_EvmG8(+6IqjR=aDaIPi)Zr{o(Fv~gVkv|2TY}; zrSEKzl5#Tuae59_f>++3$0}7`jbK>E{?Q`rDYc z_8aKv1e~XRKjt_W`(C+hI8AC_2A<6fnztjpF1%)8Liqc z*s)Q{n-!~8S#xP5>de*Pu#CsDJo&`=faR)Hwx`J}rbHPt0I|B%Se4z%m3$iKQ2@HX zcm8q#fr3TPw5~jVv8d6Q(P7BwfVZ0=;|LbG^ml>GrQrLrof=rp_}r3wtC%jeJqc%t z3tSvlMv01&QZe)mn0c~h1aACPq|VMe#ot;FqL3RMYVMMjwxy*;q+bgm9& zYxvu!)oj|^+fS^id%rH$n2L4i9`f_48oMt@OUGKtKiK&dn5f%sn-_Hy1chgtv z@LDp)rTz{4o0V9fO39a|ts+9pr1o8{gq*3Aal7y=CVda}(7}`MvBmCQM4rwGG6_{W z2RrAL1E^XVeVT=tm zP9oxgB=cbmUT;(G--PFvuvon%SoNZ3p713OafI;bXOb_fWYZI~u_l$Zrt= zjy<;ua&qlSG0C($yDvpz!=Q56(oX;z-ozi&v^e@vdu4efg zoXw6HK&&OF@=4o*7XS+X8Z#{DtsIQcEOebkQFiZmSaP#kg z0y;1Ab^qQ&3g_5S@kG*Kl6|{l*mr5jaJsn?ikVq+jK*8Wj&UuU&A>sN>EPfHjnw+m z4}l@P$g0P`dlxQxc9+o)WJIc!_ta+6eAjnOb>hKBf1dt*6x7xv8gpXHk%yzx22UP8 zzQDbZMfVo&p*G%@ZLi3c{5cR9k_bczTOkY`;3JA>r>nwVahg>xnAD4%oSn@C*_Zv? z)4xdPYFYy5w5i?heq2VpOt$r+)SdJN(991*Lpw%p?uuRyFTJz!V!Gu$4NULFzF%K&AZnqI@3^hN3K>u{Fb~1q^<& zQ*A9?B6)f07^vxMD3jDT*Dm1?WEaW57@z5P+MLyiQ!)zqa-J01%~_T!IHP7kIHA0R zN0~YgAK&y>xY|@vzF~NK#3JL*Y2!Pa@PX@|yMFajI^TaeEoAxeiL+{fz704emhzv8 z>>8a;JRqA9f?y&96fWRaV$^8Dx*%8b*3~pmjE`3VcbGe`ceTj*=4=VHCehiRm$sgN zazrZM>XRQ9dd+j!`Bqm2IbUVr!`#)jiy?3lXVfB{Akwn<4MlO#4UFGi*na2Kjz|I>ypW;%e+owZ4Ad*gYDZNcsIozccI+B zrjvAio60f&KMQBG|14{kldY%~{W&-NMW9`+`>kU4cGJDvr(aBcQboakcKgp)gGQ7V ziiV%xv|eJ%RIVs>>!&**SDOa}fi2{q;ihL{(Q6uI z_vV0+(WX-)fnL(-;VpwT`PZ&_ETe36@StNTWdlzyf0@|Lt)tV+ejcyq^6IPnToZ0; zdoO~$41A>eZ<7Je5XO{X;T!}){afBamZhDe6Fez@wD?CKzH*AYaVBU-|1K?~1&e?V z4-d;d*4EYqckbL-C@!{n_2%JTM$s;*`pacyWube<%|&U-8+bYXq#O4Yz*c(BL68l} z>s=LJMJ~JbF-7{LcFA1fP!H+)Uky=jrTiBgVsqUEwKqO|wWM`s;HHd>OnH~zpN7eR z`CBH^Rj-D9|FAcsC|18W& zH?6lj(wvK~}BW=G71nd9T* zg~LK(bA_dKJ4c0ER$VeE2nFe2*!SW+!4ri)E-=GL&BDeeB(iLD^uy$@)R_n6Y_A`hKHkyoR}b0c4m-hz{t-!bi&q_`tx)mJ+e?e+v6ky`D?%8( zEPw6x%y!5xjW)F^Jju$Rd1JasKh?r)UTLXY$>?tpki|IYt#0`h8LpFdTTgkeI?N#^ zk;2GNg5jH~$?e7M(NWO0_ktaE^N_o{GhYVP(c-TESYOq7I1k(ttd*frFMOMtO|ZuF z{!Ua>6uVl-UUv_V3!jluvL2b4J3;w$@OSX-sOc-;w5e{y zS8LqW!y^b1KX}Vss)yar&E#>r%`v-}DaMgg$_ZPHi+DRfE9iAOn$P|7nHwzJ2M^rF$h(b@8fsr1IAbMQ!o| zPeAdX6Sk{@>QA8X^-PV6PinmX3Iu%R;N-6kR9m-;i{Cwb_%ICZreM^jtWDY}kMf!X zU*Go;#y0W+iXD)blaq69lTv9;&cM1Z1#!T~H}-!8wivV_OkOO)%frKpwk*0sZ(Zsf zD0!oUlhtzV-vguUggGgb0YQ2FEj2Dd7U;n zd<|q28Onlh-*a3o`!+slDrHAuY3Z1a?Csuqv54y?(jeh!*S!5!?r5>lHg+tO^}Xzn z`J-%ziOTuji0F0I^^Z(R4S4^GG?c82Fg|`ZS5jcBg2FDdYx^hHo0_ifRDjjL@Iu@8 z%=p@NU(K3A=wI+|SLk;wTyyIS!vho7>k1+j@-n&(va)jbyNE_OUhC*=Eq}bQ_WY9_ zU#Dg%@4LQy`I3F^>P2m-VL^v0teRnEqg#uLRn1JhZ`>*CX|3RV_-Z=x5WfSapHH0e zKf7~R?Sd~TaV}Ep7{yj&&~?0;<-_lko!WE^saIosx)W+#T?(Nu{Qh{;TSKs&C#~cb zQ(U6yIrWUa8t+=CeuBtn(4}zrpng}`Glj7r>z+&8EKHOIN4}LfapttwB=d?59mOAR z*1vhlPSB;OxVXI{NFO&$rnmC^F-hJ##$A<*{jAkD3NPD|J+gQ~UXHhy+J`;yTV0Ecrm1i#)tA97FNv4WN2tyaqwS9R^ zUh*Xi@rwrPIc|L$&Ry+}r00aXol`oqDFc3(cgp_in|7-d7dxAp*552H{=zUd?FZ!) zhiNEEFJl_ZgxbN0+d{2^r`*onRM0>0e`vZ6a4OsXe?&-WHlvRASjl#*4(u~%80 ztjMltkT-$EMJWzr6;smMsG#{&8iWE@u8Fy0W#%A{25jz@?V1k2q zZBwzC#O{+FvIr(v)Dr5jOZj#%@sEQ6*PYhkCUqA6Su+`)d%Wz-&RaBoe-79gS$sp3 z%4YAn>Z-6_LyN9$>*h8d?Be2Liiw*C-|f_Cc&)HM9Sm1$Y5nRm)AF^ zuM-<$B{iRzMOkl5ZriMpj#3%aK1wFS8|%$S_U`1y&hFe6>Q^-eHH za7p~)D);3mGP&)hM#kPQ#}(H(#*d=Zi`QR$wld(#zMFLtDELOZ)i0NNT~j}54<)VZaiB&9G+QuPv5!woctm+i?W~1D{4qBvbfHv zD2qQdvUsA{jQ#qq{#=n33rzzP(eUY5p_51i$Hh}qYv&D#xt_4lS@-No(Cfs_^Dekn zicPDm`?Dyt{40+7UnSMtwMUi6WF-*mtg+cX7FYntb53XMbQ)>)e4xPaBt$Z*Tm4u4)=e-J0zHDF=R*TkdK zFf?^vIciBIwQW%;Dz3oshh%znc>u=~6ZZAN`)MgFQrB;gC+k=s?O{00UQe?BX`IKg z%rJXWIPNgxABR%$vZ$CU>GuGW_#t%@s+TsiYiD1rP@9K{ik@D0a6UjjO{gf74XEvc3^!ogSAKZ!Y*x@yr zY$A&pNQ?VvZyX~Fw5f&zYkH`^&z6NyQfh=wl6EDusHBWdd=dCDBJ`e;JGU zoKi{KnXaE5hPKFsL-psAxtnL?LuH2oUVMmg3W>@3n4YYAQ`%>pjNV08N5^3;npuEK zTF|Zp?G1|TLzi3@a?D-M>zEZ9P~9v~+ie&dxL%WUo4vm0Y`_t6=Lu9C6qLitG#*@_ zZEO6mK)AY<>R7=n7~v`-Ix2d$HAu>l+XWV9xCD&52_#abxU-2KHJcv(ZK^2O#CLJ@p4pd z?s|=k(?$dDxRK@Ov_;S%zHm%HD6Tm;CCl8@;wI;2ZK2Jp%}%A0TQrVG!M8a(zj#`H z$8t3#MJKNL>sN%}Qcu47V1RmZBYUXEdJ*bH+{;dQ&PLK~MB|WMr1f#pEAP*zD#v%6 zfavOj(;X9wdg2g>?+EJb>}0W+>{^K|W^-An%KT+xUJ?{<=r?-6mqjA9T$6Dfb#_NZ z-$&`V=126=vO#Z^B~;YBcLZ*DyL7sZqcUzm`7>x;;httoFPp$+`H+{DX3YP>?r@!~1VlBHy>|3gHT>mc0G23M4fpMH*%M?vOvMf{thj4q|M_ zR*zl%4Y!2jnkRYeQ_DNw*zI2}Do|%Nf5S85H`e7=%~gbWKuW2I`Z8Gef8Yzj6NE;>6>KDH;-$Cmcyyj1K7Ujh8hwp;1W$YyBlYV`1TI(07u~ctS zwPt#}#3UBu6Eh{tS23&N>37`~-B+^RV>?DZ^KUN5!VdoB%tcbnG9*x&6Aa<5BrXP;ai;mX@{ zDkZBK!XCjpT7RwSWewEsbEgoHZq_}w7cf+$Y}S~HV915UvpEb85cHBM5^F3r$1M2u zUWZE=3%a9dKL5|xE+r)-q#+YoeOk5sj()ZvYh8MYgl!|wjZ6{rJAVat+%6P^>`ILP7AF2TZ7lmfTo5Q$w} zs7DGB@dI`xp4F&M8_=0Vf!)yQ~z+PWLS*$+>e8S_H%cp~;xX+W!`yI8xk z>8ZRS+wE^Uihi=Bm%%J70RVkv?i$O^KL}Q0q0&dkM5(J1$Algi6-}l>?~t1tRQ(|| zXpdU^7M+vJ`Nj&MTs$F%ZE}!9jv1-|uX-618QL1P_B{#O1^YrIqz`4E+wv)0LV$VZ za7xyd=*zV=wFh#ff2E({QM{GuFGHPGBa>~nA2|P>nCQsM7V7R4`Mi}!H5%e=mlR)r z91POa6Uhew7NDFAj-Xc8=j7#GT5W><_7{8^6gnAkI{q#m2BpljZ#_FVjH_uhO(mXk zNkv(jHtHSt7P;`Vsj4UHW&B$mNdRv2MANiH(};@X)+@VT++VkL7@;qF;IGD^(KMGu zVct-GHB)4n@!HFiT|Pm@eElCoVxFNF_0-OZlU3-G*FyzvjZ$(4E7KeFb-@J%1y|H~ z*t=d$Czt1+`>f=?e>m-{`u_1Y^WpU^KZ%8Z5lt*I9!#+sw5Tdn zR6U7YoO+pEtzM?I9_Lqf7r5 zpgphqQ&LiDVV(^HFsrVUir@A*;SlErOCdY%Jni`TUE4aJs}7b#qf`D z`;>1It-FJ9%wAUFWc`b&=(gm}?Rfj@c{S#N&o{HVr75biYSb-G$gmH^Bj9!dSLvZh z_&^F1mxPe?1wNMa5f3(|HTKx=S$1A{$*{WSf%%z6n-Ym%^flLBifE4p;K69{G)v|d z7Jd@_(639^t@=1IhATS<#6;LUvAtZFGqZlM5<2Wp-_eup3t<-yDN~WOx6H`>0XpUP zVUDmHLrPGKyciAe4;qN zu`@^aT~)=%cH{Hb9}58HI7G_&nhM9MizR3f-=&y!`*2;3=H=z}(P;X}KiALpzPo$% ze9AZA12={O(uV?UL}pV%IO}F=Ue2gt#HJFhr@q?4{{{cvxMog`e>N_x6x2pQW{^xpeW{)dadzSzr2prJ6goJ~o&9|7K5%1@Jc}#n>1N+UrzVUB(=k~ZJsdh4d zM3IBYr5Rvr5HHo0J8EX#4Ro>H>zS4KjaQ!)A=pcy@${V{ljCH6BMcZ6&j?zb=iOsh z-pfQXyF}~8k?(SryqDJ#3GdM33>oHYeEtmC%m_lUokfP{{Fa_exQ338k8>G-#@t(+Eg z5G57)4Af~4jWrDfKPsOtwu*gZFZu9pU+h6h@si+~MiyEvPWW~}Wr|p=L9~_BwZ_z1^chzRlxoanII}m{9^f z)0aKRO(xHsoxl1tv#@YtgC3n*|Nf!p@3$3n{!$azueXJ-@f8GOKjxRh0N@WgIy%-f zuxEp^Yt)-wxQwPcIxlzeBHW+p(G6#zOBX=;P`=!%UN-$c;c@!$eiUZTi;|?;EJ`%; zRsu3bGD}LPqX6e5L7-^C} zv6|LskmSAwUs#{{?z?H|q$Q9^N3nzyNF`pFaIK}SQeHF~o0uFL^?KG7pq6gxXr71% z5h9ZhfBZ?~j+8xnW#GE4n?5I#49#EDAUwPBI#uFZjKC8Gk{L`lVq#+YQsUy(pXA$~ zV{;z>HYE`?blTip`4Qe`zfQN$mW6e1#pv>r zTbLNY)7>1HTt!K!FPCgpD8i=O`V%Ddd90KHUzIch$Nqtvy5{Y;uRuM|64Sz@g4*U= zH6vcnE<*-cC@n3$dP!5WLAR(|6$y%dN@09nO-CViw>p#J6t~&%uJl%}tu!8hv0HFv zoDK{+afDU$XZ+31_g5X$(;$Q;9ZyeW|3>%@GX><|_$nU7YEc8a(;%L^N=~ znOm3V!zEf}NznjPx=TL%1nyB=Ft*rt^GwZ#&$ls1<|L^fkktWN59im$If0AM`X76% zETgMrCsABoYifWY9*S$u2OFY#^#)E!m_XV&na)T~^X6|utv7}bDjPg=KzdO>!sqv2 z-=!8_6RWhFJ3XOcTLV6+3KJ*kLd+*N8&GC9$uU^D! zXZ(!pI}Xy5iZeX-IW@AjcF#orlbgE%j zRMu#Z4(n%MyjGqXyk9AbQSg`|`@_jMhPpAf%KojR-sy?j2Q(WP^VMkznM5G(jvceRU7WW-Hari8;Gwd)Y`ozescC%{O?E_^a2 z8xub}b=KHCae(moCn}L}qG}1pdEg`Z=Csdy7f$!>xIxT|4YNhqurD;?m%g{Lt-g99 zJa!+j)Y0&P0_)-Dh`%yUmS`Pdy?)xjl~laD+f_H4zBDOj>fBEg|s91E*0S+WKNK zF1Fi}lJ=!;B2+82oqmWW)V<`t&UGVI=cgngZF*Po;zLi*&o2ZPwJYR(Le*nWzA#u((`r}MPJ;fI>vE3{!*G?o!a%psci@I=WW*A_84hrvhs=l7A0k$_js?*UVB%w zocxEB^15n_cL?WWLq2cU0HGQ!Z;tyCF{4``gi)vwSmD4yOLTD zmhVrx7jY&sr%PDt9r7oPONA?N>AweCopV#Q8}w zHurQbAqDe8%be5ZuN1&fvuL;W_Q;3j=BfyO{drElY7*K$=cE=li!e%xR9OAHG}*2k zaGs^ydE-mZ^r#lJb;d-7H2yf97N z>X(ub&fQgOMhTHV85@Y&Wi+yw7aL{q zK{k&R*{2H=u}=k4{v!KR3ASj%kz4}=B+dP! zq@8)d{i&s8+9;;l>m=_iEaZf(*y9-sK(gV~E3>CGCtw4OBTblN(>ujzKRq$H%y49_;G+%`TppFg>WQjW1EA2W;M?wTdfm$u!BiHu;!`>i9?bUa zqux70ILqQspK*?B9R@fpsM8^(DI9k#p|{F-HY`l`rmI3k$3LvqY+01uU|9{gxK1SW z>@d+b1JaM;MdE5SgGAJ^-KTWZ)dK7(0eF>(;IkGlVz(B5cdo2Za>%x#qHbyJRXGi< zqNm3GXg%2ge}#=K=wkpv^vC3$o_J9CKBVJt`Y&r5ge3GHa8LQB7!q@z;h5Xl!`p39 z^*lob?~4v9MU6?edOZUQ^+?~Ql_%9H<=fY%e2i|czQ|kDR!N(HFa7AnTbe=Q@g0YK zMmvU=iP+m)Xedn@R@}?$bVSFQLEiiLSbjUk!L-JYv8QirE^4Rj*<&t=_gr09IE_)T zb831f(nr-SIhl?zmgz7w}A07G1d6y8k6UOkY{R8&RfQ z!(^mifNnCVmvJ{D&)w?qBA!79Wr`73Lo$LmCym8Ifg=ZiA~T{6+bIM z5Rr7YpE&`M$KvVx?b!`yi?a{t_2uLV7DUivqdQ~{@UR~`F6u_-Nk)MY# zmbKW;hqv`k)bmugj?Jw!x2XA-7yRt)`I&;KW>0J3xM%Wrw1l49c=)MvPKZlFxy4BO z4)KB1*+_nKv7SxGBY6f5$a5fCe~TxSAIp=h0SxhcYgqTYL_u?G?D&{=7LEmiXdZv! zpb)GjLd8}geh@+sK8|)=6~%-^(NIH+Pc|oaApFq@F!`O1_KGkVDifMZ`fav+_!;H& z=6w5a#u)cjPBs2EK+XRmwd~K+Mv)GSk`EGNz{$N~BTY8^@cZqXNz=S^Tfo?aEYwRS z?YLNiiWfAxzF(PnQ+ESpNZz`2YZ1ur_vcf%MG{s`M5vANNlC$#6na)82(%Z*pZNM7 z{(5SfRlZRbdt)P%3Yu!dv z<|xo_phR_%kfigG$>d9-;d1gxt!dP;!1>=T95hcWE6$Jv5_d3S%A%!gYAV|nU;jom z$KL2!!E@8I1`k*kR=57;*MK0#_8A=?>-(G7LRZKZ5B7>she5}sSV~GO(W$zfJ9l>nTj+#@Rz@Gpn>8r2gWk#*`m*XmUI z)`uUpcxvk~Gicva+O6DMSec|YF%8O|jBR03KO$&keW_C#f)aVX?^P>jK$)CIZJt~9 zv+$S<4p;!+B7Jh_j}AF1Zk}%1cf7?9cn2-G<>i$5}7rtv`A67+ZK1j^H0am|-mKJx&S)oxvL zM1<>yTgtbv>${AJgpPxlw{995B70L;_y!Rkf+1z%XlR&eJ=lm=%q+MUeyb)ARaUH3 z|4fW*ME=uLm!+*-S(CM^I|ncDjCwEXpoaVl&#*n!(QhqLO@YAPMCyUL*}&W!Iw_rq za@blPWMnW9b6t7tfe({2PM>q7JX>Qj8@q9>`s1IlJLADW6pp5Ew?~OUqyuo?J`Q9% z3FbB<%x-a3uo}Rzg1Virq#N28? z6%b!V+&&*~_(mp@<(NS{5;|;uRty9o1R;x3Cll$b%wtbPgdzV20Xj@5!+4K8DRWvr8nep>D_HhXD+@q%-zZ+|KdcJysHCB^|AB|Co~hejEypw}|)S z^X)lvWJU3Tf%d#~fh7a2=Sr*)nfnuJuim)@SsG#E`koPn2pt5u?&ObXaF;IFHk~-4 z7g_8l8Sy8F>V+kvbUjmq^j2!Zt?y{wRvV3fSguyg&M3Sr5McwUlt4*6EEE!RG$5Tt z@M~>uZVJ^4m@YTdpczs$4$k+NHg`TaC@PXyRcMc~)R<5P47CLq>Y{e5Mc2pmTQy(7 z{(c)e1G;=)Kl#C3jb&_o5S$8#gaaI2H6)YEO)2K2ec_q@TIS~4!EbeCjN=CV-RE%_ z$SYmGC?j4)r**s(U40j*n4`c8a{bJ_%gi#^;C<;kfbx7#My(abiwkXEaVZ~oo5 zbWWY~w2h68*m*x)I;JBb6axr~hCw`|PAhX zjKs@5t?N@?s(3w-hPm&$;TP$IO&Y%EmwD{<=JtfR%8Ks_F~;X~GS*jnnS}5#h@a9& zDxSnlu8H3Q^I)AmMIe1-J@+rkPm*8n-@iYk^iO7`(GSye@B;|d%cxPkz9vlTC5nf% zj{8>hesQq3pXr12bPV{w{ai}#dqZ=bG7Ico#S}%hjD{5JVQ|_>D`|2x-|c=vboq+M zt%b(5)|;xY^oB@Gw-n!PbL#V`xPSY0n}<``)bgh{taF0+8r=+%@c-)F zzDw{s{oV9rs|^6Z|Nf*ZWTU#7hjL{M6(}IusH{#lk6oOVdwAHRtjf+Aq)K%o1hqpE zzzEwV^ERA0#2=@5bIqT&feMP(yH+r_#DVnv0GNv-8{1u^_1{#hxD@(rjuNl3?0wMh`z zulVL$$MkX@?6oLBPP{|pfmBBd%LgbL_4~}Xp`soTyuNGK=39h4{?GS^(THH{;EpCT zk`RdL(#=(Y;!i=LRtGZ%#CYrr6cQ)cw4I;?vDrCgcK}z@KjwXNl^#dQ+sVzuHa&aWVs)tHg5m>?E5GBCxB07=o5pSjC2? zI!MeRC$eUdrgt;}F6_@2z79=~cqtRpy@~Jdy!2C+$hsv$hKQU<@Q42m0Y@?}^zfsO zsDsfi3TPoEGqO1Cg>eOXR^>)dO9$EWj6#SDYc0vUN9W9bFz=^%M~yf<(*8!JE9lFe}mLaYw4I@Kks0%2pyA(LcSBh_)N74wuAIgob_hGLXVEKgS&9c!iX(NYI7baemw& zlAB$7o-hE!q#>FGXHj!!Zy35bDeI~SRaHCixs#||h{}@3%)QXH>$yKCTDrf28a6s? zXCNzLk{JaZvKRUKh&%PKuQ7Rf3Ps`$0aR{AVtt!*>90Xy-zL=&d+3}NfWtkIuGacb zeNiCmLTTd|67vc2>hnHSyve8kV#p(cEB`I3U11|B&Am68LO$gg$i|2?VN6^PK{Ne% zH2Xdc;g<}gcjvf>SgA~ry{0bUJ3xZ`b8I&bgL=(v)**0m59MU1*SS@Eym@rvK`wEV z{Fh)!ue%gI=f-cHH+=iwRdprVA*a_CG3LBSeExSWpKe1ii`L`Z9p!XObPr1SO%mxR z!auN1UlDgCiW`5mD16~B;o)p(0|y_)>8~LXqtsE4@VlSv^x;RJTq0qQM3_b-%HDn$ zrIOp+`J?L)-{#*d@)+6k$DhgpCYe-Rt z7SADr^WU?@ZI|s(&}7q*W9^*g!%ccnTnv?8emxg)XJcHcx61z~kP_jZQdQq~6ImJH zqKP!h@iO{_=DkVK{3O`a{kN2ys=wde^oB;uI=V}!cHW5KS5j7N!zn3x?(A5uP$f2$ zxSdqbu|W_b5u(YyL!NbuuIIh2`3z4P|{`tN;J zbH;bHAR)vS5sbCQUGK1EQ{&TlSef)6#y?%;!xj~l5mQo8QnH!!3&ZO7q_$zQUq>b) z6fm+Ii-DO0um{lu9Jg)~IkT8LYlmHwNUQoh7wGv;a~ol9C(@2(5g%%W1au;(V!Xu; zJ>AUGhzQ2eY_|WoXsCXIettMX_Gt{~bj$CMtLHYLDxLyR^A0S)WvU#3kks?kVQ5_;tTdVB7TQR*(E*cwz>3ba^6qtdf0VaDH1roL9kp62xkl> zN?oKc3Zb1cFf|QBB9uMicZf_$RoA0w#LlSKcQz#pTfr-y)`S*cCOtYw4MN!t!Nem* zw3?{0w8A+%zP<4diGh>?%$=c}iMPqJM%hG|(l6i`IfGw;*wZAC z*dTnj{D*@mUXx`uczuZ(0TC?daO;u%XJBg^jXiq^?F9`sc26vIdrYM#GKYaYU09!c zK)ezADKXYHL_?4mJ4*zn!w5!1L_t-Io)2&)hmlG^dLw)Z#Xy@cFO665fB90Z3VsLT z)Uao*#OWU>LpzpDM}gV6kX8N?Vs6|lms}-=RL&nME&h-OsW_2Zg8|IH23A+LVc&tE ztKQr>Efi5MLrB>^fmmVUI>WVqb`ZS^hmpv7WYyLnl9D(&GblU0wcn2p{yQY#Kh>~} zSW-mHDRI0%37k6*sW^vGV)#CGWPu=NkQ^p-lHa7!nqPwz>;TpXtKc8Z&n*sG4m4Aq z#3fs?`=wSZ%pLLkU(fz*l*+H<^)y%+K14C(cd|(fe)WhfZXoprj$gd=gFvy?pt8Vj zuLA4u4G1Q#5ekt_5e*k`C5F)0(;}o_u%6wU)3Y5L0+GuOSb@m8XBF&0=K2L}xI_Q! zi6Rn(NhBf`o`?#B6hU}z*&dh%{tM(HKJ>Z&{?;m8`!il;LJT1mt#Wwf4(9)5qysS- zr15(ED_PNh9Z^5+`WtbJvuKh#S2qY8`n#JtX zy?o0G4rq)4tz^?GwrXx7V!^zvPk_HCDk`D~`R}I1~dC3^s{KFq6h;j;(F8VhUdE5ER9 zE*fbs;VUmU&>XbB0d<(@5l-b571=`VuzCp9aJb<@mtAC=SM|pT9{UQYTx0S1R;_QJ zDFTP1nMFxA5o5WEBC;hnH@%2rvHC6kESVg=AymU2f^Tki=4`0Dt0C%~d1dS7tFpEs zQ$F8BkO7UPs@p;u=XC&;aC$=l$}nk{}LS)q`cX z+f1-S)Hq`!IEXu{Fl}OF@sc{Z^Xsp{`oq9alhB3y^bW0%gutmPQzYV}`}`L;z8fG! z+#WTQ*wxkbB9CH`Dq@d!JMiq{$U{&Q0oQkVizaw%h#KmEU?(JIApd>E+Gkc#BrSJI zvJ3PD9I-;9j&O|L9jY8+yAP%=H}?>5H5Qwqio(pyv*++56WFEVV2y!l>Aic<-qf^p z?K66}gb{ZVNA4cH@Bp^E{mJDS4`w&JaTIF=H4J&8NcNum#D7PNDT{Jl7N?so{TS>} zpsm&>wT7a=07mbT@v=e@A_*4MZ7Nn5+YVSBB+|52=T}z*pvws>8+>z&lL_@Kk-$@l z6++b7f?RAwMwA}!ruFTku{u((GBqQJct)aj5B@Xz7ByWiuHj`xZ3@0B(7ySJN!rup zuo^<(fY;B8x3L!M<43u4Q7LMPHZ=7-IuS1tEx=YJ*H z@3PCM{Tk9+fntTkNJD1|V+MZ~B?=U8jN`&p1iw#)G7v-}VF+o$mT(fR?gS9+VZY|D zEDnfDCoFMNk9g^+LUoL%m-tIG}-I_2-yD|yDqRFbd&a|a@W8KNZEJj(SM+; z)|ap<<-m6n;93(z{EWQjkTN^YQUH3R(3t>!5nR#sj0nYpGZv_rAfN>0D|KoSQ{n zPqqI1$feQ`KQW0pkm^X~J%By)*=&je{|Uj2V@HoNrU(8ICBpj=1}F#*5Q&%*L8}Rv zK~i~Lmi^S11|T>e6E@R$kZK;K^o14Ut%=Y+fRQA3xTmKHw|fdkM2(vq_RFtH*1E0I4SdXSNX4+5T< zZpeJVTqJD+>XA)YJH^uU1sqboi5|K?X&*IoC?h`6a{ex$j=XC}>@djqK4=P~=*In6 z)hpTFqYXd)vP`ShmOz0<8}>4&=v!6?Emd*)reSX>B6ueu3ERh{UfDQ!p?_@3-zLAX zFbK(bX7e>MBMYY6?bqYIAc=W~2Rg2Y@e@TNE#VkUl#O+ji%nM~o37k8>~%#~^k8PC zRNs2RN3}vHwWx-vF!n__0y?No$x>dw;5d5)FMgv)VxPAJKF-;PZib*E&qy(%=G|uP zy-Da~9U@?EAwla5Se^fR(NpP>KYpAidLrUHA$>;Zy^G-&)$1Cnce574PM@t{K?z=p zRt@%0)c^l9oP7%kps-#a!n-(`GU`8#Cw>n2gzu}h-{6$fpqK4u6}$qg#m2554b~)9 zYJBRUD}k@rj-yI#2Lku`i;IEwrJUTrs@z;>L+y=XiCd3~9()9)pe_ziUgXMiR~w5` zmmz^O$7E|h%4F~tjo*G!$3xq8j}xF5LB9eb~_16 z6N4OrO~`YvJ0?ja)TzI4OC|{(mJ$FT;rFe}MY44y6wJe?Xygx{beSYSSzRKV8{s&tXj0cLYFEzWgtOM0I_rj}>VA3zAkJKVKz{CIf zr*52oCPqf3PyFv?#0NrE$E_1Pi%^xIk3&;6eoca5m$}(Of2-R}{V1gL=3&3wpG{xD z@w_?#IC13Kkq4A5gv;;ulCb>>XaL;s3Zj*5XBIB6A{?<5 zWcB1VY7@jZ8((&#zS9G?0BMYE*ZcQsmNn~o2QSp5Yg0|2{V~WCk-~2ko!EUxXZ^Gx zsI})Td>39W;z8v|X#ZYIw@#11!SLKp#{c2Kq%AD&Hv2*@pN0}njA{%G#1GioyEkcY z+&;E@S4ck`vIwnFU1wtXICn8uqV@i^inY|)_Ryu2tN>fFgheS%R^$D&Pssl+0^D~8 zx!|185XjMbRG~d_3ag(guOIYJ8(G*WN|oLw%z&_#1X1cn2(j*CU#!LGL?j1XxqwkM z!5X6Drn6i9ED7VfaQjmZN?+U1R6pD2>xSxBW*(0$Pgrh&X%1Dk>iaFjUdm9O!#&E* zbmP@p(0)3xOmz8eIk}7L?SEQ8&IUW^aS^V-=NTD-drx-!)DnulBa}0bz;X^ElP6Y| zh8hSGTR5}!f?n6cr*S@Nh|k2?{O{Yl60O)Li#BWM!^kakweLUgL7E=jwO8hUnzGFr zP3uq|0PhkuzoCBWt7@(k#=o9hmJwj)w0UuPp#@KVvr{ykrM2zqkdh1y?mp=aOlvA0 z=LXt}a9N;3nKvYt!&_Q`eKL<^d>7d<+@m+cGhk>+N&oP&H|E0f9=*x_3OUvhj2ucNbgcp$ z2WL;uP7VlcJp5P29aF8cnl|t=KvE^NnP^;J{GHa3u&Lo`KfL-^AsWEZGf_6$gsw^& z4P!iS;a=R$#WonZ|IHC_U*NJ1{rz~6s2_!2NzBEuiH0O}w^ z?LhEe``4^t^&7E6y;jiM5>y+!>uMNVw?pJX3lo#B!?0iM*s((x+K+`22?5uXZ!elG z`_f_gSKSB4(Lp{ATdv#3v&F(YFsafRliDZYT`@)m?hMRST(^!*pa~y=xr;)|Y&!9& z(htaxk~9Rj0*D@17gn#x@W7?JMxg0lU)6Ls?A|UDoV$6Ls0Cm1*tkB`B2k$7#og}G1dm2N>M6(np1qfUV$B0A| z<;dbxbPqf)Swdne9Z%XqxBXVWO+b{2Bjr?LQqui6Eg>7cifz!t=Y(g@GXG+ymTg{e zexJbkCC*X#-mJf>HRYi=5SXYs4G%!7m2;QGw&;A=;2hA$X@I0!%67U^94Iqvy9JIohs}G=H!XVZDi|q|4 z_KA}TFym(ce4!Gn_m@@x-`_+A-44Z1{(IniWC*hlz?+C&{0zkCCGa$2 zl+X}C6~qW0eS$^H@!`P-K9f~{ChF|Jb}~vB(p_g0y^l@P+d6FckcknxsclDswMSR3 z@3Ml}4_DX+JOx^lLh+wQC^2Ng;OobCJYTEMV;6e0+JM}7$(a0HWoNX&*_3Zf@g4S7 zQr#!fuZ}@`vx|%E`J>z)Y46T?Cu3XyeAL-ZB~}?C;rE&y3`1f@$mC@J6`fB`i_Ef4 zUs*oW_4UsT{%!$(p9E4Kh!GfjsAWmJSc6g7BO%~85T{Q0@jw!}>&N#8r$ye^FBWch z;aj>T>-z`L(Bhh=CD{Xv_7ct?6>t0%_F~>8*(%pDI?Ic@R|SaZ(GB(f?JC2OxH$i! z5o(i(bOa+8S=@-GYc3nrp}|K5vL zg|;%d3@<`rrcgfFdapwI$~M2+lsmbuYhet5g0<+|mgV($LDZfj&07?zTULhmlu7d| zwv?lc0?zw__tvpD(Z_Z>|ELNgQD+y?W}k>LWp;4+Y(?WqWwukXceQ{ugy+_=^LlhE zlb?OaS>#ws<#Hw!&kkp$Kb3zD7h}!bCPtZ!FTF{0_!Z*))eeEa7nn{Hc1}>-CTa2h z(K;N)>*0qVfDy7?zO8*j{oOY_OWrI-fnH7BKDXyqmqna&;2dr zPUS$Vmpuxi$}i#KPseawkB5m0Malvr@K(8v`FStl1(0WJ{32Ys5B_O{BsSY5e96i}n31pRr)HppldN{CcVUjUd*$uvtT#bq$nQDjH4xByj>VhxVvtd`Ga6_UgI^ z6(Zqwk#lQ*U6f1y+b}k#0@&t$Ztg|KYe(X2^C>AssafmH6FtyFY=LM%V*1j-Pov&m z%?@(ftP7Tde6*f{{C~vZLs;5+sKUe!nIcq&_ir$qg%PuHc$|02O7NJJ(I?Q}v zr0JA|X>|_rbfb3%7x@)s5@bFYW*tJtI*{#Fc{lTT9zowEv5sFo956 zb$UW1P%3Fpq$~pZ6;jjAKUZ><1f5QP`@EVh?jZt)Ykkrw!@j=en z=Whe1lhN)KN|*BB>qyNuSSUAjRJw>shR= zT_h%QVY(=7%PF;M*aiq%7uzf`WvH;~hZr%26tnekXOG4NzVa%s{GJ&h=Sv0_JDm65 zW4;Q;3Y`JTiUJY|es|>@+0rjhpOmmDW4*yVJYP=CBO}68i^N*_ao_6H7nlnW%F1NP6AOF#Gg%qhict6$bL4A5>1Q5UY*f&m zy6jneSuXx;+;ex#cy<(w8hYBv9WcO$9F9$wTj#`1wKD+%^a6?> z0#=m&$@KS?;eoY%t`Zq$`H-oc)}B0iC_c)-?5qgcKVqf!!w6^~v_Bn0N25)NkyS_@ z3Ha*utY}01pEa6Y{f2q&gZs5})_iuc?ydz?^*JDjfjWCudvsHLhtAm8ShkUN^a+E5 z+FQTX-8`tFrA&Pfz$av6fj6J}NSJLTA*gmu!~Ja^$8zApf-x3m=NB-wEAg;%pxmDK zu(63Eh^?aFWfwZ_;cwdX^Twd1@osNI`KC1c z_UII7o+EU5L?1HL{*Aq_Q~l8$zIq8qPd)^L$#Cl|Bo(?5L8rsHt zxw!%fiKV+5?DyMCoYf5YHKjJdbu*OHPzuwk5jrBF&$`el!;abW-@H{6?)P@?CThN0jmcLgG5+|l5Eq-Cbi(+q>%(yaKUi%g5B+P%q5L)G;zs;u z2qS;Lb$s~F@rs8xO;^|>yy0wtubNaSXC{P^7hI;l0Iz1oL)u{s!z@@ZGKWtZ-0Wa7^HsoJA5PEws;1k+%i=V%gqwK>oA5?BICcC}$SJ&;>fyZE)Zl(UlR#-9R?AUMn6o?bPkE5v&!4N|QcgXgLjohKbQTb>qH6;1TMf zQo07nolp?*>~~@(q@*1uEiYl-D*7ciH`(oPDdI$%ijMFm{^2a}mFf z?l>VjF2PzS0(J`(&DN{ZI<>aY9^ZtBFBcUC8B4YkwVgsj;s+ZZ`*p3(zrTVFLIwgf zrr&sTjM>l#K8laZj9)~sC)TBh_UKEErZR;G9p`H|z`Gmq*Cu6sfnUb5ZIyKh<~sAb zEnfjF=m*0RtDwX2|0#$#;7Q|Ax?p!PNM7|A3X{|<3gA{Z-{uDg0G^n_b=oiA_QTK| z>Zmdo_&Sq8WxY7ITUH!lj5U~Qlz{^)#-1)a6{E{??K2(_0kv+o4@OaS zJG6bPCWF0eAdsMo*eN27#SRFf8L|9%{UuMeGJXr5n0n3o&)u#lAjF4j`ta|Ks0lZr zB{`?Wm!7O8ZU{z$;ex_X&HMBg-G z&uLvJSWo(l+j6B-zHL1;lF~^+qxVBEMxezPhu_Z;HAj+o_;k?V42mr2-FKP{kg^eu zu5TT7s{QCKW{;@ttW{3d-DzWLsu(;Y{=r*5@vym(M#%N)ryxOyF{xk;>w;I8Y$1Mv z_^m&1tbiDJyE2=7*ynC&hkRR>d>M3ha;$<%KcCdUt@iWa)R6J~a*Tbu923@)CX6iM zOTC-SS|394^ap(?GTttLBpvtHQEw7-U(d{E&>R)Q9&dSg} z1AuBbAsN(7Qz<7m!t(G7c(dB$2GE@cc9o`GM^>WfMmN5OgY7B2lzib7~(pAAMY< z%^DM=moSc+re-M{aA{(72}Tx^`5Kpvk-7QLkP~c?M*rBxp@nqA#f=Cx2NClNxoXU$qP*N4 z3VIh&LF4)y1(6&o`!pA^pmlgzm~D6N&Zft&r$as5>QxJ#iaMAhe`4mDm6QxEyzf25 zy2AhL)Xw%9R14W4@>fZZ3z5);h`@Hhq?k-R7g^jHSzL|)1xwZ*p*UmHIDv!egrb51a=Lu1a{9kTx1yj>?dn?5W@j;;WLtx zHi4tm%AX~z#C&x#L57OlC$}>H!Kua!$ZkIz*{0;qy07b-x+jmHjCJ~rafEO^^yHS) zho(?=)L_^du}c#iF79GNfdsKDK^eglMECoNxyYcJDsumXXZ~|PXmK4erwn#ypOmaN zsYD~~ePZEqH5jyp=FzoyIbTo0AK?YRpnsF6u1^$NH*)VHM`7g`HsHz(&_<zbx;zi6GugrU=pf z8s-!P`F$Nq`%=;>byR+b7dv^k&_Nd$j7;`e5{INb}@GsgIw)P@|Fy2OW1j(eAI9!2*dSto%E-WhY zu&5GH^>u|~aNWA=yX0sSNZucC4e|vCxd{bp*RkEj;hcu1kNCL1c3v~;7<`|ZJO4vN4R>L@@*5z7XmCDZ9 zoM=#kZV18$L#NcRF9B#~WO3?FSwzp1XQnoe;`uqW3hllg=$<%MwymF^u`v+=uIk7# zyvs+X?$y%JaJVhX=z$YO)sZSjIB7^FXV-x*L`EF_$@+GGpAOFkl+^8mwK+M_&`;^6T$Hjzs~D zGmX@LNF29kT<34A+UcIt<*vYNh@fmL$~K=s3^u_k;5ub{_f(UB?lMD1pO$ogvwB{6#IOX9X6Y%p)K6)e=XB zSu_LAwFDT(uzE2|Cgj>Dk57?g-kRXLr0}}Yv-$RVi9mxb9G4-C2V1ExEo`2jx3wJ= zts59~CDRRuV#0dxxURi@!sY~chn9NVXWUL&dqkq$$Z$?9*zE2KNiDKY5TDe_=Kq5s z!A67bUQkwd^eG=oH)q41woFYEkU)rYN5HzjCiSsbJ;CuTrc^H~e@%YCE-$*iSRvWf z+4%_J=q3dF6`Gkn!HtBP=LbmA^*cCXy^aKlZjxiP*+Ql8x1Hy&r7RCaUDVBZKVkw1 z_CG7L%kM->X5x1QsfngZ=oU1V&^M1RBD8@A8}Xc?DU%WyZVDq!*k)1)$7>aKWTEFS z^G~|v{e(~Bi?7=8@U9OTj1aLUhSB65-nW{Af}sjDNJBHL_IxfM+FHyQ@x?B`d{ufH z`q=z0`IbH?J3+~6wOt{|vIQT-b`lIl^mvZ&F<=JD(}+Seh7d~kBU!MU$Ly>t9o`ut zQ+@yttG~Z>rvUtfQk9em<|-DMu=x6NNA+Rmjph~Y;+-K^uJr!hKm_Lxv?h({;ivKI zU|NEQ`TQc>c4}nw$>eC4u ztJ`5lWvMpy;)$b=A3>_~-FsP-0*eRJ8sc|Y&)+kA;Jy5-_z2~F&4{4~RN6CL{sh0N z42<48iT_`0ADCCSgH4VgMAXL@(Y z9_`<@WL&Qq^8BWdl54KkH1CeYf^+n`Up$saIR1qmZhHXiL?QIPuG_!iE=acCZZH2f z=d>|n5QI&>7s2J6K$~bp`$2^6)E_nuj?j*=W)0h+g89d&1m8M%Ctu06m_{Hw z0Renvl%RSm@pwn%^~3PuUDy}i<>CLM=cQ+ienY6DReKf)6nVG{YSAm(@j})@Xx^w} zF+0Xsm=J~#*nb_3IQ7fkVs!dc$gbeV?CS>cLb)|_#$P^hWNbtPfyvPO@NRpY)`@ka z#Nq=7w$3)eqP5K(-T>HrzHoYsc(0Sxb|iKvO#d?Fh)&r^pla9S!IDFiYycp?z=rC! zph?k*3U-PQ+;0M94W6!hVr2&AMd>!BfVSy+U$7mqDXj{g+g~1bWo6MAI-}pgu~$Y2 z)t0g-V=o(v0Xl=DiV@eag?J;(f*7{T)zhw&ri_Z(~= zZLvztb^~PwE_1ZbDQe#jm*pIZx>O`;bSrx|f67;|2>J%68NDk`xjoOwh&lb7FepR7 zw!+WIKl?K?#0dUUW$TFD$#@c<62N^APqRzsk6{_@mCt;XjV0G)( zi#8!%<>MRK$_l|VP7;bHd7aei>b_y`W0IGc%MR$MI&q~m;zD(UYjiOTfsJpl-|$(5 zi9*b~BTpfPL!V=2QXmcz6AqP_HC}p94f{oDo?i4u1sHOX-QnVZPk1v1T**(q-O{BO zE`y{wDXBGr%E~6}Aw(g!uMXgP1hqzYjn6Xu4}-C?)$VV%8T`&C)r%Er3}nNKMk`{7 zf2ZOs+;~{vuC4pzs>0TWPRD$nh4Ye=GyKqj)UVmVlIYJ6dyEO}(vU=ghCg zY$|>ppEjzyK3Y5viG_|~c0EQsG4F{DN>G^h&{!3fY=4zktE-{$5Y{Qi^W)9T8^Yf} zLKpO0U(LR}NU*qn73Y<6RnRrs_--!QRRag$KOlnzTn_#DpzLP$E`$0bAE&)(rMyr* z{Bk`36&1^wt=L-XoK<;8MAQ-ib-oNn5h{C}`RN?=|nzC+&V^ zcNv#lqB5oDN_U?%PG_sR6;cf`8OCJFp+MkT3a&bCK>Le7cCOAQbQf|t<7L<;&<6;3yFihz-{e@3vtQ!mfBzDh%RK_==Z=uLczDXLHx z;~n&&ubra8W8$UC+b`cM&j^iR;kql2O}Fz`4z)>U-v-#jHeJe+s= zeNkbpuC8vtegmgOwXZyc00!gczAXEfXLY$MBolTMlW%BJ)N$1l97<-7MI&fs8F;<3 zRh$T;9~O*3?E&02k^^9r;Hs|fo?8M#8!^l*&h^%c>%+_Y=**z3N^FfyET*8VOlR$F zJi8gQ)v@*QOu>+ZoRtYYfFl*S?ia!F6XwnO#ntCfy&13;N-34CYURS8LDo@XdjQk@DdvX%k_GxfIl`m;urm|PC;B(*&VmE4|td57YD-0T}_<{U`Sgo3>n_2n(lY5ADzZkz<3(bU`G_g z^%d6*K;+l~^I2lg3U;eH6mOSR`2)G&55Twe=u94iynBkPJfCOKd+%ka#%ouXW(6I_ zwPHQjm(YxMY8ZzW$%L>Ily;}7%7wF(_j1O7`86|djZDxqbSEwuFLp~_isNqeGFt>^(|cT8N)KdpgVtI(CK^z?7Pew%Prb%0OX zOm9e%fx7r4ihQ-=?#dyTNIbv)4$Ce?UO#dAc(?+SPS)=tgfDp483}ODYFf~c(B_-8 z_AyBh{L6U8bx|dI`|FQE@cqVKzPyep3RWZ=Dl0aL)jxH*Xa4;TbSVP20L#4V$HTOq zt;R>=|Izu|b*hWTSfY@GeF*G(gX3~l8;gp7RL39#HDFE)I}UBj>|+)w zkCP9&=abC3o}v+QhvHT8lu@nsjpXO6u$fq2US7U>F7Xr8L47Afk0~iY|Hcb^I-$G# zF}&gIVUtGltSxE;szeO=EYSzPpV*P8rmNfid=XR-4hk|RI|b>lQq8Vnf_@hiMBXVq z_$93kKq)xJD_d-cIrt(#xl<7g=8C8#gQV7-^laZ9EkSE-0}b2lS^6vL72>b&r4B;&HX^VS;f&V;2T(#a z_P>5WXo^67z*LMHI|VEnLc5t$Ij=)->Ab?PJx}hN?0te%W_Tp z$MRw7zq70_&40dq>i8m~?8W~y9**7s>RP~4+jpNe7Ga~=on7NdCyNLFj4A0i1E6J5 zsLNFJ^&g*Q^}>2;4#KZxWn$j}VgvJ%kV&KkZbeM9h07CPoWXNNh>J{LmHTJZovFWR zp-nU!j79zVhuY$0m`$C)lS{{noq^a{wDbH^p@7uwU`4-rM)ej8iQq;7csY70L6QlR z$~*Z^QV=idGP2+t_r0E^$WHgKFRb0cLDC2b)h@VU1g$L51L1ymBNTxDNqKs-KF`D? zi6{t+$QOL8tt@w$WC=zA9&XhuQ$A*N!`WkAG=Lj;1$jrE1@0^Q8%YI(3&>zsk+oCnMtw0FJy@j69L|vh^bcZ`5?1EzKTJBiM$; z4%wS9>C;dMeW9#ybnN@Ys1ty$jaipUK;6^aUY`3U;q4BLX#1@aGtpiT3$(dMbl6%@|pebZQg#T?Me}EvJkS5twsO+f4!2IYTv>9An?79;!_fD zjCGr1KHX3`SmgWT)?NabK6W{_Gl|8@B3WphN9Rxq0j8Ze0Ik=Zf+_6`5`B|s(78xH zeVxC9LtO$2=O|<-Auy$vCA2fvs4fy|d68+*PiWEV_Zw2f_3G6+#wD&Eq)HRl5J z!i>nXN9A3f(0=iwwUs#*YE!0{gUGb+gh{F~{DuxFjKujT#iGbJhsn7nt@oh=CMUcW zz#w`F_%cVf>Tv=;99AK~O92istY4G)BN zW+PWAO}%k1^1J?AWY7Ok@Rv<_&ue_@nBZ&#tGXm2tPb=WIxhrJn8U(s6RfmODRQZk zO}If$?FH)cUq(hN)k5LuQZA~bP!Uw1N0A?6*^>)@8@<>|$9B~TEJJ3M0}fdM{>d(6 z+Q8n+2m=~Jy8|*@Yaa%u|31EuoS^$TCHg3^uVel{c9F_30e2+1<#75(TuwUzKBF=K z3T_fwzR_E0t?~yUBS_k_E3E zGnu#7>I6P=@$*+7rt@=4%@{3_Vd6|#fNM#L5&6vNAYBNMZsg*VCsyWNV$&d6OztkD zBVt}$>15hR%GQP0*q_0j%Pq{?onAHyOm(wB!AMSjL(_t9Dk*DDt~hz!Z{cEjyzj>J zJ5^`7FF$TS3j=lS44L|4Z|_krOKGm21XUL;T|=}s!4I);#iuGBz{8*)0EnEk^J$=B zfH}b35V`7Lq^-+w=|3+Z>bd74VvX9Skw<$=)d678H9e1|p^~-vZen&g=+B)~Be^pE z05@uM^g$loqAaeH`mS|ZN=o2;$M_;uTcG-@KFUm(CleSqac2@!ccOM21mlm8Fj^Cs z6sSsXp2{)%J)jYzgeX{Q9)>wk*=OZ<8$f#s+7)5EKwxFj-}hg0_f?7!HiG{pYx{)? zntoQC!M{ZB_BJET+WXqJwso<#JaRxbQ$f4R!QF1iul32ED0t795znne% zI>unk{x^g@y&N&$@F%G?4tTcDcM)#MCw&G>dPCSJM)1#IX?ivh?ZSEJQ?9_iTTp4% z5Y%;Ou}1upRv)OkgsG2n%7?&x`b-w*dla`c=I4}S zVdJ3lS(UIlk{uTN8o1S2J2YE&W@n6kzEiv+g$-;)ZV*p3ze;j> zCDIdjdAOc5qsV88Lj5!mR*TNoC5%9IsQA64N!zT3Pj`C@&a=b3Kiu>ijp7ZHg3Yut ze|lY)E^0j3wyPG)Z*v0~v}2GzS5s{X0S=J6FVBB6&=068>bp+E=7U0m31w>l!E1s- zkC#v`5_(YZ@V0zJSk8Z`e${IeR)B2&(oNiN9eD!?6mc6DZqE`6eHvrE2m|Bd)czC6 zV`3Ot0Nx|mk=K5IN+fD+n0>?x!n2msU8Pp$wvMQjKW|QD8 z`pw{b*W z;)5YGt9PvaqdPU^WP@ByU<3>1(GH2JX8SQ!Hp3w8gqL`>Vv0!~S&uJL1j%1f3MoOt z)Pq#Mb$cE+4&DP@!YkFx)hxQm>R4#{&A@xKwrn$#9J(iqcmH*%G!~0nr>aRyk@;Eu zK%Q%el5JnRoMAXU#mta~PN)D1EZy6Zy08dnAs>>bls^1)F(GHn9h@wmvYgz#vU}c^ zYYO}fAH_P1-0QamTvskdym2kU&Pe1~!TRN94h}{mvKPA*K{Ga(j`L?^Ou}3{huxcz(eJz}gm9^0 z4x2wAJdX+DydU0Au0m*tR#xzg9-pRVBJ;#9Hujs@9);^kGklv1$$YN81t6IJ<=L2OZ(1f*G7V2O*I~cSD$Qkoqwnk%sWr zsY}@s;In}7 z_Y$}TLEI>qEQ9bLdjMP}vgFdwy)`bwd=-CWJ|sx7U?y7s?dI?UT4+xtrr+!>L1geW zQr9gV#YQITZMVyxY~Vwp+FGFMvSX`|VPWssgKXpBs8l!;@t$X3~_WPV@{B!L%Fg;Rs~(!e)DJsgtl3bbg+MPBNkF=Z~Ws3 zuOr9g$-bu}Y!>-HAUipc^7RVk>5sO8qjc2UtY{FRw)yvMZQtDwhPLxiZaNWl=|5Uq z%-81{3kwSkVcG&Ac_9R-LP}$XSFheZVv;4t7rEKw1BDlydkeos`UqaY{Ol4X6d5hW z$Esen6*W&DFb>=&M&BwXZ1OGNbOlQIY9sO|d+4v1k+{Tvvf+YGHN_@YaiiKT`%T8# zGnI}994-A63GbaM`Sa3hUC(3Mj>)kaM%HWS#s^fK=njQ|JLxkg*<|Uf*HM9n%Xh`% zfQwq}VB3AzO36TuEAG~WPg$n|3;J#R2|fx3@HFnWXLPEN+EZH1-sX=ZYRwASrVrgN zzRh0oTcd&34<0j^g-#y-d~;om2oof6gsVuji0t~F;68sqk8gi_j(z};SfTK8w4d-A z`TXgVm;3xXUsr@YGNr1WXm~azc3m5e8Rvz|hi=T^tN>mls}e2TZLii-W;X&0^+ZmE zOd9Qo&nb$n4S#x=ee3Q)&0qv_T#WXeeX`$f*ZzfgwV!ajfakDy?R_e(_lv<&>wN~< z#B2l>)b}$oh;DlR``s&nOyUg0tSLz11k3bsMw&rD9x$2h=@YCI`1|Ac4s=Rct}aiC zwU*H1qws7Wu$CCL6Jr6LAQV{_wxzM~&d*6qyeH5=*_5`YkH^$bk?mZzYZm`9r$zLQ z*kQDi(L(MrFaY?RWGmlPt^I`E?@`ik<3KI|&-pxkXw;aIAQOBsM2Iu4<#q@CJwMv} zcusJ7d^<(=f!kSumG-}8@(RezeE6X!kII*Qu|555^maK`v$b}_ZvP9(NJF@*IJDJH zpCcpVM1xk)kVr%keQQx<8y~y~V^01Izstyh6913H#@&H)@x#fo%l-#~8}&(HfFtBX z9x`;Dj~L3#9=~t%)1+aYmm%N)qDyiKY$hc-l`CQ*(0Hz=ra_vOXh9EeW^Qw zsb&!{OQF2~sd2lnl-VV-}U`R)fnQJ__DL#>&03q4ix ztin>RdOGHshItok;|?Eu`~x057i49(o>#fu)y7Y`36zCA^S0yYMHk(wXl5xM*BgtX ze8VAerJpca`o9s~jbIEX|A{Vu#QNx3RTkFovMApRE*O@mcIeJa_?CnR1)(QIzb;7- z(SX+ffY@VemR}PL5=jw;`Fy21-H7c)N(0fJ5lVavMhP+~blHGxuv)OY2)u?czxgDz z3(OzOuJLcZ){Kq&2>NVJdxFZ(eT+Yd2-yb3ch~bBPee%w0NcAr`HiJU5J99NQ3T^`zArGBm)ABE?dVXl+yHE_-BWm``6Py{%R}(4b``oBVF*o?wH2-_UL0CQ7#R z5vI_C$LzE;CSPC)8g#jNBC7T2Lj4+CC{yrQC0cfGvre>+yOCYapskoVtHUtV%u4V9 z;U+4L7B6kl9XSCBGBOX9IfcObXX*O%NdO$8byRM zGhnweeYSuH)heudw-7USoSXXs1%Y>p6IT|=qI9OH`_6;5dl&%1;C#E+&^jUui<)~z z#i^QfQ>>v>+q@J+&aIfCLY!`BZOldXKWG$^tE!j-1^-TT7uOljM5pe+6b=F1@K+`5 zEyus@B{($WFn!~|QUi*In-P}7zRT&8JP==ZTUGDUdOwM?Cs6lJ=~nlZd07}he9F}1 zkF~Dd@t=UvraP5$8l)Nwef=@kNIxgMSZ^#C3+koQ&!=*P$PxKVY)?B+j3c*2PB^BX zn1KRA8o)^g*1K7U;|C!n933R(lV)Gox2ODN4I2Dd+#7S{Da*C$!%Ih39*_vOHMhEY zH5KS8=aWAR%uuyE1iywp9C{&if8TJ)hEn!BXh+1gXMFTjY!bnb*;kI(Vu~6u?p@A? z_@_mq#b8Qqd=FVUyT|i~C=G%J=&5{e;F{UT#vYom{nZB)-KGtlteM&Iyy5#pn{S-{ z*=@ULX6iP2{Tm2a*j$6w2LkZrCrO;Xx*e|1f6|>bDBbu>1mj#C%nnmELkXjQz~o4_ zN65Q;9)*yvZ^^pc@^sJ(YJNY42QzXd>QZWnQhY(}1%q>xOGvbURIg>Xm;ZVZVqP_eVk<6G1(#orxvEq?3dYi1W8-uPJKQFPmcD78+zbu2w zgM^(DA)2(vDc$z334oM=sLkQxeF}#MU*+E~wUg5ha{s(b2uGveebrI~Yw3?fFzoFv z9c#6-X7nZO2*H$vYFRmS;X;f^4u82F)DALz$f+-_!oo= z0PK3abH*02jAGn8yZ1Jb>18R{w&ZEu&YUVRi+*$=8J!aWo_4$EZ?`Dz8JwmDsM;5u zx|CQq@Zu%?#A%JEjfmrI7@M2F5$FywEHlEh3Q#6hgYUm_K{6|PM~#_}b9a`?>7c#Y z4h|4l3dKWIB29Z7q$W9FNL6%O*sd*&@ooK+r+z8#qa~G}ar7~M|HIxAGmz=WZvI2t zXaft6cnp%RD2yBdo#Uu)T^_|*Hr_n77jh?}c$hn+{<#mZz){?{?dwp?Q9-LzZ!HO? ziAK!o#EayhE-1r&_vgq%F?1pdvhghN3af4lmm^V(q5R~<_Ph418xoP|SFH5;BHxf* zPXh@7fnw>?knNc*H8Jn5$D><0RAFE>d|POaifOlVw#_*~run z!EQ3#!FG;!bL|RxyK}2fpzv~hzV#P(LX72DA58En3KL7)jNAx=&5~$Z+Z|rKZt@OW zWZudFe?O<+u^}oh1*c33Y1%()3rmy|kYCrdUXglC2xj0XS4)h2ZwXP!P(s5CwJhNk zMz|$HL42to;^jQXq_2l;jbJ}Ss1D9jO2dH!rnKUO0hm(E7{TDU6fLv^WRr0LpN=8h z0Zh^wV8OUWhH@J<`O|GxKMXwxz6B<_WC#=BN_g5%*(ozlfiLo$XzcDrm;QU(i~f6g z{-00VUznDWkoob@p^sL(MyPorzX+0XnrXvfQ5pn=;tTSntB#;9g`9NrRbot>hvDSS6P+q3%`4xdw4 zh>9|Ai%BotmTb56?;KlAc$)B54+Rs#?xZl+xZ%Wgwg?)7bNS*H5UXzMQcoV)zU8?>u zw8k>)2BAluK8kJ{(kMq{d$w@tTY*3bkDI9WUxiOC-X-b;b#UMJv0Xnoc7p9^8Wu2~ z)Q95<*8}w#gB$z8+20M#F698H`A>^y{*nZ<6(ba%_zC5#%)!;%lrp6t3qlsr2k)NE z{a44z-7UxsVo1`Rm~%-8GhGS;r`i)h<5dgc^}?+n>>UE}eMttBwtyVYY8bx=g)6vU zqSRJF=*Rq8IE*=OhZZSFfF+EPEj3hyyFHhh4F5UZp)8Z;VX#o}4LIC!Unb<9jPiN} zZMVSm7JnWaj1R!pS%fSRLGec9ZD1u}+`>X!;aq|>MPYmLcF|n{IF5sx7#I*M^uWzn zLS81s<&*-g0AZ&?+|7jL1oV>+1lzOnk4|p$<9M{MV4hI_5N@!5UKlxItz`msD8i8q zDv5`HQ4XMS-OX3MY6}s{7vugew(0Y_M<&5G3c%W!O;d1G~TFvSN0uAAvGJ8^*d#4W0OTrIy!_dnpfS@*U#My;NBJO1KQju#B z0g54T#s(rkM`SFDwh(&Tw&9dvC_U7fA^Ew{!6;_;LeIe9PS~C3gQsnuUr`C`P2z+# z7T-GN!Rw*~IV~#P-XQ06ioa?Xl7S+?N%p{YC}{wv?U6-$mXVLEvO*~W$ZQCIf0VrM z;p?&53pdGt3(14;KC#r%DiA>h09Ut2C5~`V> zN+Lb%kTMshS8ctpx-mZ~bjg48)1k$UuU)PSJYE;*-|({X2_8Jvz|+7fAK1%tt;CPr zU*Qug#rcSloRjKj>dum$_S+6dY-zU8`$4zY?;zc@`JL}72M}c|D@*>bH*!?x<4R&C z$GMZw`ahigyBeQX{rB`$_p-9ou|D;iQD?-#`wMzvs%@=b{6ryTz3}$8{J7K~I#q6^ z%dj*|&TVN~p*}w69=)rMjGFePYP#J~IzMx%LZ&9*F>L1A5j*?A#_F5WpX9aOgZt|Y z@IAQ4UwPJ(ATJtp$a-y`Q}Sm{0?Yeu+r;ZtobeTxw(pe3LOB^phAr8{XHL=H13@l+ z>n0ql_`0rrfrsH7U=_y3k&~=*Db<@mfFZmtiAka!z-2;|=y1TPZa{$Wu04PF-mhOb zvh+&ndY?rvXRu_}h-2(i0hohWrtod}#Kd6#yLoD1aD8Q}5o=KZlc}7 zCyX+!mTvHXi5e&tG&r_)C>V z5G{rL`6bjFgm0X?q?nl4OQUmhmrV>QmP270*Ca0KUG>Y2>6StDr`Jo{r#y2kyFHJ2 zvpaRJwP^4#cphz>mfWTYNeKiDBZn$E zme+;*b~SWwOY6?KZZ-$4kjihQ5;JYBtQfNNs+*7K^h+N#VV1KU7iy`rZu6xO zcIcp;XMYWVx>1jYw(V|Pl;A@*$>8AxPv&VSMnYA1g~W90L(Ki(Frp-pBw$)xf?@0@ zfG-!>?_*+)FKf|2EIbLAvz9=oML~iu3<=VYXVh+8k>;%p6X~y`HSTy0l}(NkbxT9% zFvYlart`CR`4RqxRJeYkkMZV`c7Z z|2ZdD-If? zAdHOe$R+4ogntTAuK&r2&V^(d#>k#mHrf)_#&4E@q5GtHKE7b1Pm)IeV844KVY&qO z-`$>a1`(!=@G8XI&;8Cq=qHR=OV;X`x5E-d@bfH9K>yCJ8TTtd@@bb0ZkkH$X}OkjJ64Cs?uHw6~URhWV0U1NmIK+I{`Fm4d4O zh*#yJ2Q|qId?V$MZP;qRR=GSAY#v-L}zoeHzseke5_sOz^>d4#U{)81E2_r^?b_r0?u_@N4e{wK!Qq#r()QfxR?ZJ!i#A_sm@x)9M07M;ETI~JM%VIlj z#@cN2Sgd0)hN_$}9!9X}vu(CPI14jvOL-n8akeoqjaY5o=j5Kmd3tehUMS+abCj3mR|1QzUfiLLwqZXeklH ziF}IczF@X<5Bt%Tp3l>I17i^f*BEzJfd=5W1lWqw2MQqKBqYvW20pzEZlllfc)mUe5f^E*}zN_ zzZ@>+Yv@;s62<8wm^i zq9S2Z&9LM`X=U_*XHr@bZ71a*xw?R_JgxIclS))3|KVeW5=?L7z>}ILoA3SH^i&`g zGftKcGvA7Sh;9Lqq=~BOh;Z2QKsw8?nt8Xx9};nmVyChUSeJO5+?=7z*$-{fo5<=_ z(=dgj#I0TOGel7UAPUjG5R*H2wA{linQ&l-dw1`ho43e3fqC(m2r(`s_+p2w{AaDd zAM^40g!R81dN%d@2qq9@-&>@SFRoSPcABqh(HQB61P{jUvn-(rbJZw6K%FyIYp)L% zMn%5TEyQ`M92Zt`({J#az$3UX9>NxeH|NrMYD$RMR-T8l`#Cu>yU&@f8J*q4&vqX4 z*AVvUkCu!g7op8%_FT2mgRn`f(&ZGOMZFGL@Do9x59nK;FBbpn(|rAe*2`-Y@gB=& zP{1%1oqA%v`Dg0oIDcRVKOP>sbJo>WoPkHn3-`l5;vwZ!Et_N6%u*QP`6kf9{~r1$ z1ByQ`?%JMYJZ!QnG};{`>W`nSf(DWIKrAy7;S6olY2^FbULV8p)n6jjBk3q1MTs&7 zAHP@eB_6ix$`3G+c*(O9=da=FkNr0Iu#8ch+dtI5nbPB7yMp9&Py(l>8%+^Jr3&~x}^>IB*W$gEeY zdw~%$!HQ9)#r20MPJ+r)e{SN}Z9bg-<=7H+eyTT zZRPs1(7!k6^KUtGG6aZ1r-##(7PSLDl0m3SIFy;z{G0g7sl90h8v4ulh_ytjG4f@4 zh{>PmN3Rcam6&-GZ<17liLd}XxCw&{VqaixZ4Hk;nF!NZ=U-7IubiA5=^a0?vc6Zz zaqS~fzxASHb~-(2lBAmcEIoY(gl_-N$+N5^b#=(2DwbY=unOjuS8LNP^AVJ-PzYYN`F z&B{Z|?hi3(m3oHlEZf-sY~pl%yuQG*z}UF!U<3JhIMt=r@99>2Y+JCABb#`0=a00OpgFZg7OL;(jYp}GCud+-HLTE^l~+tPpO8yL8*DF?%oWlxG~y2nZU6~CW^$D_2*{Etj4R&+qH7Ux+FCI?lgxQ*)xTZFc4Ups0IM zebGeMMou>8`x<`jw>AmNEJv@5+xJ(Zk9gBnr%M$y=zzh0)#Sp8hPO~6<`0rQFt&mNw1x^U1VAMPFel%bkd>Z>4 z#m)AcuLKGfUGaGJcUjNj)WVI@BF6cuA51GbNu1@Qx@1rf+V)iih_3}(mp9ICSuj#o zXn}pyA+8ip{W81s>Z;WT+u4_S!d8=2Wa{_i zbBW4crrN?@BBM>F+8)hCmY}D()BQ&xz`=YTP)u|AO#&@#_4lW!nk7tB+m=#y7g@@x z^yc#Sbx^Y9iU&QANfh|KB1bPvA5h;FoFX#Tq_QiZMQvYhWE(5L_ChoAgra<+rE8U;$!=n@X+WxOK{^xCh@k+ zoex8-9lPCKG~wK6V{ql4!bmyn%sO+Ig?|#lOhBji z5}bb@!K>Te-tm-uBsW}Pt8US45HBAb90fdpN=Gumm(!oWVQ@NbzOSl*T;5k?2`BI! zIb$?k>*DiC6$w#nDGr+rtSxVE`#=}DbQgAShi!jaJ^wKIv&+VlG z@0Boxlr!s6-Gd^sT#xb5`qdk6Pi-A3F(OZdeR=Brr2N6_em{VQiUMQ_V_c%8Wz~oH znoa~X4o=OxM8A6ViV^Gw(*~{7l$4ZAP3>SDmx~Y}OOwW{E|*~LP6hX<%@iewcmLM0 z|1!At()U>x@0RMNCMTQtb|i)g!#d+u^o@k>?X1K%Ta}*hcHD{t`@j!33Z_QN46^uh zH7zuSW0ZLHN~~Sooejw*-n6xxDN+IT#!YDZj>){`)bDUC(}&rH91851)Kc}1x!dl} zO2`7GgdqzCo#OhhpM}w=tDl;|F}h*V9DPc>@`9Y4+&R3j5O%+BMU|xsE2&}YxQNyO zE?YuVm0(a}ZDih9{fjf@CML^m5vJc@2AVv!%spohH*)lHISjIU2;WVRpuGB$IJ}=_ zX6{6d>pLj=(sD%+tTY3|-E9kh++pFgoox&8H;wZ;pS^;~q!C1>C@tY;-eJEMzwGkD zA$tktI@ZR(+Ajn%?~W4;fr+qR^_hL`pOlaA;l2K z5r0`$W!vA`Bi`u9h&-w8Vk^0HHJx*mr_XiFNv`lJD{z2=3=b4oM2tUUG$j42#_<;; zOtp(FJyWx@vkR(dQiR@+SKzA0gq%%&yr$)4F}=QDALF{8alS|Nt=+9-p;1734=apt z%DkPzf|y=%Tkmm`^!y4@tD_cOeoD&FHTjU(ve!y*P?gZ4ukVRZ<4U0*C4{iQgG-0i zoC@zc`#Eh%;-85vbQLpvI6917i~L!R%x%~8SKe*_-si5a8iST9}a*bY9?8y=;SXuyK*YLVk~Nzr*{z z6B844lxzcNs|K3kQ{$SpJ{k7q0_ky)Wr11d%G}vW=iOc`T2Cd9T4SKk0KGWkfv?Mq1D5Uq7-HA!!gl69_ zv5R8Nv{k5Db!UQsc8H_ZNK2 znk<{l1JTF0+W~g2MV$UI05ZjXKYLJxYc|XnTT2`1uTMGs8v~LkoAQgIQcEQuJ$26Y ztbm_Ur5@h~3_RXVE%5V&D@?&)M6dPLP7LmT!PY^RMDx`2^hfgS9+`H{or+iS0&8LQFq1=Y*9RxjloKq-4!g?h^rRkLUSGlaa4i`(avufywLh829uO} z5;6I-7L~ZBIfyO+rz%_!;jpW8R|jS`MO6k?e&>zhIPu?h5*86sxc)4knit0eviZhS zg_Ifs6TuIX&#p3PhJO1YWDp{-EuY7b6mOQ6atmfc)!Wm$EdRhjiLgit6vUM_wyUnw zDp#X9PQ3W_@ND+Xk{btjaH*-s0A+e?2znXlOB7l4(KO|QI_-j-Y@L_aq^APd#6Ju1 zj?6BB)fYeL`7DUPy9h45Lo}hBXU)U&M)ij@GLOOLuKe|tXXNbki?$A>U|r%nBw~(+if*Z%W^O;5Y~_fa9*y%KKD1%Do(Cr@?UtgBjlW%2e?{=I9#Q!U&NBk<$P}^tMbrkh(AIh zB?{ZeQ})zbCR|BKlRTxaZqzNz9oZBByULRut4=nMjPJY-pD|8_uPfDtaQXJn88cIB ziGtU%*v^{&3?^338EKLT669$rs}~523j6XblEWCu0wRU(m`YiJ6(!1>(9+1%xD<i5>qcU0bbd;?(p0=zL zxPVJH0A5Wu?m!d-XwA1NU!uicpM~vu+*p}ZVwmKJrAZ*tgmT6_l)#UOM?-OjMPxJo}1h$DudZ42Iv zGpQS{pYTyiDlcCVlzH1>r(aAsvNF=-+Uf7d3*15S0e7LGyu5sGSx&KvLM}oKbiVfV zR5I0^=&&cEq!W<+zPAP<{BFdIkN*1g>m(ZFc>%Vc!TCI%07SGN8tI+os(g``Hx21o zVViwV!p{4jK9I!^)hu8vaIW>$EJmnPF2z?vo)>_!gcEh+0_Ewe9rlr`%V3?mIY=fr zs;TeWD*YCV{1D95GCVe3uk1TUS*w_+`~nrtcbaQVY(Ho4Ivoc_kfx0WP695}A@3)j%W^dFa&|L`*^Q#^5+-$$`v1VwJj+!3CC}JN404C=Ez|+8 z(Zm$&BapS2O8#ld6^f#wB7@76rF1nHRp_^~KdCwN+@xFhyo%e$d>+_%`{9wYDjYzD6@wO%CgU&e zNmS`|_?Ut;ID(W$;xY?v>q!4BG{FK(6%M@jjc)>hxgC*r%iG2O+$i{_jp@$gQAta9 z7tLZdR>3d16l?4S=<~*TTHYss_v`rikz-{r`#OTc=P264 z@v=#qvK*_gLKD+ilC8y7ed`<~&j|Jr#R$_O06R}qUCgdtZRN-RsEQISQls@w%o&RZ zlcFeR%nAlE53umWO{kaLJbWFn9oP2M2{brs>TJ-__*O@^4C||_Z{@$D2O&iT7Gt@1 zCg=MATn5pwir(D6PlZ116egPHc#%7)>u%w*6(K%;TfEA5_C1@?+JL7yFb(pwjsAji zhkZAkX}opfX=Mem6x$&pVs1ruaR5nL6ke+7uaE+MN1FBqOg@#5hnIa72#lfgd*cjq zg!S9P-Ju+}yL&UnmXR8BAA=s}^0#{r?O!b`C|K$m6C&2hHt^cQYsJGr!o@Ekz^Ab+&Eq~ZfduK711P_ zz&~7;gP2puoS4wciDVdF-@h-QUKh7r{#}~#E}CX|{jK!Et+RUfvv68l0DYTGZl@cOgE#$l4D*u4RZUc0v}dJV1kJ>d;^o1!pNlLnhOpyKV9|}3`!t!FY80qshI6SC zf4{PDVP9|~3s+=Q%U&5iZMeT9CPCA|-rimO;A7@%-Scq#7XTYal;#xmAQS1Tj;^jD zTp~3g4O1d=u_Y5k(k?|AUsV`>V=VZkt*wwV>e9!#qK$)WKWRu;DZclYX5Wg=Fx1SF?)2h7w8S$roTyY$ z=mXoy_r{5+md%~%Qb#*PI_xzev~I$(y$5ds8n5&2Olq5_?8CnFkwok5dsMt>?O8A6 zDu#sZ-D310)$GcGy`q(-oxb5|%dS`AzBEiO`Ig;sB{_#)=A@GmF3VX7%NZ*_ zc)I#QP*4yrsVel+v1;XXwT}*r!vZpox)L;*CJo0sWpF7b26nvxrI)TH{rRG>MNo0(~`DaDS$WW1o>cu&q4-~6QA z@zBHZnNS)`a?w*2qe3mfQn<4Hj}z||6!Ew;SU?J&xE#f~{m%q|H_%p2@!1mrGSB{)&IOeUE{&!@6da_?Zn`ocjx zB{5BFa@#idSQ(o0e4g#NP$WnlWjU^SrrJ&H@?u|XVy|p=+EKG%XK&wg8`K?h&(5x{ zWet4yH%)uTTrBVAj!(A?cJ0G-Z#Qo7B+kRMFXCHgmR1j8VaDQKf&6b(R92;(>OQF{ z|MD06HSMXX-5lN(5FRP>FjVW6pOFNHdx{~z5^ki#d%D6M{(j@Cx_x=eFqol3mlQ@u z%N*RKBZf8#c>)9*?i}%^*D5^uJ`%-r(B$N#2Pi&P=t9)aovRy$svQaY?7x1F~EA15xI#g zWdWv&R%ou&;bfVtd8lP(Wv%bUW13>ia%faSP|NJbB@u{33r4TB3g=@c`8-$Hy`QP3 zyIts*E5sX4g7L{?60{3~3qpE%=whckuBWW4Pxt3bXM&w4oR z%<&9E&h6VDyuM52BNIhSS7f;|i!=1GW%r$QHL;xJefBAfLrEqa+oAFiSXnGj_cN8-(#|a?Xb!C3PwR(2`w${_U=2XYgYy^TsVpz zpa4GwNMEb@25`*@PXtVQLhNXP=!8#LIm+-5zv0ewXTe<4$yA$JCxHXxGYec;X#FoJ zjO+mNvz?S`#%w4K-SYHjWMpg7Z%t7h*@>pa!BwKaY%*1gryb$m{3`TA6zGgxdbT?r z3_vBEpTy~TQmJ+8%Me;s<2J+Eo4|iP#KINMV0`Y0g{g;+a0eJ+y15e5`NfYj@d-0P zN42eAnpB+{);nA{drLl~y{%d@Md)YYN!ZMqI~s0)*I0#60A?ZT!S6bUfPHtMJO7rV zy2D`My)inp-99pzVBwFTUq8^$dD0;MmKyz#TkguIPOOlRP)?M8UvK3kiPQhEUWa>gewHtkV^ipxU#T6pR|RbJP$y2uP#9)RzOe)O zJUb&yi80MEszD~1i|yqyNsp4qPucxCi-4XujAl)g-FewDk+pFnP>JHtUQ(T6$`=Ni zw^AyWbw9CggU_;lA|oAS#jOe^2AZ4B;aeg}0tbz14!jz)MhU8I8j;STD z=+Lm*2_@De znuP&p%|jwO5p&j(3DwEUoU32$ds^mbF26bS`vroZ=VN)A>h{S>r>Ihxz;@NDYOHJZ zm;YGV9_76c6)zX-44i+|pnk$NDxzE&?V=)?;3-B+NpwXAK#^I3!1^Q! zqYQ2oExh+xU!oJdyXLV`8TQ2&C}%32%%)0%YK|*7X3=ma&TL`(8LJbI>$`QIY*bo? zxwqgk=c$d8g%T9~)u_RYyXVIO^LR240+9&@nohhmBM=^~EAcOQC&4IEYxu9lVj>C5C zH&Y7_1m_j?I~r9KIM63rMDpquwZ1sZ|9AdF@=wvr?`;?{aPP3+J&wjWP*&UC`z|i$ zkU>%KGr}=y&NO(;OSx%_^fm7%EwnQCePq}+^?QM+!-Rdl@5RG>7;45LO5&q@T5INc z75W`)QfXm9a8U9wBRAkOwAB-fGf?GW*omXc5LVDq){HmrPRvmVwHx3BedPV*rATeL z{jfQVFOtHEl|8gUVYA3Z;4UeHiTus17a8Q(OPlRg_?#=pob?1HwKRtx>K|Xyf@zt4Ll9o8~CInB-I&SU+#GAAuugrY+Qm; zpQ8tUg&;JYsA%z}RqdOMjvuTmvaBT^dEs$di}Yx$YyyJakjrUSTnqt6urD73=IzSo zdB7i9K8z^wSd+jt)`S*aIKV*Lu37l%)p*O@!?xc!06w0jEaj)Ca>r;vH0WeXW#wAJ z++4}-mf=~78nADJTZJa7akAML-ZQ9d8{W}je>G_Ethzc}8M5Zx^0d@;uo>lMo=-)S zX)%1a!+u4F^lpAROFV@AarTfOS{5TDfs3=ExI8~MIUE3r?N8wPcf{g6v_jbBX}yo~ z^73xyhn)QR*m6Bib~t=Rgf|Tt^DwNqpl{iNEk6VE|6PUq!3H+Yb(j>sq7`BKbp~98 z)7h%&vFuGV45WO=s_Gn+JVLmO)3LISbai)&BrYc(W~SV->Bc^&=+AR8wT>Ni8TKP3gG z!~T`E^;F|L%G~N^J~XxVNDKA^o;-zzK856=16Buv3cYDBhS;@3FG4fZrH_dfe()Mzw(obJ&*%NVuIqhWWKp2IbSB7-anFOI zNusZVxv#6ChU+5Rz*1J8ndj*711S;bHqx2ydd=)~3QLNqsa~*Nm5zm}u-p^HesWVdXyA(w{7vz&^*aCFKHv^3)@x05W~0jltWXORMUD zhx}Y-7{f%dt*p-aL3?X!Sz$yjOyHR&!L_?e+VzswfS8WuZfixO2|-=yz?Cv=z8l*u zV0b@bwKu>}W6Vs{eN;Mf-QXg_F&X~wmp1r3wX!D;O{iQ>+79FDX#8TW6=?f=H%h@;;_#;p>^)8t6{>IYAC*sf8g|#e;0O z_9vR@ZCR+;GR1@af?>+Yq_pPrxlA)2{y!Im(9M#PB6rIAQ{JVM?B(C1ZAkR#=>fhv zy#dpvX^>rAG8b*e+SMuGahtwpQ+On>}aR}XBg=TAiobpTj zj_FFmL~Xe-#%afG6e)_IM$gyyb_fGmEN`H?5{FcarfSOYPVUtbg(btoL%|n+Gq~nQ zj(`n!t&8Ce^v>ye#AGgyXM87J^-(DlQqQtB9rJw5<%VbI5tR@i-uI+v0>SIzGUNF* zA9B=fOq~fSN2Bg2zW*(+t4bloVe;fGfFEQGS9i))3#rJ~N)Qo?$#*4^7V5+wHkwo9rf^Z~)<=qR?#^xRy zXhBJD9N-c*V-5fT-XF5k+k64+d1=~hsq;EJ=I1S8i8|+t$Url`(Y#V#Z(O0zZ9i$!Mz|8%z{K9ZM7dF>=pCgZiR;BRry0UfGM0a zFE5bhMsFmZ4PapGMuyq$8ZWsShiR5Tt6Rf+4&}S-KxEV$xRHszKJZq@s%0vD1edHW zbP!o7hr0r#Q=G9~MN`=ytl)o_3dBs0_*`?n=MBOvr-TA=p_^l=Ut*1Z{K1NdR)$^a zw&&!8>3?QvE$VFb$VS3Bq#o*^sdMq|ZR`NSBylaCKI79EM+v0lMqOOV$EHJYLOVCjb!#sOM%&TDKq)E#5z- z=%JgXv*G9~908+$L~XTHb8Uy?ZTQbfeQq34GP^@w&1 zjqPfGJd_Je=JDsI_x$KYxlHyugd9$+scIDES#p6hViVZXD0DolIr7@|@dvMv#`Z)+ zRCf0E&h7$;aHed3v^!~`9c)hti6B*@!yF~8McqwuD^3ik)#u9Nx_s8k&SukqfZehY@&4h|Nx4Nr+4)4`46^f5k zOjZW-y#tROtG>UVdJgaT5qh43puFQrW2t`RxwQDbpTp~+#*MYbp}hT(eELU-)zi)7 zWyV0GTIuVE0{#8&BAoMOn5;X%8ha?sR>oP)Ht(FQkC=;&pVkUUFpO{4cMznQ z@pvwV(Y}&N1D6`>vre0{YH%*o?1@_vNnt>@bKnskaM7J=jKwp)$)0mJs05((`-7GaaZv_ibqGX63qgTyM_XF0}bJ*_k)~0zMgafNkAo zx-X@-i9)QX=!lpL!fSm&Af^S~^7NgVy4yV%oB4sSHph5lqg)b$xmN8V#SBAk^g3_6 z0Tp$QWtbL6e&>MkUDx8LJBd-S4F#8TzPQ!~zBa3%;^Hgy(p~K`2Gq6ci+gxm$vZBS z{yqM#F_fK5nlHMslW0VY8#RvEx5)NeHA^ZUK02^-PRjLvdhnC4E7hLAuDTN+)o4z@ OmxJBjT^#x!asLH)_G*Rz literal 0 HcmV?d00001 diff --git a/img/neorv32_cpu.png b/img/neorv32_cpu.png new file mode 100644 index 0000000000000000000000000000000000000000..458ebfd8982bde031871094ef623e0c185e1a85d GIT binary patch literal 69153 zcmd>l^;=s}(=F~U#l1K!S~R#ra3~JJp;)2N;uLqc0L7hB2vXdFYtf>`p%iy3k{kNI z-*=zq{tNd9;K|`6d+(V!v(~JcL}{uk;$l%^As`^&Dl5rpBOssv5fG3tFwo#vJji|j z!v7$C&{mW|sQy8{2Y-QLC#@!pfKZ!&{a}F#e~tNG$?yXL0$%U)58|L}xita;tVCH( zTGz|$@DaC}_NVt6c0zYC=w&-QN({DTF(YIpS;c+pCX|xNgK~bM4_$hQbEc`b7@@*B zOKD$m`=zFG7`1Vfj{qGS*if1O z#L{=iK`=@-F|qn-&)=&9{oM;s%=`M2;3aKq&xMmPKM5j1hLbdC^dLAoLdMMa;!gYg zoE!h67SD*A9wc=zga)sXb73x#?gCfj>C$Gqp35NZJo#jc|8<~kd!uk>;(R5Kp{{ZC z`-h(v_w1t#GPGaTzJD(n@>&S=m!QL3E}pkghBO?e#;sX@SV%bFWmXPI%{kB-!*|>V zWHCHcQ>T2Gb5-%~iw98$8lRbk_^okt(RI=6tWEvtEKf0Cu<_q>%_X`nIXwJ&{(<^h zyyDk?{m74nlMJfk1=`PM1a(6g^CY7n+;QEq-%BvxhWfKaQCqZm0^g~s@zS0ffhRN= zB?Wh?Ih>@Ns?Z$SzEB7Lt$Sq=Y%qx5q2(%?%d z{b8V~#Dt*9TIGDu`A=)mf#dtxnUkfzX) zNDdL()+*s$#W5*+HJH~~wICe8mRGv&tdqvK0qUt|AXCk1!Lx~jkwoF@T^Li1OjZeN zsobgw>-RALtSg@+sN1~6jqjX=!ncH4U;j_2i+0mvvgk}j+bNZ?9k@tadHF&CS`K*%M@cC06CT`z{@9?X@G4kpV`=u2Ov4q-*Zj`u@T`VvZpYj;~tfb|fL_^m4uEv|B-!D{dkzy`W zPuS_O^h*<37`OHzm~lDrC)pVcUKIgsXlY9B^cWr_JghikiezIGPlp|aWiU$hY93hL4%bMpH4jdkQ9vFpRpOk%45wBnRWTi0xzcr(iSCxAY=9mQH_j{EP}3 zRI%^K!jh44L_621M?;G$yAC!$N2yT-VQ~}!1nPv?s$uJRJuuc_mO{=!Rn(D26xDy; zua0`|XmM)GKS6PfhddCIQM-{3ZIL-Ru@%)ucql8T~)!SPj`d+%TU#e0~ z=vek{s0avl&|@p#C7p2s5^8^)&)n&uDwP;V~(TmcT`_kI9fkHgK2WSevAoOoz^epUOY2FZi3>1+Qiamn6GaQXcZ zJCN118ne}C{@htRx(F&&AGcq3L>O#T`FYoj-ex6~miug)?P7_Ym`^SSUzuBqK8<@h6R=Nir>CiDHX;d6nKX~IfH%MB~LvGLo`J88dY27quM`-Br!T1v%vzD75L5ot)zpc!Nq%d)9HhdNwyTXj$Szns8o#W| zBz~j7o=XgS=(kF9BSn(46ad-dkaV~V!CsPGiLSU0xN8-~Zr%wV#uJ|#(mGjLrmC4c z>kMtRvbV0J5}j|0raj_)F`hvJK2c?e`yJ%ku?~mTHJ)%HgC=IrUz$bLa008eS*nET~^#oNdn z&ZRCt5$y*jZP$@`276~4H)zKA4q6S-_zQ8`;UTh77Hni~^_7-FtuWf1Da+-u3DI2C zJAdf3kv-jwgSW7%z%6-j;B09~sNWHw#}pJ{Sc!C@sd|y`^i_6|Md8E&F<$F>ImPv> zclyq}9yIh`h`fuY%SwxD3y^ib&1-7)5z=NX@MQiouE@M9bC>0Y-i%Q+K{^!1{FLGC z@*Yp#P5Z3qrRKYPl2FR(?BH>2H?A0Y8+f|Jp=@8Xmbd38D6299c5Md4opZ=8Z#s;p zPVwGJg*ZszNO)+5SFE<_&GP^62Ci2kAbs1Uv1h(jD10#3$!Wx z^_yjD6MTHO2$H14Ijb?eF97|zc(m5DFh16J+AZ$}edEhX!^dQPkaWX~%Z1YN<8SWWLh(5c%l@M3q*MH?#%fnwG+TY?l~~SY6lJR$(&7jbCX&(2i>N11QD3AFH!SyCBc zL3&hVX@9_9rdw=;G4UQpiHPUFof=s@622PCzM;Kifv^3k_eEv>dk9| z`|1@}L5DGCPU~Nc&)z;8;VWS-5CUD)CQZ-a(xgR0y_kTKS zuEPMoMI_H(1z6kAHTIVeLgM78_>pi@A}~|0@@6td&9q8C=90jyux=x`1PAaV6!>8I zIzbueD;hk1FGxpaSM?~FZIBd18P&Bs3Y^r0@Cf+M>lm|A9|KGx!i#8`EtMDNe~mMo zG*Z60^W^qryOH53ID7~<$?GrRvN`jK&BW8KSPu-bLxyz`Nybb78ZC^krOVe_#$eyh zCt++C+cSr-!x-p-;wrrj#0(~xs(*qOAH~+g9|zl;m6ao95?5WsPl^zLwm67;bC^$O ziQ~h8r8F-;K<$QD0tcs35%t8~e*sj9&m=!<%Q1InSZXFk!*I03f5xzgBP7cV4jp(& zdQ~XZJ-#wZ)q1OeChum!G1BPzeNzp&)Swh~u1NT=w5e|gy7?rc9 zvADjY^R09i`i*dPCl@m8J`Q*q_(MXc1=CTCMuR>paUj*5p$hUvLNay07p;~x?BXpg z`F#FQyT<3o6n}_H=fq*v`P;OUak@{dFEcO=~Eq3AzJsiIK&@jcInik*7{I_y(OCEwX+)@h=B z9~RK_*WcBz606UVBU?gl;09|ea?_6DFvzlkCx>uSEVml%ggyvMz&!dDUJtr1e3J`B z6UHZcM8-bnB<8Nv7W6@tHYwBg9lhQP(kJn-Y|8TMG^G>|jd`yYQ%eN$kLV{VC(A3* z&fpGBdmYIsKkb5KsZ#s8YFC1775mo*n>&gb&Py&=>yFRvr+U#_XNOy`C~h?yQ;ay? z0kDO%r}+|#pKyM>`eWi>E+m=gC3Y{L^C0P!PpRlvz}D;3?HFB! zdF~ZePKqsFc^B3Ci!rp@Ra+}H39RIWSa*N7HZgc&X<70E_GjcXC#6EXRUz7EEX6aB z9lGy81o}z4(YSev?^9`xn|PPEaYs~O@E~Nv$b7YQBCU@)Vx;Sj&bniN8(W#mLj11C?Kpu#@@>L zzCN9(Q4y6(@KEP%=p$uiKsxq7!hQ6q4zl=(PY)$enh-F*PyOiF1BL+JE}BONA*>e_DwnC#;0`vyRW!# z)1@%iO{&Ru`8-Xx$fixX8HuA;Gq||slmfq0qNvD# z8_p4SD6h7mRMC-TvR{MIZ@LJawpa1ib{MwkNifaBBSb^Sh zI<3}*_g@WCid&9-F$Kxh@1)Q|V-Lq9-4iey^s-;j`x{Mr{b~T6;YqpTMtQhV4_wFP zeMiUwCaSU0_70wMjR$N(>RzfpR}4%Emst>V*@Of@E{2O;u>ZgZt)kZ!U3CXN0cioq zNz`4dZ=`hT*TV5D6DM@t^eCZk_9MLr1N14qAF3}xN)R1I@=T%4LMjPqhn$-yWQ`|( zWJReXtln2`z9}=oAr)drOK_kZ`vSc5-+N>`oH^ zNbV7#E`c@|_26{2c>m<^i90br8SjJI4WxmpfPOqU>Us6b_dY!P6ayYP zK~Wa)BHkaXP@3BkJbA<%Cpn9Ijp|z|XpH%Trl6QBs~rF=pM<;~V8v2E_``_768Sp* z`5gn`iu_dw%YyG#@;~a3ZsrAUXI+5N;Bd#fES;b^qWz%xif)O?t9Hs~Ar`OI*dY#l zKC({OBD9k*)<;&+_(7uG0y9SIM z_0br5nVs+>odgo!e@86E>XXm`2<)53IMzQ~a!-)}xAn*(__RBNBz)(XRrrQ4fiS-+ zmEwd5g%F5nNqT~ELM%rzz2o0g$0762_Q4Cxv!vzxLlU%O;A%G&i8t`8S*RyTmWM

P4((K}a-w({|$%xmw;`!&zJya}~ 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 JD3db{_&=k5k~shX literal 0 HcmV?d00001 diff --git a/img/neorv32_logo.png b/img/neorv32_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e90abe6afd2685b5a0212328d95dc43dd1d4c737 GIT binary patch literal 11461 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

G=8mR49=Ct=w|vAb;T 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 W%@jt8z?v}t0000<MNUMnLSTZjF=A-| literal 0 HcmV?d00001 diff --git a/img/neorv32_logo_small.png b/img/neorv32_logo_small.png new file mode 100644 index 0000000000000000000000000000000000000000..457f55e5a767e4c258bc32345c58944c90506a98 GIT binary patch literal 4604 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 literal 0 HcmV?d00001 diff --git a/img/neorv32_logo_smcard.jpg b/img/neorv32_logo_smcard.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30872195b5ee0a8a40bf4d4ce9578a2eba6a8c1d GIT binary patch literal 152056 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%0Ajag_s*b^vI`)x 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%0A^DMrh0~F}! zaE?Z&IStbHo|GK@=+q6rG|84;V}}hnyzwF$-SWT>eg^{6@{Flew5xa5%jt1iurSaw z%D5iUdMT6@(l95k5?uB-L%mFML!o3iIj(vY$3i=$ay&RW(qMu!(R8eh@+iy;9Rd*R z<Zcdjwuw5@<~qsUZ0!QuPtk5>CGD@bA2~8*qSB+HTWZ2Mic19Sk*}T;w!sdl8YtIR z%Ud&13Ha|seYH|im&){}j|3Czv(E*^taA~R0!=Zr7KqrYYd|CDN+fr+)WZf%ow+`E z$pZ~7+WCDPQs@YS4R*U-P`QF%$A3+|DesMI!T0Y{Dc8lj^@;WeD3wkH&G2ZvoRv>w zuuMv<4sn6TkvdP5lVlf2T-Vv!P<qiNu_f;DT1)N<;6&QQAHCM}0?P1ti0MJmZ2m%r z9cKAj;R(yjY;@q1M_`xtqoNOqnB#5rp^ZLh?gae&P6S)CvFLE~9X&bo=2f!FyYqL? zT6~D=&m@9yv!yB6lEBTnp%geid4`9FF?njPq|<(CsHP|aSW8KNEmUQjOF6~yX$^pD z6}KiPlo(nhz#Tbn-gd?mz*IRUT+Q&y*ClexLCF$6!?2%YxNhhBzU5n{qe=0KvvnNN zbK@;EDp13gYM#nn^UI_tH^<+1dpk;H9wiTPD2Jsz35v4v6a$pkn&vLKkC6;88!EBY zOiOWw#QO%lHlP3K=^vyA+#~a;_kIepuCy!Xy8$F;+UnF~K{*K=&Htmg4_aZ?bU&mX z{<}8z=#IL7skk2R9(YJ;TNWlqPWP4W@@qYDxI8pxFHb%TG!b7_Jnr#s6t6d2&NwMn zH1}Yd%wE6onKI65|Gs|Sca!F57&71P=Yfce>d?|Lx(@Ytx}$fsvi!4oT|A)go(byE zeAFU^jT2enG%yA|MJegLgc&FKy%^A<r^$V(1z_d81LVE#l3gJ8gmrg<*w_ac)2!*# z-9yB!ilU@gPdTLH?)aC-n8md_as}Gg2$SrqE&Kh%)`B288Vl9(u;m=&x8Fo-so>KU zTE&?K`HTZNoxSv-O~N6)!JH=%4Iq|7ob;1UQ_Y)W^|E`fUw*udlrDH${r1t?qY$B} zzBD;S63$9%9k1umCqu-Xx!`~QX=;)5l~eH)pN)!~FY&@e_UoOU+PRM`9V0j3NtmAB zYKZRM8=E$z2Nj)qxUJ+ar`wVK6~M9G?wW6ez{{~S_k-p>3H<@`dgb9Ag)M(AJw%9& zTEr#(iI;0ko-)rLun3EG#H&>b?xbmiu)Dme@5mRCA9&fK7X!8fX2{VBqwy4zleBiH zwa>Mo>hh*M0oBiwicyEeH=mMXTj~#7`qP`)5epN%SOViGfXqOs))Z2)MyC?_ii`b? zNs=n3VYH?)_!*EN#%gtJ@Rs$gIDg1L|KjjJi`74Crmz-{al<AqHQ73eA)Xb#h?S{Y zm+@~RwPzJW6;X=}ZhYWOU#1R4=;C*yeOyFOO({(nVCBVZc<0LOk=E-V)gZ{W)%~=7 zG~d?l@8M^%U1j>T17!x$d%4qiECS~S<`MOytb40c@IiMhctrQwrYykvQ<30Gn*M@C zD&3t#u|g-L)#!77sc&b+n={IZWw*8#PldANC*C4pAlCzcbmZ5L^BxsHR-&rT^|k_w zr}eyj^t>r-I?qq4jGYduCzbx4-45nL{aeGHIoEO60_=)Jo&3K@huOi{uqd(s`s7&1 zoP$mJ7K%w7ZwtW|Vjtk^)E8jt#j~~QuG*?E^GhB-&qY!^FB~Czi3MGv2xSv*JvnY_ z@d>D;2Vnl1I5s~1q(luy%pG}NP~1iRek<X%Y@iVav9B#-I_<~Rj6|q0mMMhmY#Y{Q z!lV;?B$ZFAzYYu13A@Ocs68*O%Iqnkc4A!Cv>!`O*A`^_%A9S4Q)G{{V9uzWb;myU zYhydhFETV-KhJSy-1^96?5-vr02HcFG?jeKyT;H%rfL1MaJPu;uSB}c5O276>>7&Y zD<0~TG8-midwZ1x+ie3AaROs%o!vo7&#}IzE3qO9$nM~?yjxCaA-%!`7e*^E$DfIo zC-pBuB|(Z8;cdEgy8Sw;<H6kBZjTR<=O1ocfA|)0YooxQ{*&YVN=Uu`ogJw+-1;82 zOz9dJ7PYrA$t}7&&)gbG*|a5E$0oB6pFMuV?%yrg!E}h_F+1mzCP`>m1&zLHS?gGx zk~)cV=u@14=L<^gDh3(BVPTikH32sX{nv|0+8h;vmHu))7G{G;N(Z{eVuVO?*3#bB z*)`?6R;#0hV-EM+?>^NJ1X=n#FM2k|*pt}hes_P<YT}6xR8xEKw2j+V{-@t6&Me4t z5QjpaMlD-bNIam|g=mV`r5shHl<ML2B!B0KIv0Metu^e>V46~Ix8kdZCynw!z2(ZY zUe=igL2#dJ)`wu2s-J=`{)*s|A8h}fl`u1}r|_X+1Dbt!_@s9K&c>F}IG<YImIrdR z?(4^X6y?6PGS>Z-GCXWj6h+RB0xZNyag)D<X>?KvY4Ho2L(+tg8rrtPZUa8W9KNfe zHseNJ0-(kdf|LduNLW1tOXIdt9#9%zY4(S;{F8%Gtl*G=t#+xf-TTeHbL_0H80Y9U z?wJ)R_i5v{rJpSSl;p~G!tssS79;mq^O_(?+Mhh*M+(OT8$iQ-I@s5Y>955<epI(Q zSFE}%(1tK91w~9qO;3AnQ869!iMupVhGqdK-!uNn*(r~gM%?4l3zVIgQDjX1edOMV zHkYmW8LaBkl&?ep_S^6qcYRep^}9SRYoI;*k|-g+7HS0~WjC#H_>v#Aje};g)wn=| zK4bQonnOZ=6LX2dU+@~_IxtJaykrcl2@dmpho`TD`c*k^N&R8j5ddG2V#N7vg;B?o zxmCVt%*y}aWKT}P&tjljzn#Ch?smI+%I0n(+}mJl@w|mU-8;V_Zzt<kVxN~4FPiTf z3dL^3;LBn6*O%z~)7bY=8;n06xCxUHazlef>)5Gtm%ff&qc51H<p9@X{mF++ZKcE~ zu}8&{nB~^DSf!p3y_x%DmI0|!%91%kQ@FGByJ1>+IoIVHsm=8^m0*y%`wFa>kT`Ua z4v1;9O0Fwxm}RTNoP<bfWL;`@zSeqnr&;qKOWk+}$+&ci-^133$vb#gdj!1^O2`@Z zIk)HkEA+Q0bidpZK$#H)84a}kR4XDN#%~~RH2#?AIv0|uKH$cGW6TQ$(RKdi8&E^= z+=*d7p#OAw-|}0<{af!~n|0qmvs7C(q)-O9O2}52kL}x6na0j)G#M=1V&8&vtDoIu z(2qvTu0e)ZJ$w7D&Xt5kT|{jxd4zujt28%6M0GB=Ck=h*lvFDFABB`FxV^6NXfNGu zGK-gupbvNkI<U^lL;QR7jIXNV#g)9E^RSvD?Osgk_Zr`|&@iF=Nkkbd3Ukh-v)tRD z8}O9s{A0PzRi|@Rb@8V8FuhO+?J_c2mDsvp`v8^x-%3=pvMhA5Od_Di1vbk+Ssh=B z4+3k2Iok7t&H)FW*ZSZ!#}0<~MJa|xvTXq6(p7Vj;0^a)VDF}f66(vwEuZpgbs6dH z$Ezqvw6*ynAx~}7UPsWxox%a!^(3Ugzbx~afq0|H@eLwO%Jr@BX9{jL&l+z%PK^P@ zb5j155n7Bq>z;T6Z1)2d=}OmrGHr(zxYEswxXR6r?Qc%%7^@{MbcvB#JO3>$*dVCF z0*F4!LQ}WbdQ`~{67p1*X6BV#MNY@)`e#YSK{cHg-ZhVpO#~hbXwtisQU=hngjyzn z7dQI@!76SeY4fR84C(1uo^aFhdKX;Yn?QGGtISRzlAdz3;+5AuCW4ZIO?C?h<8rJ= zme9)>$#@T=J-{<v)2hBUIx3YU_dYIhDXFu;s9#<l1lTDT5TnQbn(O9NvWrK_!rRm& zedVOz%FGk5WBa)M?NA|rbuT2s(0C_^Rn9!wjpP`uaisv$Bk=iIkh`vU_rOwcYJ{Vq z=Zy+<yi+;<hxU;CRb-M|xBEV4ovBrtCRd<oygnJ^%Ep>2y%29!9cStBKCIRo4@nJs zuRHk~aJ0`EIEgFyvb<Ujug=_o@`1H(1yjcA34dr!S84`vNSog=J1-ThJm%oM1efd# zsn#)>9Tc$<O{0Tb&rh)Bc|q8Fd(X{~m28)j*tF;IQp(=&4xrHPXV_VfvNUxB3^iI6 zdz+6B$1bA3<+1+yT>oLii<@~aiqlqCP@M2U64xJ6?myO5$`seh!(+kZ7k9%o?qx4; z+PGl{6<0$3FV-z7(rdl(6~~oqSDuyUS5gTW_BHgmZ97GteRruwX*M-e;zl01>sBr^ z^{V(^F?(0KXGva4=WF46UzA{Hn&>qx!r>Df0n<Gz55m%UYacbUsmS8&FyLanydwS4 z_q5|~MdW7OD>G-PClwPa#Tb5{jaZsY$Cd-FXZ-UvKZd&YJxC_jyAdf_raMRJPH0tR z-28LtR-ukKWaooXT%c{l5_4K8>8ZCh-H_{9NSQ(p%DoFqRld`Tlk=}N=N1zbbMo`r zx(^TP@><+7vEi$pta+8sHy=V(72~=(c&=4hfnT3EH8fVD=4A@J=hBa|{i9^@AY#WX zwXvqzly5Ks2XJea5pvx5inSCLk5fk0-E8f^1Lws{Fxv<&a(d^|pm%V<l{wD>l&f75 zoxSU|+S(p1n|#t6YblY+j)SMAY)7^`a!JWGpJ`^c=N-jpO%CW2Z#nB-6cb6@!n2H| zk|0$RFj2{;Lkq-RGx!=Kguunu<}{{BB)J3+!nEtDn|&6>P26L5&FfjyuoHQEM$_K3 zwRqWCk6&t`0;4xQ#eCK(7OP}>w4b_|=;K&+_svN&M;OLFlt`*Oec#rgm0Ib9N-%$j zisa?x&}-gzVq4;Q8eWQ(%6N-V{p%HOf1PyN)!J!RdlT<sxGSl?(D@)7^PfuAjXiFA z7z$kS_Kj#z)T|=EwP_QBis9sq;gNykY4xt=X<FRyGKZ+FO=C|7_k)b{irT$3El;z- z*7k3bPeyXLF)WN2{{T9PBv{~(o-@-mcIq9374OAoYY`YN$XfE$T9Nd$+MS|vnv9FQ zo})EdAdMn8;E{@b)w@X^;5zlHMj374-@opjF<tRiX!;1Gm66GONYcv0%s)Eu9YI+p zAdUrn8{->ub)~WD+j>{eejrf<(hi2b?7m*}iTvl{78BXxRaMmHbqPHW6`0axg->|r ze?4<mbDH|vak4)LsP4_JHOnbeS`h)Yg<)y35h8<I@kfp4)K?W{W_40`MwWz%*N8pq z?vL5uOY-!1<Rh*t;hzu2P3%OU;;+8{0B5p4;T(V-c(2Mh-flQWWAu(2(arfD$jkDD zq+yDZY;o&V+b6w$J|9;dMc6Y(PSnwt;-9x*$)-@N>qxG1idAj=Q`JJXAr9T^PV*NO z*)Yq2Oj!9G)Ddo@{IcCRp_gx3m2j&}X9uktlXfWD!=AL=-GwqlV7VPCHIS!KPQ$Sy zWK?Cg)S-iOifcw2G|^~uE#@g&`Oo&B@ao)YEi#UA&3zjTc<)|S@$*hwpAFBEpO(IZ zA+G3V6y&>$l}<B<bbey^s@z-MNIG*|q^-?&UO%_;^*Ptjn&Bh|(!a8>Qs$)=ei@CA zC02%RG@<Kz$M!b*Z;0fE))j&;Dl@eP21@f-5!=l)iyB1lBYo9XB%h$KO2?JWrN?ge zr*8D7O$^qu6q+Z6$5oL^pUBj&XLA%OG?wzDE%#((Ay3fMa*pG3O24f~yESQa`?Cm} z?6Y|-(oZbyKaMJF#+cPS)77y|Wq9$uS##5H#Q~~Wp>AlVwJIis;w+)mNTqV8p&9K- zy1EY>M)PVKN+L76Y4CumGEXgB?9feVCds0BU#{5{sr_k6He!sft~!%&sL5qjEC>zK zlPq`xaXke`DOVrn4@!-jJ*gSH5rQjwz;;k-UL=AGn3iaYxhUL@6xFEfVr1;DbL__g znVRUM@kXB`g}TrzOa%PiKxBM-9MxYHXz=Lw@V%=vmRB(?#09$TJ&kG0*v-pZ7>s?Y zHZ`l_Ek-R{QuA%>7f(`(q6qqAcj!9SOMIk*!R{*UVO&P0ns(Muq^SYA5<1k@`hC^% zvA4FGaJ_uE%VYAUNmidFtntAd?F@?qgoKc(3fSra?@VA+kU<1+LFy~2)$-pDbN~iV z+9t>S^lHg$<Qs}%t2b6RHfpUsys)c%(;^iI>6)$9sTr}9Rk^gg$Y2x6X*xoG<)cPI z{&=d(8^{jTCuqsXYNAFpA^Otwr!;I8Sg8tn9B^rY9Tc>b$qFc<m<vi8n?)g}O07}` z;-Jnc!Ky53nLg@v<52_6I3Ie88eEVyC~9JwT2?CK=%)SJDr_s2nwv^J=pAcwoGDEr z(wYPmxy2zFrOhTZI-CVHPvK9gWuaD{zO>w8pHRy}j%ms{q+eQasVxhPQvU!tRr*rY zwlKvz1azduE)RNvp;D$+sJIm()U!gu)0UYVRLhFRmVtd}*-zV=F;Q}e_L^K&n`qh7 z){BLN3&5rF#XoQ2Xu+u&9?|JW%9@jHD}ff;O`U3OzvncV9s1L_Sc7jI3X%`JKRQMj zq>TK+t8`~Aj_<;^TUl$^ybE)-;3+r<kzNzwyMVJOJuB9HJA5tVibZY@1Xs@E>2txO zf}H)9Av4}K0cIF-aara@VBLVDL%v(PH5;?XIH`QF%*p}Hety%8tk1ZOr5mF>G>X7y z0;k%{a&l?SZ{+tl%}kRn2=7!*w-iiPEMxPkvPgL2nj~UdBRKY|hGr6DoOGquz(^)x zE)I6ojUMa}O&dr+*r{Wea_z@7G=S)QH>x$fs;t~`UWo<T+(NFH$Q^6N{Pwq)5O6bH z*M@cAm{&O-_2T02yw92^sfVp^b)Jc$-C}Qldg^7BWY_=(xeXp`d#O~Z!LF;x8&LE0 z6k$`0Y|e@IMXOtltAKMuNLx7^W}~!-7bBc@sbvdq5y`Js*G4OQ7#hsGLn!N97OLA= z<C9%ih%W+e=D7nPx|0W<de?3q7S!5rOBEyY80C)?G^@KAtr?<7RevhSnM+NT=bH49 z$jQtbm=JiSWgBpM_NklwK)?d1v36`{^R1DU%JV_<WOg+qHlk)JjGR@ijLH`oZ)#=4 zk?F9pC+9tC*J6Ck-w<9Um5GQq&0bflP3KH-c+GSkCDqK*INnGGxf`jQZhHM|=`b{T zBh1eO8C#jz5pD|D>T99!-O;tVRtJ%a<>Mw<1}l3^{nUxZNo-fG%XO*a-p=Q*Cypnz zR90-R&T7@Zsc)}*s^Mle=bG)ulWvFopIYX$?-N{U_sYu0*8tapip%3P<sHv!4~%iL zk?VI>FKsp@=Lhc!xnd$KupEGSu2)L&w0F^}Psz`E>vY=~FJUrT%mek?UoAQnDLY9Y zLkf|ou9?tS+N$kvM;)r`2H3-=rBJhqcw<j7bI(y)Ejp?mPvuxibv81Da!EE#YTK%L zWsd|>#<Alixac^jW@JskIbrApO^0%Y=@UwLKA9BA)tIh01J}J<hBtXWMEQTbYIn7c z1`jNQj;cCVi34Rhqw@e%UF}IUk?A&VCg5c~eQKVy;y7(oh)7e84RIQlyFKIJHsE^- z?xTg3N3O>$O7VupeRETNLg|4y=B{{u!ZT|VAyp)I;;ndZ!!qiVDJXDGd9O~hwU0%F zK>~p%c2QqZLWe4`^Ej+iySCzJx*djt8it5G`03V}t25uYP}>)vjVj!6yqRzt8T;MM zR%R=>1o_7`>Bcrm9t@=3tb*P&)76H;8y|H>N&IU*;$p{h46!^ZWBn>=rhhPlk^a#Y z12kK?Tmjy-Iao<>e6~{>rUzlxooB6^G~6S>9;DJpt0Ilf@}8ALSXkqPDly0%YGoBQ zX%iZb8l$VU@w8KIj&i=>jQ+Ky9P!NlYzJsPHk^v`7Gnf~{Lh=O*1BB>#Rkvs@;aV+ zSD#l1(!37ZSj63?dQH9YaplgTqwac&&DT65Yp6u?Kz1MYdQ>)gy`G@BSurDea4SML zxUo>lnPUDm^!ir=j+UA`<2ycRGs%2KqCJF-=0oO2r|$t=ezD>B?jiGSuvqo>uX^zY zmlmyR@}n{mIt9<?UQwuNGU-=N;jlBxmEel=Yf-W6QLoKo&F6+&S19F(_pQ$l-g&F# z6UR!utw(Qh14$f<yT8j^?w>MS+#RAx7<R@5csPnK+8*T^r)f0C-4->%$a)dq@u_tA zjB4Is$^Pi(vn(%$rSe?uhz^+RTJhgl=?n~IXZ6i^?h?JMdMaIRT!+lKm^{nnLZiK7 z_@iGNyqFjPQ0qQ0j^;KI9x=cb#9wMJEQR{lrG~;v{L(q=R<g89I-7Zsk`K;nE*U(g z8Rs6AH<;2US*jEFh#Yavd+?2wk1kH^y0aUF;9%D6gnKPW?^xP$6<`R;<E?ASAxOXj z70*@lJMjI-q?;7vd(^h`6>O1_jzv|4S=@8M^{M2=yK~9>>z%C*^{E`wZkIT~?@r~h zwB?TgRW`d3$&xaAC#_nBWri~(pDcuME1kzvrY^<QxE400cYg7@=C`~RsRp`LXXKn$ zo!)8>G{mvuwERD-3tOao^P2PV*iUOhOR3R9w=G3;*=C2x)EFL;41-oM>IOKfdVRpw zbo7-@WI^jz+UMm_{6na(%qmBf^1adY>dkW^Q3;6oosA9q@XmSul^DGZ9@0fe=X|&a z8TYAL0e0N4lZ^A;q_etZk<&Tiv%Y9kc5*w?>GOG#lHGe(L?vqxD4Js8MVkQeo`SS( z=4hnLXXX`;aW|7Pw-s_5rER5;IOr>6)y%m~HM;qT=xMOb-f?F8xvcw%g2;tAEIn$_ zlMwDbYLvA$rwvPHcKg76?$p<dIAK-fx>Z6z=chEW%jZYdhRy6x9mxBKnpj(X%gfae zU{-gR<;ZrNws@;Lg~I9jelj-^lU<Y(oRmnCvN1LNP)$1w@m!V5fXoM6<WZ>VUS+{K z>T0Z#a3s!sYwqy$xge3_)R#1hw^v6v?NuhZX2D*xw^J*00A{GIz*#YqUA(=^r0mh% z_)h7WS0|8btkfmlA`-k{b6$Vpd%rD|6J5@!A(GZMQaJ*>Tp#e-KS84&Xj5#jb`_O? zW7etLFpYURH2sC5JDc8_YJi=?<~gq3sPv+ei$f-kUHQfVs}{;+R#Ll2?@|PIB(V8v z&A!ELy?%zYOItD}Q{B*@v52N5kH)1e&4!E<id(i_#0*t<ZpxDw;PmNA(Y1=Rlx}uD z7uBcp5;g??0EK#8y~Gk*s&E|FllXaEZZc2nT|v~IDR(F&3f`SGqjY?JV}?~~d#6`- zm|a6I<o@#1LO{I6`8le3e!i2(vCeq!Q#3J5a*egC3X$x1Ud~YWW?oi#A9C_L)yavD z%~&2iYc}5Tk-WA}-9>D|$#DkI*goR4qO@q^t?o5+SGCNj!2G;*sXkS3LC6B5mvn8! zpOB|VB8Xg*&N~X*PNq+}lc-JRGlR$0vizo2$stBKCahf~&2ZjY@O!lb%7r&h``C7` zn8iM7hp|uHib$y&O(6<{aR-(?D%{slX}09<{ox$eW%r09hjPb(^sa9ERC$<|KQGp^ zr%An8-%krV&2uXv9cxmS{#Fs3)<Z_{5Ey57TAo{>83lO;kX-rL$m7<#qXdtprw?Zp z7_A7}-^_@Efya8UacU*8WF!_G8k%W_?W3hxx3-RL;GVqmRVb-wZOq|mGtVy}YkkZ} z+Pu~c<=5Jokc^CRT?dTj7Bd+0fu1p3iaGNE&P91npDjxtZG&9!Q!_OQ4Y%&{dG$34 zyG?I`I6l>XR`SA$3g)Q!zGs#r8+}D@7`xc|3U8VwPmCw~7M9r~?({YDhl#ZTJ<OiD z>t5yYCi}{>c=P(#&pNb$r+$0a&}FpLq~w1+c#(<y{Aqa@vo`n7T7<t^nqsP?j%ufw zxvT2pv_GGvxn>!BxdE<**6=l`^{!ucsOwi^z7VKR)rD$&#<Zu(&c92zWxI^8t$pA7 zHfkSe&>{r<!?k{Y=r^IR6qAvf`-Apn)fKE!16SodZASPfb+P(S49}W!it3N0=0A3t zSZ(*Gu-yo1gXv$+DEl~ygpX>FHtr27rdF5~?x1XRY88b@!_uQe^Hhh5mO&UBn;q)F zjD@IFjoGUk&f1nti1{69yLYg~48)$4^*cGm0kR|?D&UHNlsjUdB*CeO+nR-a!6vmE zAoAB09A7h4iGXGIsAEE_nx(Nx=u9%XHRYcjuEc&9xh1jkn)MZIDJH&s{ieK1mO31e zh8bXZuX`h)>*MLgE~P0bMss}=J_7Oez>`y)`mwGOcIS?j)p)AtTwTc7?rW2u?^pI_ z3Oux;kHT@X=BXxhzY{;?YLouB$NvDJiq!F!h-T7l^oT6fTinT~!q0Z6_nSGw1N<X7 zJax~tWqeNm0FkCo`r{w|f+;>Cf5*;?{{UdPf16jTc-z?3()G{n4+q`q8k8%kUFmZv zf=SL#&wv3vNCf8xt_4BhzY||;ULYENp*!AMUn9pPG90M+Nyr_#cEwQ9PyAcI5&r<! zSU>bJRlXbl0Lbg6bNo;L0HWHfu|3Ir8>d^{c*54w=WD{UHbV{=s3Z@>im<*l){ejC zEzHV%?V{5sVEM7LZ%=PpkHKaG<Aw9i))GizJ-p6#=i0hCWAP++4<OR?chmtR?P=xt z#l1k?*YK&fgTA_$zY%Vxlf<_c&v4Vh2?jM|otu;r2jl#!np%FXZ+&T~%DRe3mt^jL zH>uBj_Z3-WtfaL!gR(sf#oGMZTzX_SU|ZZtV-b6$`}=vqgZw<_k?U17eL{Z~Xu77K zeJQw>+7oqeG^CbNzj$ZgBlD@eZJ^#>TWOc}>F32Alu^i$^69}li1g>LwNvoaGH9AE zv8mlDgiCI1U`YlHjM&Zxd|-aHTHjMUu3a|^cK+P(Jn-jr&X*^eo~9=2kD=%A6%T?C zTHIc0(yr*V_)CvNBXFbn{#94OT9R1n(MLbcYjzE^%6b)UKb}8Y(D5~|{38Azi%2b- zi;IVzL;k{@srlnHlIk}1k8_opW}a7-&gXJjnDr#}HPd`GZ}_Wi{{Y;R{{TTX$!__5 ztEu>6-|<&lf4L|Af@wu-am!{zz6`ilQ+It~YXCnqt#Yl8pa+vxyj`t9s@}mBp6{_) z!nW|1>cM}D{Q6c7Xw6@cTdO+nAKXc4;!8Q=a~!eTLdwIaBamv``V>Ajn%7viXzinr z<5K4W76UB!^dNp`>r{RrLnY6M?IMW_$tA2RsydQK0<=H2ExZnGv|lberF@-G_1(E~ zuzdll>#3JTW18_!wwks2rMh`qb+Y+3(E*Gg@AW-@D!CrD;%!rF>C1N<5pb~S(K5uI z*iroROx3(S29M%9IHi<HrCi98M{rLK3lWk}u>SxW)$w)4zP=%r#?$Rk+Mx?;6`&}a zF~J*p(WuJ*01%^jEp$ukm>La2=G}$BWY}4hfs!%TpXFAUT5S*E?vXSwqg}MKEK@iK z%K45+2aNmnsD2?wJQ_cTW4N2oxJad0AAbJ;m@<Mh+=IvAQZ|Kkt^7CAzQ&?ipq5wi zN8feabF_EI994BAqPbhaz9hZYHDRRcml9uCUxtm+a$jq0B}$&$fzr9Fd%65KtWF_V zq_~BeC21oL6@kX!4}LhU-vH?|TkDIc-Nz-Zm4dXg%OdR=0|9yOk~pdS6Cl6T_50{! zS#>cCliEhg3EW8}sP0D?`qc=r;Y;row!Lfi$h9k*3yA_uw=p|JQH}}ZU<%IB?;!BU z#4C$@ZPVJ~OGy!r9$PV9eTN6|t6mb9#5$LWE$6zsyh~_hSDo%8WRC!km!2|s827Gk z#r$}$SLdI#%l`nO8f5hoS@8V&Z-}lmrBc!?-dtn*z@L=<Ad1xZg>tapT4@lm@-)a6 z53A!Wf0yN5Rhq-Ae`R>ObCG9i{{U<M0BUIXPsHaxfUhvSxO>ZqXOQlaS1!c&B;?Qq zdMRlr5K&9`QG-AUMJ^2`0}6d7@}ucUp}^C_RCKFBM7yZnQRbbxq^pk)MKl^ISgVZ1 z6s<|pti%sWZ96njAfagK(v(ofhXYSudsKAwIH)ZWgHBptsTQG{A;43;sjJqc#!W*k z7t)<ae`;J-V@N1ov{RR!C@#X&@M)lRsUjY=1rAj?saBh|o~!T8Wc4i)qZ*J3g>l<8 zBIdJY4+~BRXhZ8#f;(|pwo*us%jrhm)i2hQidQPb0{YRB_|wXR)YDjf4Hpo`UjDSk zsT)1{rW&M6BYt}EO<uVERUusU=9#pPm1u)QO}a45r=@yVhxIQq-A3WZIIk#2A%X5I zrO`EGZt4qTHO*F^G3Vkbx2#X0yc^;K^1?Kj_04(}zmssHM34u^W7fWQ(e-~VgQNTP zuJ=drTPR$~j@;M9<Fe<?%@lf=EOLtEp68|9MEJ=$9-^r<B~EjZk6LDv;t1}c2*e-8 zv?Pri=8UP&YWe3E2WEW?WTv^1ONM0}k6L@eo?h-j&J9cD1KS7C^r)nTxdi?ct~M%S zSnxPB&n!aRoQ{;}muckiDJEdd0Oh@Et#U{w8+p&trnS0gRA8Ldd4phaO^J$v3D2cI zRy&=ShrCTCz0!imlj~m5q3coJS)pT-Up7Z4moPhtJ%ZP%csEg#?6`K?J5+sNvC$gM zXwO`>1I*nS%J-@o#qy@*&eQK)=lmv-SjD%@85|yKH&XGHwboRy`McJUp*PU&r&2qz zmc2QeOb@&D&0|8#3uK%MvpS{G%yR4p-k92a;YaV4g?bQ=DzHjdC7R`K6a_!dtEG;9 zVo3+^t8l|4aPcAoRVFXE@0&kL-59acMk5&Ao;nJx6f;~)fHo+pB))>xcQLGePsM2n zI~aQrT`;3L{3yb8Aq94H7Zcm*u#!kEiu2DB_>j!)wfOCdsjPUaTh(O^isjxzB!_Xy zuWt>5x4kpR#A6fE18$~inTb66)i(LihQSpr#ANa*s-tKf{cGKdva#VxT-ue@gluuw zwQJbM-eNKS9&0yh@5vbzwQnM=t4Kx(8RyceyAWB`W;YglbDUQx&gNiw=~rXayvvfO zlsr^d7XJWe$;Jb7%|W8jZN1CJnG8jB9vksx&68nWzgpv?Vybd0OHEzQ0P9?JXu_w& zj>>f<9glMG-;WH|*pzPCd)HSNi>$6AT&nJ`6VS`X<$Y_Ww^s810J>|#tC!QhhqF%? zJ8F7Vej>4CZ<TZJS-0LMv_(4r4VvMaNjH!gzXMffXKWLi=U5nA-|JF43A}0Ym5gK4 z9qShBU!LWNEOGU$L?1UbWuhiLjFH<sS8OoQheHWsB`&3F=^o*^VtJ|bJt^+55q6%n z6cL#w>Bmf0sCXAeK)!P*Aal<(-3YCZI<-cVX1<$g4vVM8qCeiZN|HG|=?DwBAG}X< zR_~RY<^UY<qtI2IF5WB*t~S@91#J%sqj$LXx`x)wZdDFP0~LcU;)Xj$N$bUL-&m#7 z7smsDDuUQUZyS8MKDDPdr!%>QH}4pdxW_wctnqoVr~@RPmAGxx$VmVL#ww#mvC0q( zW16I9_A^@49H|)F)0&~FTZUHSC!o!5&2AZ)fW`-{a~hm26ot#N+;|nDIpwj5ac?Y* zhE)Tn(xZk!Zly=lnpq~7%x<|Ib5)vO;$eWMx>7i1%UWKccV{tSyBXrUO+UuB5UQCQ z0Y)+FUUV<a_W&6H8RrJHB)L+cBLVJv)J}wIZh{z@)7hS@r})y|96N<D$Z+56n$7Wc zt!E@VglUXqA6noR{{U)~m9~Sy{{R}5?>^I~$!-fvEPQ9$xN2q4lCkL1%_j$Qo7B8T zr`p`R7*!WPFvW8oBJq8#q-IM*QZdvD$MK@cZz&`&9T<C83fC^_HM<hWs{JdC<y88f z)H7+?=(m0GB6X1Max>{t>0c2iX)!E?vVCjLbu@Tx7`Ghsrd!+)z>X>Z0A|tUw<*;e zeMawd-E8lo)s#ydo?M?=Y|=>-nUzTY0BL$xmgzeDwyd~w^v!nKUy7r+MOnUKUPVkK zsqL}rQpHB5`<)Wq4ZINf?kXl@=5%46r)?1n8<$oO<>&jgckJ=03NG>oPHU3Z(#KBy zOL}aI%m!Qj`K_Cn{{VKZ17q^6TUb^(IJ(c{TmJxOM~w?i&OHTkRa%~w9j;OcL5+!H zjPzAGqUJZ9fCI}Or>$*TX=X<W3{3gxaaUWwdcEX<Rt5v<T+HseiN#6e*qoLw{due{ zLsWU23V0Rh*Ix>Ci-`jLo%8<br~d%LkJTkmMY{vjp{*d`w<c444=hWvR0CHnSe6W} zitaTJgBrD}^K9cE?A0q@hFY4o#ezUPowVgBG!T<!&w~6&_KdN+5T}atZ!+5MHJKa+ zJ$bJ>w(vfwYNQBX>$bOaod;EkLKx)8KZSgDW0d=6?I~`1n0#V_<&n_bTQo`-jtSuA zn+gyCJdT;|TlzkkJkW@)A|<+WMfZhfwN`XeRQ~`EYWWJdI@ENWPi7VA&*5f7a+!fc z(yQddHWcl_rQI#GrA%d8+*Ni~Gj1mt=dE(6zNbcpoR^96mccmYsmU|>q^l4ORr3b? zmg(<Nz3^L&qmXM)cv>6jICYOFoYst&OXZ+KIO|-wxI2)8z^lJ#WmMdF&q|(a9dzS# zYb>hj26IxZq8QsP$f^;kkwIPnJf8GVaUHyFWp9`tTDZx{@}k^qYC$4ft4}L(M-|8T zo5bF8lnv}Ttj`g6!~|&3fXBUXw_4G-n<c+m`%I@VZ7P#TlZdRo6mGTIW+jekzuH|_ zJXQqSph)`U)_j_&3RoY;zREODF6TjUakQMB%H1n2;`d{Gr=LpBU0}(KvB!FbN!C{c z93NV4n?~?EUkqwnt`SM(@q=EVmj>fa3_7UC72#Sv+edbd*c$df4C)ItxQUKKEo+B- zvvKZzgO^X*;cwO~wF|n&H*=bj&9NsV0;Pr(G8BF>+L^S+Fi<{R^InF#o|}?)ME5g> z!XU_^7+DB&kSg?ct2BAz-jZ2SHh?qED{fc2Ien&_u`@299%w2!KGZBbSy_hw)%mtc z>NXSWv{ktD(=v<>JJV6SAGT3eW!)TxodS%C=*6zoY>qRU%+O$l2~#W!XQgy^Fov6K zjfEqH726B7W9BhcSG2M-tn5UR92H-By&PuJLAm(#G|#ducq*qE^`yADUAXdd&#h_5 zt*SVsCpK!saFR+0HPBeyBE^G><73N5oGSWY){Tsf8DE^|rzVI~S3K(U6p^~xgj<gE z#aGldSYWl@0ICx--gw@-qdn^*#5YMaB@}HSbQGsg-DY%f%5zA`)jVagQmAoQ8iu(% zt+`t{_o$msHxnHE$FQrG+8m77aj`pBh4p7Admm*AczOvtYGQq^S-$u=saP4~TpSwS zyU}2Ua?*tq$n0&lhw}zUUTbBCYeS>!FlzBeO!h4tJI^B(6i}9r3Z}X#E$!rw3fcT= zi=$5}<{&ZcRrPn#60s`QmWBk@I}{ejxUA-yMVdXWfza1b+7;6=5_HcQr;iM*Y^-~B z%{7H)vBgu0_nprv@ujJj;dcz@o|VU4{^vO4SF!kyL5kwwW>o_{GhC(TgkxrJE=3^r z&TE#g7hMmpz-AQVPAQxX*2{|?PB`ya5XRBow$gT}#&ceYec^dyw`B{QbU3bF{{TmO zOLsWKw^Ll+#&P$bL+S9?s&Y+5?s)gatFJS1XDmJI#C0gyq&!!;c*n!{7jrzIWLKE# z{vVWQ2toQ+ub0+@Rjz+MamEJ|h{ejUE{6pqWqQ;hMt$pA^G}i)2xV?PYd&bo@CVJ_ zzMe8oABR?>DsPpMDFL!ShO13+x$0|&@?+XM)^6{cHM~{MYuM;Cd&3;6bB=54f7zGC z3l5<KEdKy_f!7uBt(@CkaroD<{2TE@X<Fs07b9zo^Is#xSRbw6=NoiBzaYi^UlktA z{Y0^lTv@3HJX3b!usj8=N2_SI@+)rKqPj^2+~&WKt5bAp$`a^)uP=6NK_|<BO;Sg- zDmK~~vseffzI>XNNdQng)EmBPomE(5o@p{#7&F$Nzlug5DWp^w;(#WPZrqwibzy<l zq1?kFn7Q4}D-xhctU2bIpX)Q)k$z^Wyo}=%_A5j`hFY&Az%~U*BN*1J#~+y{Xo~76 zrMo7X)h(Hi99P8u0JT?$1;x|EvVGrr`tQctpwaYc-*zy$ug)KhUMhWCSh?Q$8;%8j zqrkWaUl!~1N12*dSbP+p^ByUyOj=hY=O(fwCnmISTg;H3de4!0&3{r-T&Vn3wz6S$ zc|G*LZOqb7CNaKOEO_@d9o6Lbn+)?wIYbemk;`pS(MEa?YDN_kS5i1$gsXXR9lVz5 zJc$IjFA}*5#B|8$aY=1;J)FxmywX83{n;a8tT@L6R5YITL>*6nbqjl4a%Q@nZRMH? zBZBHqk;>S^6Z!sh=J<Q9w9LV6<clPmk#!!!{?<v)>0G91Xc5<V*HVH=bge!sq`sEM z5|Z5~A=r`fgWL>$walw=)}aQMaHx8gv_`BN=AmzJw-Mi5B+8;OCzx}zbY8tZx>I!x zV)s^%J>Ar|ETaR=VsZ5JtkC%4q*fG)Ry6btJnH(@rKatINdRWgMI4j)16Mq2tBqsC zmvXD`g&WF@gORm($oib0#;|u#X!0Lhj;U>LZY*XKTTLarqk$w&Rfpm#y)NpI6!oN} z`cXiOO{!j-q`5b9{h<cbo6K$MI$#{+Re5B2q-i8#?#C?5a!EbSGu+YEm=no+aWoOZ zB=S5FXUmP8l}z=(?N*b-+O$@GWlcuqZSk~5B{&P{JqNXBpRFNkXj&3Wbu_TW6U!sT z7JRg3B~vFS1GY^$HA}cw6^`y?5E9V^kdG{$rFr8%)me$A<kgVP4NJs&o~;_id3`;^ zV~~#LAC*zIx|+^)nh9PBQ<ai7D#PeSMrpj`inKwcsCbi9)Y?C_U))XQFl5~!!m#K^ zzrAP8G?x=Rvb#wuoy_h@EKgETb4@v<phsnSIne$d+1V_)pHrCJx~qNIzyJb0$RC%r zakNoD35qfKQqe#K6j4A06jQJ$D#K`}ZKG`gVYE}RMkp9k(M!^#08vXt1p(%pMHJBt zM(IM)MKVFUQjeC3C>j@aIcTD!v^`JFQZF=7S+dbOu5(Tt4wO+?vsJjbr!5pxG!~YM zDp(IgQjWAyQ!R@m0+dljVl+y;fl?@<ik49CN|8qtQCTsq#~NH>iYiS5y%?g30Bdxn z?FNb{6Bt&LZ4_3hh9UWRrH)2iVB(4?naJ4Fb!p;ZhU4p9#)qp*G+1xvMHR_XDWl4* z6tzcRqU$rmBH-j7Q(lLo>eDve+~$fa<?+<vd)V}_H74Dzb=GBW7Yw5~&gzFzkL<ju z$n>I$`B%C1QPw7NPmVVAsG3FH_j-HLMKnl}UTzzFwfuRhSqn0p<LN~esshw%mg|t4 zkG)y9@ion!Ry6~hb)t&&F!4`wo<?4!;!CEPvU9tyHA!`ghGN@}LG_}F`nq)C%dyER z$vqjT4~Z_KRKerxTDHC?x{-PMb)t&ObfMVVHD}zKUl80c{{XJD?=|a{1cUm~MMNn< z^eR;+ZOohPYT`)2C%z9giFJ7-jmhst73$K2RCGt1T5@}`w>T$1g)zG3iYu$B!bnH% zzO_*2Cz>d&R>X8HM+jsjnv+nN+t~cRn4*eO98OZ!W_!%%9M@4UE}~Uo+KMX~Zdnbz znsg^3wJmKD84-mPRuXLKhR0u^r<pJ&x^Zf##AkviqPS`{cG4VdQDn$9Uh>X0T#hqE z6%jXOTYGhO#%oSn6i7JkGes0jatih~h}VhruVK<G;<nM$sO5+hQC&3mI58U+8rde4 zE-)}E>~?8y3vE59qPtP$NT(|9QG>UNt8r)hz&D<mqKaKedl@%bj%}du4H7~ZYaUKB znkcQ7$1^H37~^6OB-S0n8JO?+f}RBwR<YdWsAk`)M5L;Wn!@sY#vq<L^rDLFM+4lB z3wYvkLNDb_Z<<ZrFgj61XpU#No>uY+Jet?iVIuhk;fWKTD59+xv(3IF!oGam4ha?I zDu2>qf2hS2R6Wm1oA*v*#fk;d0Aji5n5m+Q$)3e8g%|B)EXpf(%4Uyf28t_=X&!|( z&8uBPQT$y!>rxx3TMfL5D6b~0S7XwIo%c4hxgKkUR&sORy`#Xs8G}+WEUs~oI#ES< zIHjrW;Ux8E)1DIeU!&UELpIIrv>rutmzMT+B|=%oa5$oh%a$oCAe7}Nt0RtRB$2<- zV;e`MF?Cf*FfC%hK9o^eChjhWPo(MATFhzZTF3Jac&T+S1ZgnD%$CR-9dSh!>PDO# zF44m3%{>|B-XhW9vy}O0qw2N7-|8}2d4e@Tj-M?QSD8{NOGDP9tZvMkUlm?QC^$ks zmDuQBAZ=Ylb6ck!#S~X2BAg_(M@<>ZGSQkEmxgR^qh~P%EGy1DL7_!wafscp4@^-- zd_FpjHL^ah2U2f#a#u)JbMtqq%%x-}IW$pUK6{ZgE%M5_J?m~%Rfjmv(Zv*3G?Hg^ z6Bkt1r?iQdFaY}30jqeT_Gy_*U}qg@qQ1{4!_tzwj;9_ba$7T#y40qgL%FlfK-UZy z(M5gSB9ciX#(KR)Ng7o<j(Mb!zHOZa6jw?y>QlON7a-Je+&BZ8D56^(RL#vc=&U_C z&sy|f3Es)I92^xiQC@7HER~PC$y?{;>0{EPRhr#qBM(TCi-q6!Pqh?RxVA^3waFs7 zXxWes1q@8=yzS?;6jfgPlO&S5Itv{-Hi(jYRa>c=HX%MxJ5fb+y(4saRNIu_F{R<} z^r@3}Fb}14`iglhn@%{QitDHFT=Fr0$4H7cD!iQ3H@OIKam5r>%VP-cEsNy>k&%j$ z8JVX8prVQpq_t-M0Nu0Pc{r|G>fLW9W<M!jep)D^r$d_y_L*8VMREcF-`=Qh18^DH zhvh{TlRbs;BO>L5&xT)awPj(5!;dTuD5A1kos~V<s}kA69&%6`(~XQOL?_GrXri}{ zjN_lZxi03DK56q0<x<IQ6E6LjIQ626(BzhlSo4n<Bx@;RnIQH!u4XHEpP+Tf{{0kJ zl~>|E;|AZci5<n{kV=t{nK99;E5s4Udm93qFgqG3tf%m^-k_9fMWcY$ED=<w>GZBE zRnTplB#+XHE5nz&Jr7?SN)@TzqPgcjD$p&XR&^LB+Pvdbvs+!|PIE;S^%;FhJ0{QO zek#Jyr#VUyNu0gY7GqU$+KMacW3l->_a}w0MReXB)FrjLjnLqOMHR`2N>FK?m}xl9 zEgyRR%^oqmzp#!8PUQdr&3!IUnF^EEiYxgeim5`LVJ<~&Pu%D?EHybxat*{#q?64Q zSI9G@d8a0GMHQJ3V3Cdpq828KDfAA2$C^m~W+2f;A#^5X+sLI^isp(b5xE;NldVa# zMIPbSiYfL$`Xj*q0BElnUFmu}(L|#Ry>nlmJ}%UyzPy#B>P-|^^tS@hryMGjR;R~t zG~}fiC!xmNADXL?#S~ZT@!0&*rsNWJrWMT;R_No9#-`$mD?=tDQc*<$6=>Z>6ab*p zgHc5c2P<`_?xKo@Sd_b{qM)E!0pQU^P=L}=MKO)tNktSA#Py~gD59)^DJY_;62{R* y6bL9@Xrh1=@kvD#0INdLMFT>La2cYCl7y#XiYNf1k4h+@0*WZ00*WZ05C7SWXX~s0 literal 0 HcmV?d00001 diff --git a/img/neorv32_ocd_complex.png b/img/neorv32_ocd_complex.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5459a7567750fbd7f8c9c91aa6828fce7c5be4 GIT binary patch literal 31569 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 G=zjpwn7pR| literal 0 HcmV?d00001 diff --git a/img/neorv32_processor.png b/img/neorv32_processor.png new file mode 100644 index 0000000000000000000000000000000000000000..c3ee930c2d82735647432c18a5812b1a03fe1ac5 GIT binary patch literal 363414 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 literal 0 HcmV?d00001 diff --git a/img/neorv32_test_setup.png b/img/neorv32_test_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..1ce72dc7f1790a4efa088b581c49c69a262ade71 GIT binary patch literal 39522 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%0A2N;yqSPg6(wCB?96UfVJ8wkGz#{nHM}ph zib`G>q$rq@*xTZC!i2=S;eNX_LoQoL=nLaIW><z3+yQP=ZLEWcUs3RMf!%A1As*JC zw67Xe=Z=ow0d@Ddk?{R-b9X|(33iwyt>y=420v%tt1*YxRcJ}8DasaEt70J=Vq~f2 zRVyL4_)aH$n*W?_5aG*Kq7~ycWeS>cb@Gq#hNbkAOLkl%PCq;Pat!xpI5!~nN*}d` z;Ct@JGq-YkK{?~;UtK6h;Atc9<?WXpOJl^B$9rY;UGH4XZPyGKDQ<RRbmU=1VbRPt z-SY~YZ7aeG7|7L24I0hT^R}oyTIWrJMLjah_am{SDa&KL?faKq_+%GFH>#e423o;Q zJhNfoWcw++`cx=6OgRMG)K%I{E=xUlK0<$f;mVtKYPyXOR1$9FwiR?O(_KpL#|e{q zmJ)Kmy*Tb<<1_q)E<Q!rV6Of~LK5hEe=f*cG&8Ij?2T_sF@`9Q^v0|9B3FG>DVq^l zR6BuvKlM~hIu4sM{rhdJ^@v}&VXxdII2lccN|Qrj*m2vg1`Zk`yt`Ksx)y0uDa8Au zWkiz>$@*lmX@Zpr=IL0d$B#72<ASR?5-TnB-KAO0hg_=Nnrh&RjyR-d=tNs290!`` zU2@xdU1-g%dw`}B>(gGF{YS}%4@@OVv&(&nN1lKED`2qu&c=E854kGZ_yzjtduV|a zp*BP9Ij&IzzHt(J+KpT#;~c|sAvMC5Z`NkUUoN5ftS?sxjA<od6Sv++WH5y56X_>e zaD}65!RmNw!Xhki6>a#;e&!~MVFh-vN*nU^!SxM&8+k{voc`08u|13-KQCV;!=OgL z+=G*qG!s3L@R!eo^ST@~<3XP}G{ugS@ElPnPlUhC_F6FXNwy*6aR$=LPdJa7A{P%I zpTG@y-I}REUl{-1gAT4U!Lt98?@gf>EXtV6l&Pi@J7D;mtZlB(xVACw=f#bgK{Ce& z)L^zNW@8-{<Jzcv=jSVhfgMx}UX+tjffxB(;S(bHg@}><=rmQYMyZ`iZ|@fhP_Zmz zb<kRl&g$E*hl!FWiaMV6C)b3!zfOdx8SZ>p=2s<D)|oPtk;0HSWI2wAnP{rNH<yr& zC^^g9!Q?V*MG8R!ji|p%bWA{5&4f*S6HI5V<gwAC5^UIGjid1$emH<Mdap35`VQj@ zuAV{sEL3l?CP8W?rW5Qom04^^3#VX|im7K%=XRP*ZvNlaqKi629(N7aQCQBf5vRJZ znVj*H+l$A^=JP-%)`Og2si96C<_@|8u3^`7o~p%?wTcK^^TIhDr6ybpqWJ*!4F3K% z`?=a~$Y|Z0Srem}T5QIX<GP^&4^}i1Mc4#i#)8BA?~iD10p-2vCkvlu?#Qn#x>Tcx zNMqXr7o&}uYC-B`-A}m4F7=ARtaPd4;o*dA1FpKp!ipKk!I1Jq{gAaH1NtdzY&+@F zL!OaL1QxJmbHRE>ahI_J0|JxoWp#Q~<*s5#?f&kFokb}0yXmGYiHwQG?>&Wh|8_)) z&4hWWeK0T7AYUrW`En!cEv>}K#04f>sB!QOC_;%%s98c4;27OmaAxoT;2Rs{*UIlB zdjx;^JF?M-j6NiIo{qXsm6UV`^UR=RDwz*mDHd0d^8CWM0!&aMEnyZ16g{;P*V>Vg zycQ)4$<#^=>q+A$FD{fquE{G1#o}4!3vq!jfkY6VoIax!Y2SXwP(y7}i?L?d-N-9$ za|;wnUb@aWY(CzZOGYD#R{Vl(Wcjoy{GW&y3EN!O3gBjkCBnwf)?xhzB+Mnnsv>Bd z0Fv5@lMUz;T=IKEFBQDW4-hlg=mDEKSL*#o(~F(XkzUW{2<E&3sCWX2hP{vqWk7l_ z%%L+wU|O3};xz(1OIeaJ(}kS#(KLy2pr44jcecsuxMaoWv9(@RfU3&y?K3g!Q{MP4 zoxRx=1==X&k2P`7a<Y|i>-m;h$u;S<_?eqA)F}QedAWinK^T}}-^=ZnK0@=%49$;e zSEnyuCiXI4pnzO_0Qi@I3@e`V6H5xlBf|35ujXctPmzpae<<)pXXod`7mjrIh4;By zrxkuEsb`t~rUx|7e~gCUNn|7a8VSVGW}5QL!M-U@{oKfU7qhHS2ro)cIaJYR=kkb6 z7g+8VmhKvh0`;1i@NWJnTgTt%*i*s8Kf;$el%|FeIqTc+b`_lEWeolPv&pcAl18|U zdyUXAv2Z8-U<Fy+i-7@lDms?d#OR+J*>{4$(%4KlU#vc4-W<y0<&pQuyyM?}p#jp5 zCEGLUo(}xf3^yk4lFpFCLpLI|eaWlqh3O9%#_K?JofQ8pap}&0k00@I+;1eZOhVFB zartcRp9M=T6{(j!W?Xs;-YN8t@v#VJKiBD@QRbWiW2*7SL4|2v@{3xNLqNdWbmkyz zZ|u)2`hFSdq4Zd6A+>A#>%i0g2F!5jXEn*~<II0vpLYiYw2HdDTHI=qKw2R9AY9tS z1hsEphPock%roFN;X>UlOloedo}j*d8~(Fu?6io^@VFc`7M~Rkhk=DTX9jxNU(IRG zQcx&oh!UwbWH5E0SIwzTpPyzO5956NLd(8XpdKt$=&=v=ws11@z?^^9Ukj6FIrB&I z4oc5MmKtnHMV@>9^?mQ*f7#L=K5Xx50TbuiY248;d6{P8NSS3oLrjX4$qGF@|E;>d zIaUyfj`680eU-{&CkoFjrl+mxn516Ml$$9o^+nOW{_wQ|$)smXW*%-LNj?LkgLm_# zOl@~awlc~V1a#im2p9-y<qQ?4A8oO$!)D5oWnk4;;q6U;Tkf^5U#e}0y2fqhONqI` zN_HXMHHyfb32Q~^yK&LHatU-qh_l^yq*%JjCOSSadjk#s6(_GdfvuK^`OLb$OM6lD zrzsRK*r)KZn2(A&ybH<_RVkV#UDs}GaPzB=Q6G7C9XdCsymr0$_h5mJG9DAJTVIjx z;-?&0iq4f@7XjnE)GHzPf!k%}Clak%vRdJ%7yZ9_bmK-Hk=s$ZZ1X;wt2OX|GkLoy zug1j!B-cqb--Mb3>SPZ5t;=taRtp7<t*Iz8-?j@iTG-~RGP|2M3p^la!wexlffh^a zW)`0`_1KJVu!v-k^tg;0&dtHu^Z1e(D_%|88QWg*3zWFW?+`27vZ#-6G@15g7rEMh zACc3aI|Hjm30k0ZRu<X4Yd<|*?YqF;foMEU<_1!<1!1CXuUChLiDyd!gm`F(ND?+_ z=>25@`5%6=fWPzz={jsH<hoN8Wl|)hylg=Q<ZI_GUi2RSjECN=VCRZebbeOI$Q?7> zQ{H@gQ<nGh&5j^R?Q#_B>zL#s*iSZsj=J_TAO#B$dr7DmY70W*lI?g#yT?HTAO?<` zUvn2?o~jU;@$M$E`Ir`lOe`Wi%>*UE_#ZL-1wvg`r2RfkU!kHsE89w!po`f0`TcfU z7QPykPrYj;iSK07`+~Uh6xmthQAk*bv5L&YjcG5a{-%B{myx8$<*W)|X>z?hl)A~o zFr<|O)gsuS^EvIho}BXrxVQjvK=vIiW5hq40Q(d9)cFTIW(1m%%OJ>usQuPRR4yO+ zHEk6KEB{+L#O0~}6ohTrF=<m0l8YCZ5($agRz}<P+EhL9$H2+!e)YUTnwJjMzvfE8 z>%g_6thG<?USb9uq5qqLWr0!uSZK2|#VhqQJ%3a%PtP`?5)YZ<x7<|(UnbH6OR<gK zDrGfp;Ej$V{=x&?Vr;#*R&$W|+Yc1j_GbTndCf(7Z^<9On%}R)v6cSyY|kWAEW{0j z{m0Pb!xO>KR$>SYEzNK_RS~EQ#BTxYP)hGUATc*lB!Tb?yy7?+h%`k`{_v=Z6q@ct z<BLRFLS>GkWy@b496vskR344MNa1l9>2GY9T}m($5``H?MoF;!p*_1;&pv1Tz?t13 z+Pv?7XV9r^FD!M(B%~2w_w)QwYNF<A3I$aBf)5Vj#JsKxlUXb~;0)+p(*lqyvw};~ zh6h4}rkn(Dar&R4VLH01ckvpZW5#V-mYZSsvs+jr%8Vyew(7SqH5Ci218JPtmGK_G zjdhB)7awgR1{`i|7`}CPi|Io(YlDC5NY0;Hj$u^}p-$iOg>gucKpib-`U<ymJAd#F z!qBSSFX|CG`#dwPN>2{5U>b>PU&(m#HF6X>T0Fgwpk)LVtd&S$2>$c6j^TN)k~5w@ z*A@06_IT)@X-f|%xQdSFtLmy=>qhgq$%Lw2FG<h4kVgFBE!2RrvFA6y1-h~()Bq#8 z;}<P=;0aBky@8$#cK$pZ|2NX~m%JD}*~99zNS2&Dbg`0$@w-cCDGkt#rQj!Byfvn+ z+H-TKzhS_l<aHg|oK&vIr5lrV_c?-{m004`Vo|N{XY+bS=B;IyInQcGzR5}zSxx@y z5oY`>o*DS|J+>xE$ms*%zPN~7>7)9b-^~c)6v!WeR4NfzbcQu<7HJQ;T9d?~VdNhF zXv7kkffHTLBs1fqiU@-uQM_P*p)b4dQ@5&OD;k2^^8|hwL6jpG`8%W`4P4{LM;99| z5!%3;EXPjfHi+VXJoYqX=2^wjGW*^vFOV%20mt0L@GF&%=AaIWFkB?fF2%+h*opU9 zY_7z`?y;7?jd$Fq$YfWTy^+)cmP1n+tR}ihE0MR7vJQpMS#o;MRH|jjgRRFs`1vs> zWSS2+OFe9c=M$M^+sC|FyIbk4@YLHZBj;?Z=4`)a-jG&E0BmiHHZ~g^O`#OeqwV)R z#!|4j#`LY*U*S2WV8`^q=A8Q<0te~}$6}Ph*hP~%>egMQCFSz4a|Ptswn?7rCu*^+ zWj<^Fp{ec5x~DF9=XQKJzp)9?KK(xa3xr~x0M=C0phks~j-uO=f2P@23;TNuQ-k>j z{hwCTldV|DsWVPUuyd+a(ek=ZCr-r}Hayb<x~N6=KMHr-`n(hj2O`E}i^cpuw1IH3 z)s>I)XSL3K)B($XZwTg@Ecc`^V{H^qGfrVrcNFg?h4X1%S7Me-B=3M%J|+&?KqiT> za$x8?>esRlp+nLi5`zL~5Wt3y#$!KrZ=;bajU^Z|C7BsFmUInS6l{H-8XY?+y>b5^ z*SuWC2S87P8q5P&xA&e4k1<HF6V-6axA9jpa0xOqhenkMxXk}LX_M(FG*!zso?hn` zH8MXQOJn3zyEq7?3FP!+1|>-9I%P8-Q0Ju5TIsD?5dy)PnEgS?b4+}LPrC1)fGqLs z2wR_(2Ih??g+u`qtmf?&lCPuZwM+Brl{P<L2p+dGMTn-jRBFA1X1E1Pe#rTSu7+bA z_@#jI&l#R@c<+Ru6Yk*m_qp9@f#P1V%26<ro{<%2*0)Fmxi@_@N+R0PEl`n-eAfhF z^+qk(0mE_Xt=t5Ih*hu=N`Lv5F^P8Py~ICPY7&1icfLy)>&UeT0MKb11w`?@MpGXX z<aex_>-l4Z#w%L2EEa^c6iqpM;<>F#U8LHvaA>&Gy=qXmqShiwZ?Af-2hk+Ql3@~j z&@qBSIepK>Ztr^T#kyPZ3`pbfa0EP4kV5rSaMDJjIO0@V)<br~NCW-5dR+!8;9hk* zzDt$j@RBt#)WB!_EMH(MZ2uwbbBn)daeWyOjf?2kT_h}dGqY%0gXfnUb4HesIQ#OI zWZR}Po*=iqh*`;(Su6iXuhvw8EI1P(E20xU*k;P~&s~%;2k<ug4`mwH3IWTu=hN1h zjg+MfHic9cqI}QAUS7Sv{z!=Bv=N8z608(P8DW7Z#kPx`a`l&^jnUnPo$aW-il|)K z-%sL=tu^>5$_wH@W3vzf0AIg*y_-htsTWY(00jIsD(s`*>a8%A=zsP}<ZNfP>ak5k z;QIF2H?9cFoB7l_6cc<ULnd^j42R#job+AY^PWf=PY(VWG`t`Z!l0f8eQmHWwc^aE ze#|h4@T$#>@PE!SYd;*^mLafS=8-`j3Y)HmV#D5oOH@XYLUQ_~>;&su{9`EG*>dV? zx9*FPHL#WJb!dTUWesST7w8x>>4)<E{b+%}ey^mb3RPmQte*77y&hJHEn{>7r>_Ey zzAeXno0OxVl{clP)MLuUwDRb<qyfe>wY4|ZF2BqNDN0OvmHd(Z_sUIoxlI#EJgn8< zcM2H4@eU8@6(u7u#oTa*&nW`%k}}n(HDsFjGBQhfMSsSpI{!wM)sfAO9?HH)&ZUxX zO4UQZO0(8d8?{}hx5s{ZY(lS)+ZTav_dO~`ga7TMo-N=5BPlVtca)TjpGN}EyW9JI zc!yG!VT{~4edeyK6J5*ywuMZeNA9u#!VoDMM`c^F^Fa4X!jDdvaI^=Te5Hk428|Of z)GT<Zw&#_ky<pmVF8rM0v83qw_da)S`pyF23H1NK`NP3QFPKVa$}i1nht2b<HA%!N zb%Afi6WIOZB6*WLK=vqJ$wG8)K4|0*PllQx+sPB1A~5e|y{jcPM@DeiCHGO_qZFF> z4XUYAcp4J(3qqrCWuBh3NLyXpeC*AbW1ZbTKrApbH2iK~Ed&4asR=W17MFo2MtS(i z8^In}D@k}Xu>N=1*M^<T<H?uZH$8cips)R-7urq98s!J-ru@-CJCP(Z+B(^QRwsU` z$p3XW<r@EhYiEkm)uQuuxvz>_dre9X9nM?h_sC}pEn;y6-B?nr<+X7K#Z!EM7~OD) zsWDg@o&pQ{O4*1&PX~gnQTjw(jxf?6SfACe?pA&2PM7m*xc2z2T1p4Nm{!TYp>!@L z1<-nnH`z@WjpKa5(zDhPOf&IZX%o`KKzldFj=gL)4<u~L1Zst&{uhB;K+0TI;_{*6 z%G3V1(herMq0@?#*$>Sr^sam_PV<r3ioBEYXvMsj{(ySI*0}L-d{1B5@L))?C-!hJ z7J!~!0_O}hf`nz*)nkMNoRODgOR|2P9$(PzWqj;M{6sZ3iCzg+S_x|R_rILI-d&JG z886g#2y1_jTTSQ=sx3<pfBZox!{sG~UUforp?~ln@z%8}9Fe(dSuxq*k8gDen>A6H z!NS~!z@mxsXS!B%y^fWehcDL7buosIXTV>ozze2_syKbDHO0<nol~zDJq&MGbB9<q z0jPs;Hx}GKy6=p_YYQt)qu%-9z2<+S5NBWKevx#<rXVf0CURiE=@mVQIkxrPf5sj5 zq#%FL8N%en;rw~{wZF-zADu0zU3=Pa=n97*F4my6Xl`S>s+8<BU6`$1P2H}XAYg*W zrgH0^oJW!-IuN**3|qfxm~k!BRPT4jTfWSte!{K@@zp_D`s<3Pc76SWKGI&!pEy9J z?LEWqxUBj0ZcjsJ35pe&HB^}kIPZ`RmSJIP<dGeg@QEve{=dOX^IkEOPfnelWQ7it ztvwulCIypML3qE{%G|3eKK-6|)E!@Jwt2Ei*3oce?NsQeT+hH48L=QP2mbNRx)$@4 zF}FRts$-%yk?C6a(d1UE5!q`4SvK;%2%<rv6~2qk<xv`eYNXYxy`Fy)Kme9eKe`Ge z2_5T;I+Kv*s{p)E4aZx(u-<NpU+XMny=a)EzM=6f-`=b}>4amy%SHf~cdLhyvDP); zzjXLLfU<f5{12Snao(=jT;t@5LLLWu6e>QSknB|<_OpWPO{nwMIX3gN-Y_uB_wdoZ zqJ+6LboGs7P)PCEwXrv?d}x~^%nLObAvxHzn@(1wf1idBCtMabGXE)OoxW$rE!);) zohI(SCCtR>n5)B#2VGt6InyP6i{ZSET{YonaeNiDfjFdDXVKkJ5?)+t`orPjB1Bo; zP?42)fYIknT?9VJNELl?sYG6Pm6(+;<bO+yAKelwlUy|hz-+iwsL|M`p;k*0$iP*` zW2lAOr$#nN|G7X6re-;-C3+YPF55N85-)gRM|#YXl3Mzbg|<3u@^|;mII28rP5u5} z0YqBgFndm!<4SV3_4IdcRtB}j@q{RTLAsay@xP!YRrbBmo2RX$=LU@g0>?nRN(<SL z@tV$Rk9X>%lK^~xuI+-;Z*+9@F7*4e_qN-F4@MXmlD4wX)a+waL7E!q5la0yyH|#n z^BFeW2I%1u6!YA`=mirUhi_D9_W_TZx&V9|xsygmd+_H-Rd1ImWkU8Oa><IptPq)> z`-YNtbq?$MS&f-`w{MauSeh_faeK5q-`H2getTjjO7bxsMZH*7mK;Ri+OOe)?wI1w zuMnU{#5`N}svI+k@)%Yo-hx}qTP832^;T3}bjMseBbcR%9Ex|is>_m2+Tai<nykQx zU&Hr0$jjmT8F!Q4FQn!(pns6k%l%;o8)>ITV9u#y)3muqY@+JomXO%8bbDKGg#2G? z6CaOxyix}f#vyFFI3JQ9;7^9>U48x;Jk`_i!!C8B73~eJ<Rqp>R@ZNq*?K&<2w7xK zr-d=zdHHuWUA^Bz9o4cmD-q!$z)N*udVDbdX|h@Vs}(`HM^SeyHb#zN@s}FS>mZ{q zmr-k(1oN-+L00#_#z*C?B3}E1SGC<EFI)pWoIbM{5tUJiJw1gN)?v!1o--CsZ`5lZ zPgIL)GR*)41^0;HEk}wn5YGk}s!f4bfisB`QA*jJV{WXCwGrf~9fv;r2R|TK$NF9F zVm-8JNOa3r{Nhbcbq9HwG}BBDIP7|7H<I<m-zc;4V^H!KKLJaX@DUO`2V7EY-3!H1 z*lH#PLXb;d>SmQzQYz+c@<TlVX9)&e_4RTzDqL)Hp96%JAtd^s>1bun-A2L{n#;0i znf57Oge?8f$SMLOHl`ZArDfX|$f~KAX#h3OgAVP|ULuYxH~4OioZtCEdy{9|+<w0p zizdE;;f-G;kp!}l#nMU!!W)h*1!>mT#u#_mXkF_)<faUZR(?d^(B<xNL6{GnPAmNE ztk3=<zl<-p?strRn9oBtP&u5O5*1b)008_P3pb$aMzmR8j5UYc85#(|R5>iJXS*){ z!UqnyK!2<D%X48mlA16(B+o{h!Jc_PgZg)RsfSaBZD>$R-3-Hs8)r^Y7|KR~pyPnu zn*g^yvvS3~3zdnuGP>o*{;kB<EC1!gO8R$fA?y0b3%-L6WFm*hlf0F=HYx}~ai4SW z$ueJCtXdc_h+oIPN0EUY^;^i^$FC^-960vRtk1Di`o%#;$d{>d4@;he!8QNq`GO(Z zE5L+uk3O1nVbDncB15`@fHT7Et~;J=#`X)rKmK+5l0=V9CQu`s54V#l&rBF13%fnh zx^Tw|yPi7Xtbe+~eKrw#rgQs#$`<Ra%OsKUFSMG|rQ=6g^8?}-`jvK7&uP~@Vq1Nt zLaqG_1x?w!m|E206(2LefSorDQzAv2%PT5{K4B}!)tYWX;D$X~S%PMxPY%G1E(q=g z?j-clogxql5jGV+nGH)Ol0|1hgT>6o1<yD(&5cN&3}e>D1aBixhdzA48}t^9XUD%q z|GBL~8#eTpEU*56Xa9CSWx|=csSbU#`Yxi_Eq|imzHn$aua87y(CPUu%AfBorxuyN zGlr9&Z#>fZdox2d#S_lUTG3Z8;w%?>A-+yFCoQ)CAXPWent;T8ZFvDa6SPe-bSugI z`y`peFj*AcW-CL3`+E+YgD)=nERk7w+?!gsCn<X!a&(7gm&o-ry}JuQoa}6FhkX%R z5YKps5H=jT19y7UCF>Eokv}}$`4G9&LFfS&Q{`aisy=_N$Tahkq6Vi({d19(W8lyu zW#<EJIO|?<=ElHQc!$Q*&JF&gJCw(T0@&Y2BOpLjv{Q2VoX{>!4{2=%@>Vs`g~Q5) za2ch2r?ki8C%t?bwA<*%Qe_bCr6|zVz7mF!I$@#b{obxib~(>%t?=Xw+#dk>=xWav zdgTkL1GcXU#|u=y*SG73V~j_NrEv2q=*G_C4{$OTh3mreMH*dxeO83lG%nM{+isG{ zJMK|2x>no{CZGYFs~N%^*c=PbI4qz+AhGLJc+84ej(MSaklW0S3JkXL*31n1T*^vR z^2mgDUp)~^LQHI$d6Zr3j42E{uV!qIRa;uKyq6^{PfkAuSZ5vP!)pAJyKhT&mhW=- zSdbAIN<<rDHVOs;F$nu{j&yAj()<klUH}JN3g7gAx!2UExYp#kS-tgn=2{u9Hdeq% zNb$HTs|xhdE5QFd<%zkrTw2056j-|cP;v>esCT9MeID{so(}uExUI&^0+pAZQ^<+# zPDCg*PsL;#rY-zjKXDULf{2Mban;h;y_FI0YYu1j(=3n(06gho;Lyn+YRs)IEwf*j z3wpO~ksm~@<@ENiu&JxZCz-bn(K8fi$35xC@p>W);U(XJO=XWcjZ@q<ve2?%C8{ZU zY)C5!C*25mfYYXiz4aP#dA@PldJFiWHSYalQ53hUzhK(`H}9_4s}>1dx9|7G!T0dB z=E!s1%<ngl^o>ic^=^)_V5`&MM)%j=-3i_1jvB`n-w)T5l*5c3;S$Z#(>roin4A4F zC%OAk*Xf1A`$fycKS5#s<!_CaVG-p4>M!j)0(|^G$lbB_>E7efWM5miuL-;fdMlQ4 z=W|r@^z^Y&^k;5`_==mR+b2rC&^HNt*si|&a`1eW)R6j-Z<SyEfQwqw?Snmh&YLBc z=87)N{R2@Aaq~gu2BST}=EH@LYM+~+DAe|m#1N2ik74|O6W4&jDccmP{;WDOVHW!e zixaN4&YC#VZV-L|`9}(~6mHf}msj=p>^YlSW8HZrN7sr5GeWiHNIxlr-|^aCMNxbB zs%VX?xim;Vxy)V@-JZ^Ry8G9s@dZZ_-$XHsE4e^IdKqDA_tz%F;>QBf@}_Njp^xn! zo<A+$Q@B`uOugS+EZTTl%7vuO+#d0G1-LWZS2jW12xi^A_4oseU6!RF?tE82i7cU4 z#bDB*dd?~iuUg;vPC{g3yE(%q&j7wY5O(^%M|K^?TCp3FZ9Gn5bT?M=BufcXW^re& zM{nX1xW2v<S`&KW!-*`@p$fE)Pi~geTz~m;zHw-BeEougTM#pGvk%XB`>=95i4<wi zM0;Ma9Ib5clRd=RwE7>doe;4QLcNEUB&V$vjY9j9fPyJ4_6$r|4A-UJ9=OCH7>66& zT2;>T>5ADY$ziJ|&nPZS#DffG5=VbeD8>0dy`A@0Q%%=~E%2a7FH(fii?jd&f;1@t z4-f<my_X0GNbe9pI!2`TB0-9xGyx+m(oK-6G$|nzK}rHr0)+A%-}n6+zO&A+XPq^( zX7<eN+4p@(y}M%reFjncy#4Gp&mn2{PrDXhfXu<{-Xp=d9S(G48Y|_ImxaKZnP(d? zt^xjX+2}o^mgIMP@-Vr4Zb5<b-v(9-){h&TyvrgFv&Zy*L<)YVm8Z->f?}F8rB2@E z{kq7rm5-aO<9;SGNj>FCccvJ8G=gPU5PA63jZB%oT}orVHhNgjKl>QJA<C2LiI%m= z)!LlgnQcCD3-Y=-??yWIl1&(D=&A*DCJ2+5jW1O&w3%vn?N)f>o#u$-%8TsPKbAp~ zGjZi>nA-GW;Tqv{l*EI=t|!*uZlndx<a)1DJz^{YxKU3{PwEm&9Cl3Z>e9IPrsH;u z>HCVeWId7Jkgs<ZdWa1`?a?iL7pqtQb$drh-M`|E+%ld4!!9yW$g4jy0dEN<Np=1< z{r)s%Wf%1^n2V}ul6XdeQBHMtO!o^p(1+^vcO1Zt2+&h9*ffVQG{U$b5%%UOuQ{*t z%>@B+)fOFxD)BcgxM=I%_J#UPr))yc=1sk+=&uEtFM9Ze#c%Bs_FN_&3_;=m%!4^3 z=bIE|RK>hPQLr0%K;E|-GW(}h<=q?%sGCge?t9|jk!qjk`r?urskmaeZk#mO7wvv) zSsX6iCU-igvE~hlD`z+(01S)2v&x#;5diBw18T?~fk&;=-W2~>ovN`r&)?9#GR-ro zw6fasXdac);`P>&Vw!CZ%X`$O_7S~-Y2S@j&Irix&=}TjH`j`N`>NMisde-tY){KM zdO)R#kc)2_Jm`6UtM;&6U~ZDSe9#?a6`YT&Ep+xn{ruR96K*rUi%0o%I3Cf_t6~09 zjXOFzLS&+k3Y|I{UeY}{;8eYW363{*Qb89BRR?7lJ4tl4-RNU=o4sRo5kA9a>dim= zb*b~^21eNw#Q)*@F7jsjt$2zzTF-0f-Y1Vri!JNYSnw5b>P(G)|Nb#Rkz645!|Asl zf==6My}ZCiWY##S5<W}PlRJy|n&59Zc%!zbG$dQeN9unFeI^mB@`@Lp^{T84-)OlI z8ANJ*tLrd-yG^LcX_-F#`lL5F?$8GPVJ0V+pFb`LhAuX2HZdlQjoeB|eEsk%ZL<rz zErMrwD_@(x>(1=Du^_zv&7-$3<va9W<bK^T;!o?8YUoW83gk<F5PD5sMa8xH)Ybx* z?y_9V?huv{H*qH0*t%Td9I16xAK-fc0l$I$y-5;0IBw#?rEcScx4dee1mlOX=5@G8 z`_d=b{+$)c1vmcI1xRvNMm@h^;^Mxl%MZ(y4=VZtJ3SNfh}4FPRNwL^;rpI*79%<Z z+{&3-X-d6LV{&@Y${NJKEEC8tUyfoWv(X+G)ldD>t-17Z-=h*A1E7NH&?@bj7Qj|v zkSF5<k5prOa*1gYML(zZ{?_fwS%}9rF%%Q(rc%2$H2<ik+0K?pyBNu;+UnGkV_v3+ ziwe~nk4<vP7VS3Xe*D<)ra>>{L>uu@M%A6BT->DZ+a)yo%W1)qKVp)XZ_gG2mn>U# zT9xY~2fp1ROC&OU>rCB}m^lnfIMa7Zx?Jq6yJ}aBiE?@4owsBb#1HwpVyEwb|1*1E zolC<PI7~Wd`(DAJ6#Ca=FB``kQ3Cwi$^;$6hP|a@6Zf?m878aFD&+%3)gs0L5YM@P zVy~%bxBk+)+02>H`;6(M41kk3CmG23Tkvg2QU@}%DtQ!qS9^?IBKi6syG2l?!7t!W zn$V2@wbXs51TXby>n4RdcJ!k6&q*oD{3F8jSY!U`VUTwK_dC6)HyA$I{&MG0`*O^B z!4wOSdAoRjT?=J6c@AEmY04;p2;Mj=%(308J^Y_;ww0&8mg$5Bl3X;P`HBCA)751Q zSmC$*<3u^j)$LC>P}EYg2;GyZpi7nyS#iZgU1mK02Z1ip7{XqY;iU-MEW_6oJYLV? zO__3Jjv2R+i@jDFlfd`SWSPy&Syb=)bVXSP#S&r(TngRn&FlH-?2_YvWqVC9BXP`t zqPQ3#T)w7n5>tV5c0L1zJW?1V?#f>{)twaz)ibcrKaFDYzSlH7f7Qy|*HCTSz+Z6J zg82RX#vInjLC^3%enf+5Mj0)RA|Gnn9$RC0gU|Bz`Bk7TMR1#ipSmAElyBC*_|`kI z{v;JqWHGzx*jQ@q%x)V^a4je@n%t6=T?zz}c)Ta7!kZ*sJ?^f?*k7183s5MUTl7VW zIL;;_-r9ttSILvrNSRV4fZ<^7GDtGcd;Ul9l?7=Xfv|Ok*uYu@l-7D9CO{d0lx2=Z zp2<Tx1$qiKjpdd{IVA5-!SkpLHsS9uYK>^jdce*Dukzy@FUYO~D^m89!SOp(r|gJ5 z;V|lz@ZG`A^0QZd;>t0er>wZlUmDt8Iq#`F-c7Qmo;;ElQUwAyjV^s^sheiE+7-i* z2`wQ`i>K_|i3Gf=yb@m<3s+tET(7AIU;k(6;p0fz@t)IB$(J-Vu^;O>eOZ?>gTc3e zHk4wDpL9#iJn3P?tUO~c=MKZFh|cN+m5Ws;%zaIed9=O&+c~@8GS^d8Bg>7Uj)WpT zjILq*8r`CmmrHB;1>}tf$0AKU_IMH3tKeIc!@Px<VvSSG%6a=YSHG&{`Z7ZTP{LBK zv(M|Y&c$?w&k<2@aumyc8it5->`fLkSr~Uu;U{d21GiJo7T!&i=(P0I7{e`rE`*QO z3o0s&YjUAMH!*T{5<0bI$!WQ?IoHFyMQ5r32czn%$r5v<_A{J_HGp|J{g-vJOQa+O z*(cBG^^)-Yz(p>Q`Fjrv0L#z;JHywXn#TTdk<EWB?}$PM&ZkU<$1~uX<><RB@%yzt zKP_GEd=_|Di76<+%u6Gv*YW<jpg7|AR;f$-LDAW-Lhp0Hk#Gn~sqpi0A-h)s0bqJC z%ZFzogc+HPL6v0on!G5C8~0zy{_nedV|M`s6$ajOV)i8xdELxlkC(v#Z86eoq(3ID zk&^`*m=j!7RbKShQDDh56*+A2VwZWHI9?@(=NWf3f8yh&Q&d_<HH<s>(!`g8$U%l@ zu&vX&5VOYwyl%{F$fEQ~t1_)%ul6oFEwsn?aK??jYji3Wrq{iTd*0onDhVa6-<fmW zeyGsprZ8oCvw$k!HHAbCUU<)&UsC06`_~{K56F#k&wl^jlg8K!8Qo`ERpOx6_~Rzi zQsyXkL;KuM_MZ!(PHgPgsze90m_{#pET&1*VIn0}x5d9e{^98EPDYEm)^83)(h%&L zn1u;4#gpI?Y`;=Kv)K#yzsOxy^--(F48Udw*+VAAmDmL?_vFqAEPps<GKB|!9ACHD z_vE9;4FhL2YDhAZ#j;>MXrdLjNrJ7g9?n3Rolxg|n-eFvkDVOrM;;qTQBx8lC`jOY zk@<umky&e>42mBsqlNLWvHgx3_wpev9)LB+&)m+=P8dM4zB{VrCM3CJSwF2?p5I=H zB?--YliW|lvVBks>sJ6i^uYf9ep=Rkz7Ok2UiQ8<{nO%y(3G`|;T!PY<QL6n6!SL_ zRh+l(<q8E##p!H`lN(c`5@tuQYg3v9al|x_{sjmD`zBcWD8D%mBuKf9Rm11UQs0Y* z#md3JIxSOk>g}#Mc_<DG|JR|T>m>Ed|2}xh%cpI4(_P6dXP%dw*E@QnVDbUrT*m|m zpL+{ruUxu}2Qr<mw6}6tEd(DQ^ei(hrc#YoRXQBU=uqUyoBsW$4x7O4o;YMOJzX&i zHA)t0jUaw5(5ralVPKPfRvJ@=xq38~%4~k@!+qM!dvg$c2gd+ZE&r9Tn?!4~8nG7a z8wH6!U(}qzFzE$9VKWeLY!2g3=jEpDATW5y-2lBG3DPkR=bPy&a_5&IlwreAKx(un z{O^dN>0$4y9uM^1cqi&%r10~r>&tX4CwKp3A%M`BYs-9Us?)s^g?0NQP(k%u%`Cga zx}^pYdE8N&%`M*6R31eN$Z&bbEciObwWhAAgZgi2SYny}%cuwoDB-gCHhe-eRICb* z7kCPLlWHxA4@_O<{KQ$TEF(JOu)v#FNi=>8Lyjy{>S4!EJQWnD*V*^U+hy17-p<2T zA7R=7xN(vHoqWSqG`h5l@RIuP2&dDa*IK%whscfmh}Dc1zFhekt2*c1g1~-Ufj7UF z{kK~;c<Z-V4^_MZH}{mtRnOnPH4oMX<STD$RNbv2AVvfptOQ5iUn|{)04`Z7O9&6? z8fG*)y`rwp+x>bKxBTF!y<oMiS^spF3OK2*RXANwrTpw(Rj$J=hrj2kYR&sThQ=`C zaRFpx(OT7<n(;Oqghp4-%$ALWm36HlJ8TxMve%X<ns^o{#0)!Kn}TV6tip`*v*N3s zr?7x^d!~dWz9*v}k>kn6F?WPK0&SP-8KU4wF?xr1B3@Oof%<+_B$iv5E`W=0n;;qN z4ZZg)AYAdHeRj0+%Cxi&6X1hqUarquxT$^MqNu8=(-*B*_UNl={m<N#@o;#wSCt1( z*x<@29IBU<SyK)B>9tO4N9KLXaL-fgRC?rIu;;ciglzoT*RY)`G$w0o@8+6EXkOL* z&4^VHs|6e#YNabJwyCI4k}?OMU;@SdISoEwts~os)$N>w(%-5FuNjO8B_86*{%41| z59;g}0w>|;WP0V=!<w4eCalC^8=nOGk)rOADvEyk)t+P!{QQ%+iuz(J3bwsQi8LEh zQny(fi6wuzZuent>NsE~OcoASGyf=RW?3XM6+GQMt`NoZC-Rqj{^mDX63hJI;91m> z-|?{Ln$2x`y@>qTDQOzOJTE}z9YeKfHBCK7*|B~!7NP%x(F_FjyC1JpF}T)zdlU0o zg@aZ6AE^GdyNAk<*=nEi9i>#Q&rqj!ynw=~=)ot<shSd$E?b-&%Pa!TYNW{KA1rzy z%)YYpWcneqHcNIXP>o$WTlWvjZfto)!m4aT5!w{-aMCxTmIvq6+46alt-E=-Rp34< z=={X}?$q2b$MCV`Mx+^3VJgenAAXMVxsMtu3+<)H#X9eCw;zeApxx;BhUJ6dtx_fp zeZd2MQ~J^bOZ+|TlVUbS0*M*3Q}i@uZ)aer%nzl07TjSr$TdLhIqSbjR1Y4m+PUZf z`_uao>}*U`Me7|A!oXCUH*CuA_1=?RGK_#Niuss=pi)pzpVx<79?_q=Lb>ADj11py z9jWXZhPYOTL{vPai502yW9BLxaftZmbdBNJvy1xiy|w4Le059XhXOFDX9%d8!oNi9 zRn9K-SeT2*p)q%?-}V$rccsU?HER<c%LW=tDLk9*hubI<Kl?eEkaxKwDT%dL``abL zin^EW%2pi*J}`pmpuP3Wt(B6+_E2b68@*`U2wAvcJrEOG*!^ctRru7K)=ovBeg-TS zAZ5(KRru$Oq?<OOx!<|Obt-cjyv!cY|1H#1W{AAp>ObW=Gl0wd**8y0a*OiTK^Ho* z^8vOX&-zWJ_)Hj=#1l5VZx4Z>!cdkFniJ_EGB#28)*>xWbx3)(z7f0jPBxOwx$n@i zSe?zD@o}>MLKac{P!t-F#Bx~nTm+Ak4mi*18KsB*$}-*Hde>!771cq#n+?WMzB0xi z>^;8V#&d2jcfgI(FsIF;EZnrFi;kA((_DKh`OI;6-?PA7(&a&Acb*H?(@3aj!0EA4 z8I<BeskcK}r|a_(ag~xykshYkfo7X(*y&tiFQSK?I3MlBs-%OKqP*b(_C~dz?>;{e zy@TKfB3mnmJs*FPP5fiyu4C$N=04CoXyby#lhWDlk>fM!_yl_%FNHtZL}_rAhz;=* zg!&b}kY|^Ph0IlQwOuetTue>HGPIftyE9Y_EedUrYku8$1Ue6+Wxj`3A``I@`zH<G z4*W|%#aBy75PvA4Q;86o&CJU2#nk}x>1H=^IM4z6nZI`DO2*L7@E>1FweX}JQjGV{ z1KjM5EI_45M6U;_JwED)P`Wm>PF$(;fS_$H62P-K^G+pjnEmk|@w2Fq5l=iEM8w>o z5de%R%L{i|bL&KTt-6k%$k~rAu9khWDhqx1$gxlB0kb67YK%oWNCufL0a46~Hy5fK zr+%finmk1beoj&xrCCWGfhM3dQ9d@E^pGTZ(^1MJB0iOSSSQ&|J<g_KGnXt?Fd)!` zq)BH#m<)0Jy*n@z8pWvr^MRcCGKQWPgy1iqhx2NtM82xlO($+gk$@(kwV-L?jBGEh zIVUNqaq0fMt7~z#v`79(Pi;XMUm6l53NAvfjVQ6f!BMuzl2#`&M*?FP;N~-QL@i|{ zbA&}ovvZs(h`71PvE2+a`(iE;&31i9O_7h$EVc8!zBkFv;W#DDAKRxNzm_((^}+Eo zNJTt)(dvy?5py?nxnZwSg|m4qI-vral5!XAy?^pKu*e=2acNDwyir#$tjt36O5`eT zH2B&p1AiV!?i;p6RFVphxTztRHu0*;{XW7~^tS`Bko4(+MT~k@MY6ZiOL#vI(D@BK zgL74(Q}<VWyxcb=SSn0TRUgjGiQCu{Rri0KT;Mx(^$6iv$L9$$?*L?6fRH2Xm$(Gj z>5KW?vtltSG0=tC!-@wCO8oJacMIxl;+Y9+gJV*)-Tma4sbnuZ(dasq#jETd^Ji+q zl$RM)ac-;nb4<Hh0cUGmT`y!(f5+x2xgJ(r|8@(BWMsH)bBoQHwRUf+uN27H?VrTg ze^cvKFrgzKW6{t{@O{*|vN<FKPC!{$&}mNE*R1<?B<i=hjF{}%c&HJhzH2f#EDk@s z$@(v7(mw*bi^8eS;c_9CTvOqEWflnTrPOV^Ikuh);VrG>kR3l#cB;w5g>F(Q375XN zx5hO;B8|BAH$cQw_g*i$(zP_Di~Gr_n<OE|B}NY}aC3U0aN`)L-C+|m6a!=Xt)W}& z?eljesY?CVIIK!?`A$^^`V8)WhMpK6b3rUS^Iz&u<z9}+t)AF~Ew&zw_<2baRrgrh z;ODK1yPR<Pi}`6n-|bTTz3}u+4GSL|d*NRl!p%$Jf`7t&ZLmvs5q9c}r+)kf{cyqw z+ZI((9h=NGql-wS_Jg}<`c;2W)^8#k7-}(a9--TtX)Wbv^JSJpvYh=~ae=zSy!kY0 z$8vJldWSn%e&tU5e+DDdOHQ4ng>P@~S359J2#MEyosE*%)tEpopI}j2$JzWU#1s~? z(F9jp!lwBFNwmeg11E6GwPtbPTQgnfng5ee_peFAhwY@>aYY8147JPC6G?kHOeN+9 z#L%8~7hp~47u8@DEXi@>g4~8CwwSMi9^kHOJYtMYtfqP^ITqZt7jK>++#cp10Z1Vd z{=0wV6Rc05jd5Yu33ibAn|TzV+J%JFQag|Sl{fr9y>9<#>|Dq*Miyz1MV2oC&%Y0h Kv}-jTp8p@bOtb$0 literal 0 HcmV?d00001 diff --git a/img/onewire_data.png b/img/onewire_data.png new file mode 100644 index 0000000000000000000000000000000000000000..a58a3c70a9b7a3673470dc87dbc484068d066f9f GIT binary patch literal 4481 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 Y%GVo1zMC8Yj#fZ86Kmt5V~)Z92maG-F#rGn literal 0 HcmV?d00001 diff --git a/img/onewire_reset.png b/img/onewire_reset.png new file mode 100644 index 0000000000000000000000000000000000000000..bb7ac5ad5e013be912f97d33e5ce3a39b1784ad0 GIT binary patch literal 3817 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 I^_i>x1NM0vBme*a literal 0 HcmV?d00001 diff --git a/img/ram_layout.png b/img/ram_layout.png new file mode 100644 index 0000000000000000000000000000000000000000..bac9c63d45207d6599f0f444bf17223caeb430ab GIT binary patch literal 13837 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 Rz)!dyC@ZMLisjx1{12^UXc_<j literal 0 HcmV?d00001 diff --git a/img/riscv_logo.png b/img/riscv_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..27d8a41f056f65d755fc8eb04d52de90cd7debba GIT binary patch literal 15859 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 Vp$DOfeCL<clpjCH{|oN-{{RCnRfPZm literal 0 HcmV?d00001 diff --git a/img/riscv_logo_small.png b/img/riscv_logo_small.png new file mode 100644 index 0000000000000000000000000000000000000000..aec54fc11cc6511e3003dc452e6444e919fc6f0a GIT binary patch literal 3484 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 KMNUMnLSTXv2h_Cy literal 0 HcmV?d00001 diff --git a/img/stream_link_interface.png b/img/stream_link_interface.png new file mode 100644 index 0000000000000000000000000000000000000000..0206f93ab12f9d12d0b19ce9d74fd4bf00498744 GIT binary patch literal 7801 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 literal 0 HcmV?d00001 diff --git a/img/twd_sequences.png b/img/twd_sequences.png new file mode 100644 index 0000000000000000000000000000000000000000..7471b485b5dc02688312cd41738dadc0030dfbc6 GIT binary patch literal 51252 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 G;Qs>bOV0rS literal 0 HcmV?d00001 diff --git a/img/vivado_ip_gui.png b/img/vivado_ip_gui.png new file mode 100644 index 0000000000000000000000000000000000000000..09af8060f45962b90c05d7e8e07eee340b2306c9 GIT binary patch literal 67843 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 PK2SNMemeEk)qnmED3wc2 literal 0 HcmV?d00001 diff --git a/img/vivado_ip_soc.png b/img/vivado_ip_soc.png new file mode 100644 index 0000000000000000000000000000000000000000..0d12507deec3ba74f8c7a553a5829f55bd37e375 GIT binary patch literal 69772 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 literal 0 HcmV?d00001 diff --git a/img/xbus_read.png b/img/xbus_read.png new file mode 100644 index 0000000000000000000000000000000000000000..7018fe3e93f65fc550d2c6d4e7e66db33d99658f GIT binary patch literal 21832 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 literal 0 HcmV?d00001 diff --git a/img/xbus_write.png b/img/xbus_write.png new file mode 100644 index 0000000000000000000000000000000000000000..9d67458faaabfe65efb536516e0f20d14fb2a126 GIT binary patch literal 23425 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 W&kAtzpw2+xPhZ<atKhI>_<sP!GeD65 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000000..3f2fc39b21 --- /dev/null +++ b/index.html @@ -0,0 +1,22115 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="UTF-8"> +<meta http-equiv="X-UA-Compatible" content="IE=edge"> +<meta name="viewport" content="width=device-width, initial-scale=1.0"> +<meta name="generator" content="Asciidoctor 2.0.20"> +<meta name="description" content="A size-optimized, customizable and highly extensible MCU-class 32-bit RISC-V soft-core CPU and microcontroller-like SoC written in platform-independent VHDL."> +<meta name="keywords" content="neorv32, risc-v, riscv, rv32, fpga, soft-core, vhdl, microcontroller, cpu, soc, processor, gcc, openocd, gdb, verilog, rtl, asip, asic"> +<meta name="author" content="The NEORV32 Community and Stephan Nolting"> +<link rel="icon" type="image/png" href="img/icon.png"> +<title>[Datasheet] The NEORV32 RISC-V Processor</title> +<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"> +<style> +/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */ +/* Uncomment the following line when using as a custom stylesheet */ +/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */ +html{font-family:sans-serif;-webkit-text-size-adjust:100%} +a{background:none} +a:focus{outline:thin dotted} +a:active,a:hover{outline:0} +h1{font-size:2em;margin:.67em 0} +b,strong{font-weight:bold} +abbr{font-size:.9em} +abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none} +dfn{font-style:italic} +hr{height:0} +mark{background:#ff0;color:#000} +code,kbd,pre,samp{font-family:monospace;font-size:1em} +pre{white-space:pre-wrap} +q{quotes:"\201C" "\201D" "\2018" "\2019"} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-.5em} +sub{bottom:-.25em} +img{border:0} +svg:not(:root){overflow:hidden} +figure{margin:0} +audio,video{display:inline-block} +audio:not([controls]){display:none;height:0} +fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} +legend{border:0;padding:0} +button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +button,input{line-height:normal} +button,select{text-transform:none} +button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +input[type=checkbox],input[type=radio]{padding:0} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +textarea{overflow:auto;vertical-align:top} +table{border-collapse:collapse;border-spacing:0} +*,::before,::after{box-sizing:border-box} +html,body{font-size:100%} +body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased} +a:hover{cursor:pointer} +img,object,embed{max-width:100%;height:auto} +object,embed{height:100%} +img{-ms-interpolation-mode:bicubic} +.left{float:left!important} +.right{float:right!important} +.text-left{text-align:left!important} +.text-right{text-align:right!important} +.text-center{text-align:center!important} +.text-justify{text-align:justify!important} +.hide{display:none} +img,object,svg{display:inline-block;vertical-align:middle} +textarea{height:auto;min-height:50px} +select{width:100%} +.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} +div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0} +a{color:#2156a5;text-decoration:underline;line-height:inherit} +a:hover,a:focus{color:#1d4b8f} +a img{border:0} +p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} +p aside{font-size:.875em;line-height:1.35;font-style:italic} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} +h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} +h1{font-size:2.125em} +h2{font-size:1.6875em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} +h4,h5{font-size:1.125em} +h6{font-size:1em} +hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em} +em,i{font-style:italic;line-height:inherit} +strong,b{font-weight:bold;line-height:inherit} +small{font-size:60%;line-height:inherit} +code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} +ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} +ul,ol{margin-left:1.5em} +ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0} +ul.circle{list-style-type:circle} +ul.disc{list-style-type:disc} +ul.square{list-style-type:square} +ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit} +ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} +dl dt{margin-bottom:.3125em;font-weight:bold} +dl dd{margin-bottom:1.25em} +blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} +blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} +@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} +h1{font-size:2.75em} +h2{font-size:2.3125em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} +h4{font-size:1.4375em}} +table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal} +table thead,table tfoot{background:#f7f8f7} +table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} +table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} +table tr.even,table tr.alt{background:#f8f8f7} +table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} +h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} +.center{margin-left:auto;margin-right:auto} +.stretch{width:100%} +.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table} +.clearfix::after,.float-group::after{clear:both} +:not(pre).nobreak{word-wrap:normal} +:not(pre).nowrap{white-space:nowrap} +:not(pre).pre-wrap{white-space:pre-wrap} +:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed} +pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed} +pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit} +pre>code{display:block} +pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal} +em em{font-style:normal} +strong strong{font-weight:400} +.keyseq{color:rgba(51,51,51,.8)} +kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap} +.keyseq kbd:first-child{margin-left:0} +.keyseq kbd:last-child{margin-right:0} +.menuseq,.menuref{color:#000} +.menuseq b:not(.caret),.menuref{font-weight:inherit} +.menuseq{word-spacing:-.02em} +.menuseq b.caret{font-size:1.25em;line-height:.8} +.menuseq i.caret{font-weight:bold;text-align:center;width:.45em} +b.button::before,b.button::after{position:relative;top:-1px;font-weight:400} +b.button::before{content:"[";padding:0 3px 0 2px} +b.button::after{content:"]";padding:0 2px 0 3px} +p a>code:hover{color:rgba(0,0,0,.9)} +#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} +#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table} +#header::after,#content::after,#footnotes::after,#footer::after{clear:both} +#content{margin-top:1.25em} +#content::before{content:none} +#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} +#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf} +#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px} +#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap} +#header .details span:first-child{margin-left:-.125em} +#header .details span.email a{color:rgba(0,0,0,.85)} +#header .details br{display:none} +#header .details br+span::before{content:"\00a0\2013\00a0"} +#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} +#header .details br+span#revremark::before{content:"\00a0|\00a0"} +#header #revnumber{text-transform:capitalize} +#header #revnumber::after{content:"\00a0"} +#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} +#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em} +#toc>ul{margin-left:.125em} +#toc ul.sectlevel0>li>a{font-style:italic} +#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} +#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} +#toc li{line-height:1.3334;margin-top:.3334em} +#toc a{text-decoration:none} +#toc a:active{text-decoration:underline} +#toctitle{color:#7a2518;font-size:1.2em} +@media screen and (min-width:768px){#toctitle{font-size:1.375em} +body.toc2{padding-left:15em;padding-right:0} +#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} +#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} +#toc.toc2>ul{font-size:.9em;margin-bottom:0} +#toc.toc2 ul ul{margin-left:0;padding-left:1em} +#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} +body.toc2.toc-right{padding-left:0;padding-right:15em} +body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}} +@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} +#toc.toc2{width:20em} +#toc.toc2 #toctitle{font-size:1.375em} +#toc.toc2>ul{font-size:.95em} +#toc.toc2 ul ul{padding-left:1.25em} +body.toc2.toc-right{padding-left:0;padding-right:20em}} +#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px} +#content #toc>:first-child{margin-top:0} +#content #toc>:last-child{margin-bottom:0} +#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em} +#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44} +#content{margin-bottom:.625em} +.sect1{padding-bottom:.625em} +@media screen and (min-width:768px){#content{margin-bottom:1.25em} +.sect1{padding-bottom:1.25em}} +.sect1:last-child{padding-bottom:0} +.sect1+.sect1{border-top:1px solid #e7e7e9} +#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} +#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} +#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} +#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} +#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} +details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} +details{margin-left:1.25rem} +details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent} +details>summary::-webkit-details-marker{display:none} +details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)} +details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)} +details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem} +.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} +table.tableblock.fit-content>caption.title{white-space:nowrap;width:0} +.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)} +.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} +.admonitionblock>table td.icon{text-align:center;width:80px} +.admonitionblock>table td.icon img{max-width:none} +.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} +.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere} +.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} +.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px} +.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px} +.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} +.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0} +.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} +.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em} +@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}} +@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}} +.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8} +.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)} +.listingblock>.content{position:relative} +.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5} +.listingblock:hover code[data-lang]::before{display:block} +.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5} +.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"} +.listingblock pre.highlightjs{padding:0} +.listingblock pre.highlightjs>code{padding:1em;border-radius:4px} +.listingblock pre.prettyprint{border-width:0} +.prettyprint{background:#f7f7f8} +pre.prettyprint .linenums{line-height:1.45;margin-left:2em} +pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0} +pre.prettyprint li code[data-lang]::before{opacity:1} +pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none} +table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none} +table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal} +table.linenotable td.code{padding-left:.75em} +table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +pre.pygments span.linenos{display:inline-block;margin-right:.75em} +.quoteblock{margin:0 1em 1.25em 1.5em;display:table} +.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em} +.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} +.quoteblock blockquote{margin:0;padding:0;border:0} +.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} +.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} +.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right} +.verseblock{margin:0 1em 1.25em} +.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} +.verseblock pre strong{font-weight:400} +.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} +.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} +.quoteblock .attribution br,.verseblock .attribution br{display:none} +.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)} +.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none} +.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0} +.quoteblock.abstract{margin:0 1em 1.25em;display:block} +.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center} +.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf} +.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0} +.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem} +.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0} +p.tableblock:last-child{margin-bottom:0} +td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere} +td.tableblock>.content>:last-child{margin-bottom:-1.25em} +table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} +table.grid-all>*>tr>*{border-width:1px} +table.grid-cols>*>tr>*{border-width:0 1px} +table.grid-rows>*>tr>*{border-width:1px 0} +table.frame-all{border-width:1px} +table.frame-ends{border-width:1px 0} +table.frame-sides{border-width:0 1px} +table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0} +table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0} +table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0} +table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0} +table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7} +th.halign-left,td.halign-left{text-align:left} +th.halign-right,td.halign-right{text-align:right} +th.halign-center,td.halign-center{text-align:center} +th.valign-top,td.valign-top{vertical-align:top} +th.valign-bottom,td.valign-bottom{vertical-align:bottom} +th.valign-middle,td.valign-middle{vertical-align:middle} +table thead th,table tfoot th{font-weight:bold} +tbody tr th{background:#f7f8f7} +tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} +p.tableblock>code:only-child{background:none;padding:0} +p.tableblock{font-size:1em} +ol{margin-left:1.75em} +ul li ol{margin-left:1.5em} +dl dd{margin-left:1.125em} +dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} +li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} +ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none} +ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em} +ul.unstyled,ol.unstyled{margin-left:0} +li>p:empty:only-child::before{content:"";display:inline-block} +ul.checklist>li>p:first-child{margin-left:-1em} +ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em} +ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em} +ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em} +ul.inline>li{margin-left:1.25em} +.unstyled dl dt{font-weight:400;font-style:normal} +ol.arabic{list-style-type:decimal} +ol.decimal{list-style-type:decimal-leading-zero} +ol.loweralpha{list-style-type:lower-alpha} +ol.upperalpha{list-style-type:upper-alpha} +ol.lowerroman{list-style-type:lower-roman} +ol.upperroman{list-style-type:upper-roman} +ol.lowergreek{list-style-type:lower-greek} +.hdlist>table,.colist>table{border:0;background:none} +.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} +td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em} +td.hdlist1{font-weight:bold;padding-bottom:1.25em} +td.hdlist2{word-wrap:anywhere} +.literalblock+.colist,.listingblock+.colist{margin-top:-.5em} +.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top} +.colist td:not([class]):first-child img{max-width:none} +.colist td:not([class]):last-child{padding:.25em 0} +.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd} +.imageblock.left{margin:.25em .625em 1.25em 0} +.imageblock.right{margin:.25em 0 1.25em .625em} +.imageblock>.title{margin-bottom:0} +.imageblock.thumb,.imageblock.th{border-width:6px} +.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} +.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} +.image.left{margin-right:.625em} +.image.right{margin-left:.625em} +a.image{text-decoration:none;display:inline-block} +a.image object{pointer-events:none} +sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} +sup.footnote a,sup.footnoteref a{text-decoration:none} +sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline} +#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} +#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0} +#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em} +#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em} +#footnotes .footnote:last-of-type{margin-bottom:0} +#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} +div.unbreakable{page-break-inside:avoid} +.big{font-size:larger} +.small{font-size:smaller} +.underline{text-decoration:underline} +.overline{text-decoration:overline} +.line-through{text-decoration:line-through} +.aqua{color:#00bfbf} +.aqua-background{background:#00fafa} +.black{color:#000} +.black-background{background:#000} +.blue{color:#0000bf} +.blue-background{background:#0000fa} +.fuchsia{color:#bf00bf} +.fuchsia-background{background:#fa00fa} +.gray{color:#606060} +.gray-background{background:#7d7d7d} +.green{color:#006000} +.green-background{background:#007d00} +.lime{color:#00bf00} +.lime-background{background:#00fa00} +.maroon{color:#600000} +.maroon-background{background:#7d0000} +.navy{color:#000060} +.navy-background{background:#00007d} +.olive{color:#606000} +.olive-background{background:#7d7d00} +.purple{color:#600060} +.purple-background{background:#7d007d} +.red{color:#bf0000} +.red-background{background:#fa0000} +.silver{color:#909090} +.silver-background{background:#bcbcbc} +.teal{color:#006060} +.teal-background{background:#007d7d} +.white{color:#bfbfbf} +.white-background{background:#fafafa} +.yellow{color:#bfbf00} +.yellow-background{background:#fafa00} +span.icon>.fa{cursor:default} +a span.icon>.fa{cursor:inherit} +.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} +.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c} +.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} +.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900} +.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400} +.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000} +.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} +.conum[data-value] *{color:#fff!important} +.conum[data-value]+b{display:none} +.conum[data-value]::after{content:attr(data-value)} +pre .conum[data-value]{position:relative;top:-.125em} +b.conum *{color:inherit!important} +.conum:not([data-value]):empty{display:none} +dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} +h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em} +p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} +p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem} +p{margin-bottom:1.25rem} +.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} +.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc} +.print-only{display:none!important} +@page{margin:1.25cm .75cm} +@media print{*{box-shadow:none!important;text-shadow:none!important} +html{font-size:80%} +a{color:inherit!important;text-decoration:underline!important} +a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} +a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} +abbr[title]{border-bottom:1px dotted} +abbr[title]::after{content:" (" attr(title) ")"} +pre,blockquote,tr,img,object,svg{page-break-inside:avoid} +thead{display:table-header-group} +svg{max-width:100%} +p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} +h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} +#header,#content,#footnotes,#footer{max-width:none} +#toc,.sidebarblock,.exampleblock>.content{background:none!important} +#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important} +body.book #header{text-align:center} +body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em} +body.book #header .details{border:0!important;display:block;padding:0!important} +body.book #header .details span:first-child{margin-left:0!important} +body.book #header .details br{display:block} +body.book #header .details br+span::before{content:none!important} +body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} +body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} +.listingblock code[data-lang]::before{display:block} +#footer{padding:0 .9375em} +.hide-on-print{display:none!important} +.print-only{display:block!important} +.hide-for-print{display:none!important} +.show-for-print{display:inherit!important}} +@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem} +.sect1{padding:0!important} +.sect1+.sect1{border:0} +#footer{background:none} +#footer-text{color:rgba(0,0,0,.6);font-size:.9em}} +@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}} +</style> +<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> +</head> +<body class="book toc2 toc-left"> +<div id="header"> +<h1>The NEORV32 RISC-V Processor - Datasheet</h1> +<div class="details"> +<span id="author" class="author">The NEORV32 Community and Stephan Nolting</span><br> +<span id="email" class="email"><a href="mailto:stnolting@gmail.com">stnolting@gmail.com</a></span><br> +<span id="revnumber">version v1.10.8-r25-g208ad4ef</span> +</div> +<div id="toc" class="toc2"> +<div id="toctitle">Table of Contents</div> +<ul class="sectlevel1"> +<li><a href="#_overview">1. Overview</a> +<ul class="sectlevel2"> +<li><a href="#_rationale">1.1. Rationale</a></li> +<li><a href="#_project_key_features">1.2. Project Key Features</a></li> +<li><a href="#_project_folder_structure">1.3. Project Folder Structure</a></li> +<li><a href="#_vhdl_file_hierarchy">1.4. VHDL File Hierarchy</a> +<ul class="sectlevel3"> +<li><a href="#_file_list_files">1.4.1. File-List Files</a></li> +</ul> +</li> +<li><a href="#_vhdl_coding_style">1.5. VHDL Coding Style</a></li> +<li><a href="#_fpga_implementation_results">1.6. FPGA Implementation Results</a></li> +<li><a href="#_cpu_performance">1.7. CPU Performance</a></li> +</ul> +</li> +<li><a href="#_neorv32_processor_soc">2. NEORV32 Processor (SoC)</a> +<ul class="sectlevel2"> +<li><a href="#_processor_top_entity_signals">2.1. Processor Top Entity - Signals</a></li> +<li><a href="#_processor_top_entity_generics">2.2. Processor Top Entity - Generics</a></li> +<li><a href="#_processor_clocking">2.3. Processor Clocking</a> +<ul class="sectlevel3"> +<li><a href="#_peripheral_clocks">2.3.1. Peripheral Clocks</a></li> +</ul> +</li> +<li><a href="#_processor_reset">2.4. Processor Reset</a></li> +<li><a href="#_processor_interrupts">2.5. Processor Interrupts</a> +<ul class="sectlevel3"> +<li><a href="#_risc_v_standard_interrupts">2.5.1. RISC-V Standard Interrupts</a></li> +<li><a href="#_neorv32_specific_fast_interrupt_requests">2.5.2. NEORV32-Specific Fast Interrupt Requests</a></li> +</ul> +</li> +<li><a href="#_address_space">2.6. Address Space</a> +<ul class="sectlevel3"> +<li><a href="#_bus_system">2.6.1. Bus System</a></li> +<li><a href="#_bus_gateway">2.6.2. Bus Gateway</a></li> +<li><a href="#_reservation_set_controller">2.6.3. Reservation Set Controller</a></li> +<li><a href="#_io_switch">2.6.4. IO Switch</a></li> +</ul> +</li> +<li><a href="#_boot_configuration">2.7. Boot Configuration</a> +<ul class="sectlevel3"> +<li><a href="#_booting_via_bootloader">2.7.1. Booting via Bootloader</a></li> +<li><a href="#_boot_from_custom_address">2.7.2. Boot from Custom Address</a></li> +<li><a href="#_boot_imem_image">2.7.3. Boot IMEM Image</a></li> +</ul> +</li> +<li><a href="#_processor_internal_modules">2.8. Processor-Internal Modules</a> +<ul class="sectlevel3"> +<li><a href="#_instruction_memory_imem">2.8.1. Instruction Memory (IMEM)</a></li> +<li><a href="#_data_memory_dmem">2.8.2. Data Memory (DMEM)</a></li> +<li><a href="#_bootloader_rom_bootrom">2.8.3. Bootloader ROM (BOOTROM)</a></li> +<li><a href="#_processor_internal_instruction_cache_icache">2.8.4. Processor-Internal Instruction Cache (iCACHE)</a></li> +<li><a href="#_processor_internal_data_cache_dcache">2.8.5. Processor-Internal Data Cache (dCACHE)</a></li> +<li><a href="#_direct_memory_access_controller_dma">2.8.6. Direct Memory Access Controller (DMA)</a></li> +<li><a href="#_processor_external_bus_interface_xbus">2.8.7. Processor-External Bus Interface (XBUS)</a></li> +<li><a href="#_stream_link_interface_slink">2.8.8. Stream Link Interface (SLINK)</a></li> +<li><a href="#_general_purpose_input_and_output_port_gpio">2.8.9. General Purpose Input and Output Port (GPIO)</a></li> +<li><a href="#_cyclic_redundancy_check_crc">2.8.10. Cyclic Redundancy Check (CRC)</a></li> +<li><a href="#_watchdog_timer_wdt">2.8.11. Watchdog Timer (WDT)</a></li> +<li><a href="#_core_local_interruptor_clint">2.8.12. Core Local Interruptor (CLINT)</a></li> +<li><a href="#_primary_universal_asynchronous_receiver_and_transmitter_uart0">2.8.13. Primary Universal Asynchronous Receiver and Transmitter (UART0)</a></li> +<li><a href="#_secondary_universal_asynchronous_receiver_and_transmitter_uart1">2.8.14. Secondary Universal Asynchronous Receiver and Transmitter (UART1)</a></li> +<li><a href="#_serial_peripheral_interface_controller_spi">2.8.15. Serial Peripheral Interface Controller (SPI)</a></li> +<li><a href="#_serial_data_interface_controller_sdi">2.8.16. Serial Data Interface Controller (SDI)</a></li> +<li><a href="#_two_wire_serial_interface_controller_twi">2.8.17. Two-Wire Serial Interface Controller (TWI)</a></li> +<li><a href="#_two_wire_serial_device_controller_twd">2.8.18. Two-Wire Serial Device Controller (TWD)</a></li> +<li><a href="#_one_wire_serial_interface_controller_onewire">2.8.19. One-Wire Serial Interface Controller (ONEWIRE)</a></li> +<li><a href="#_pulse_width_modulation_controller_pwm">2.8.20. Pulse-Width Modulation Controller (PWM)</a></li> +<li><a href="#_true_random_number_generator_trng">2.8.21. True Random-Number Generator (TRNG)</a></li> +<li><a href="#_custom_functions_subsystem_cfs">2.8.22. Custom Functions Subsystem (CFS)</a></li> +<li><a href="#_smart_led_interface_neoled">2.8.23. Smart LED Interface (NEOLED)</a></li> +<li><a href="#_external_interrupt_controller_xirq">2.8.24. External Interrupt Controller (XIRQ)</a></li> +<li><a href="#_general_purpose_timer_gptmr">2.8.25. General Purpose Timer (GPTMR)</a></li> +<li><a href="#_execute_in_place_module_xip">2.8.26. Execute In Place Module (XIP)</a></li> +<li><a href="#_system_configuration_information_memory_sysinfo">2.8.27. System Configuration Information Memory (SYSINFO)</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_neorv32_central_processing_unit_cpu">3. NEORV32 Central Processing Unit (CPU)</a> +<ul class="sectlevel2"> +<li><a href="#_risc_v_compatibility">3.1. RISC-V Compatibility</a></li> +<li><a href="#_cpu_top_entity_signals">3.2. CPU Top Entity - Signals</a></li> +<li><a href="#_cpu_top_entity_generics">3.3. CPU Top Entity - Generics</a></li> +<li><a href="#_architecture">3.4. Architecture</a> +<ul class="sectlevel3"> +<li><a href="#_cpu_register_file">3.4.1. CPU Register File</a></li> +<li><a href="#_cpu_arithmetic_logic_unit">3.4.2. CPU Arithmetic Logic Unit</a></li> +<li><a href="#_cpu_bus_unit">3.4.3. CPU Bus Unit</a></li> +<li><a href="#_cpu_control_unit">3.4.4. CPU Control Unit</a></li> +<li><a href="#_cpu_tuning_options">3.4.5. CPU Tuning Options</a></li> +<li><a href="#_sleep_mode">3.4.6. Sleep Mode</a></li> +<li><a href="#_cpu_clock_gating">3.4.7. CPU Clock Gating</a></li> +<li><a href="#_full_virtualization">3.4.8. Full Virtualization</a></li> +</ul> +</li> +<li><a href="#_bus_interface">3.5. Bus Interface</a> +<ul class="sectlevel3"> +<li><a href="#_bus_interface_protocol">3.5.1. Bus Interface Protocol</a></li> +<li><a href="#_atomic_accesses">3.5.2. Atomic Accesses</a></li> +</ul> +</li> +<li><a href="#_instruction_sets_and_extensions">3.6. Instruction Sets and Extensions</a> +<ul class="sectlevel3"> +<li><a href="#_b_isa_extension">3.6.1. <code>B</code> ISA Extension</a></li> +<li><a href="#_c_isa_extension">3.6.2. <code>C</code> ISA Extension</a></li> +<li><a href="#_e_isa_extension">3.6.3. <code>E</code> ISA Extension</a></li> +<li><a href="#_i_isa_extension">3.6.4. <code>I</code> ISA Extension</a></li> +<li><a href="#_m_isa_extension">3.6.5. <code>M</code> ISA Extension</a></li> +<li><a href="#_u_isa_extension">3.6.6. <code>U</code> ISA Extension</a></li> +<li><a href="#_x_isa_extension">3.6.7. <code>X</code> ISA Extension</a></li> +<li><a href="#_zalrsc_isa_extension">3.6.8. <code>Zalrsc</code> ISA Extension</a></li> +<li><a href="#_zifencei_isa_extension">3.6.9. <code>Zifencei</code> ISA Extension</a></li> +<li><a href="#_zfinx_isa_extension">3.6.10. <code>Zfinx</code> ISA Extension</a></li> +<li><a href="#_zicntr_isa_extension">3.6.11. <code>Zicntr</code> ISA Extension</a></li> +<li><a href="#_zicond_isa_extension">3.6.12. <code>Zicond</code> ISA Extension</a></li> +<li><a href="#_zicsr_isa_extension">3.6.13. <code>Zicsr</code> ISA Extension</a></li> +<li><a href="#_zihpm_isa_extension">3.6.14. <code>Zihpm</code> ISA Extension</a></li> +<li><a href="#_zba_isa_extension">3.6.15. <code>Zba</code> ISA Extension</a></li> +<li><a href="#_zbb_isa_extension">3.6.16. <code>Zbb</code> ISA Extension</a></li> +<li><a href="#_zbs_isa_extension">3.6.17. <code>Zbs</code> ISA Extension</a></li> +<li><a href="#_zbkb_isa_extension">3.6.18. <code>Zbkb</code> ISA Extension</a></li> +<li><a href="#_zbkc_isa_extension">3.6.19. <code>Zbkc</code> ISA Extension</a></li> +<li><a href="#_zbkx_isa_extension">3.6.20. <code>Zbkx</code> ISA Extension</a></li> +<li><a href="#_zkn_isa_extension">3.6.21. <code>Zkn</code> ISA Extension</a></li> +<li><a href="#_zknd_isa_extension">3.6.22. <code>Zknd</code> ISA Extension</a></li> +<li><a href="#_zkne_isa_extension">3.6.23. <code>Zkne</code> ISA Extension</a></li> +<li><a href="#_zknh_isa_extension">3.6.24. <code>Zknh</code> ISA Extension</a></li> +<li><a href="#_zks_isa_extension">3.6.25. <code>Zks</code> ISA Extension</a></li> +<li><a href="#_zksed_isa_extension">3.6.26. <code>Zksed</code> ISA Extension</a></li> +<li><a href="#_zksh_isa_extension">3.6.27. <code>Zksh</code> ISA Extension</a></li> +<li><a href="#_zkt_isa_extension">3.6.28. <code>Zkt</code> ISA Extension</a></li> +<li><a href="#_zmmul_isa_extension">3.6.29. <code>Zmmul</code> - ISA Extension</a></li> +<li><a href="#_zxcfu_isa_extension">3.6.30. <code>Zxcfu</code> ISA Extension</a></li> +<li><a href="#_smpmp_isa_extension">3.6.31. <code>Smpmp</code> ISA Extension</a></li> +<li><a href="#_sdext_isa_extension">3.6.32. <code>Sdext</code> ISA Extension</a></li> +<li><a href="#_sdtrig_isa_extension">3.6.33. <code>Sdtrig</code> ISA Extension</a></li> +</ul> +</li> +<li><a href="#_custom_functions_unit_cfu">3.7. Custom Functions Unit (CFU)</a> +<ul class="sectlevel3"> +<li><a href="#_cfu_instruction_formats">3.7.1. CFU Instruction Formats</a></li> +<li><a href="#_using_custom_instructions_in_software">3.7.2. Using Custom Instructions in Software</a></li> +<li><a href="#_cfu_control_and_status_registers_cfu_csrs">3.7.3. CFU Control and Status Registers (CFU-CSRs)</a></li> +<li><a href="#_custom_instructions_hardware">3.7.4. Custom Instructions Hardware</a></li> +</ul> +</li> +<li><a href="#_control_and_status_registers_csrs">3.8. Control and Status Registers (CSRs)</a> +<ul class="sectlevel3"> +<li><a href="#_floating_point_csrs">3.8.1. Floating-Point CSRs</a></li> +<li><a href="#_machine_trap_setup_csrs">3.8.2. Machine Trap Setup CSRs</a></li> +<li><a href="#_machine_trap_handling_csrs">3.8.3. Machine Trap Handling CSRs</a></li> +<li><a href="#_machine_configuration_csrs">3.8.4. Machine Configuration CSRs</a></li> +<li><a href="#_machine_physical_memory_protection_csrs">3.8.5. Machine Physical Memory Protection CSRs</a></li> +<li><a href="#_custom_functions_unit_cfu_csrs">3.8.6. Custom Functions Unit (CFU) CSRs</a></li> +<li><a href="#_machine_counter_and_timer_csrs">3.8.7. (Machine) Counter and Timer CSRs</a></li> +<li><a href="#_hardware_performance_monitors_hpm_csrs">3.8.8. Hardware Performance Monitors (HPM) CSRs</a></li> +<li><a href="#_machine_counter_setup_csrs">3.8.9. Machine Counter Setup CSRs</a></li> +<li><a href="#_machine_information_csrs">3.8.10. Machine Information CSRs</a></li> +<li><a href="#_neorv32_specific_csrs">3.8.11. NEORV32-Specific CSRs</a></li> +</ul> +</li> +<li><a href="#_traps_exceptions_and_interrupts">3.9. Traps, Exceptions and Interrupts</a> +<ul class="sectlevel3"> +<li><a href="#_memory_access_exceptions">3.9.1. Memory Access Exceptions</a></li> +<li><a href="#_custom_fast_interrupt_request_lines">3.9.2. Custom Fast Interrupt Request Lines</a></li> +<li><a href="#_neorv32_trap_listing">3.9.3. NEORV32 Trap Listing</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_software_framework">4. Software Framework</a> +<ul class="sectlevel2"> +<li><a href="#_compiler_toolchain">4.1. Compiler Toolchain</a></li> +<li><a href="#_core_libraries">4.2. Core Libraries</a></li> +<li><a href="#_system_view_description_file_svd">4.3. System View Description File (SVD)</a></li> +<li><a href="#_application_makefile">4.4. Application Makefile</a> +<ul class="sectlevel3"> +<li><a href="#_makefile_targets">4.4.1. Makefile Targets</a></li> +<li><a href="#_default_compiler_flags">4.4.2. Default Compiler Flags</a></li> +</ul> +</li> +<li><a href="#_linker_script">4.5. Linker Script</a> +<ul class="sectlevel3"> +<li><a href="#_ram_layout">4.5.1. RAM Layout</a></li> +</ul> +</li> +<li><a href="#_c_standard_library">4.6. C Standard Library</a></li> +<li><a href="#_start_up_code_crt0">4.7. Start-Up Code (crt0)</a> +<ul class="sectlevel3"> +<li><a href="#_early_trap_handler">4.7.1. Early Trap Handler</a></li> +</ul> +</li> +<li><a href="#_executable_image_formats">4.8. Executable Image Formats</a></li> +<li><a href="#_bootloader">4.9. Bootloader</a> +<ul class="sectlevel3"> +<li><a href="#_bootloader_soccpu_requirements">4.9.1. Bootloader SoC/CPU Requirements</a></li> +<li><a href="#_bootloader_flash_requirements">4.9.2. Bootloader Flash Requirements</a></li> +<li><a href="#_bootloader_console">4.9.3. Bootloader Console</a></li> +<li><a href="#_auto_boot_sequence">4.9.4. Auto Boot Sequence</a></li> +<li><a href="#_bootloader_error_codes">4.9.5. Bootloader Error Codes</a></li> +</ul> +</li> +<li><a href="#_neorv32_runtime_environment">4.10. NEORV32 Runtime Environment</a> +<ul class="sectlevel3"> +<li><a href="#_rte_operation">4.10.1. RTE Operation</a></li> +<li><a href="#_using_the_rte">4.10.2. Using the RTE</a></li> +<li><a href="#_default_rte_trap_handlers">4.10.3. Default RTE Trap Handlers</a></li> +<li><a href="#_application_context_handling">4.10.4. Application Context Handling</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_on_chip_debugger_ocd">5. On-Chip Debugger (OCD)</a> +<ul class="sectlevel2"> +<li><a href="#_debug_transport_module_dtm">5.1. Debug Transport Module (DTM)</a></li> +<li><a href="#_debug_module_dm">5.2. Debug Module (DM)</a> +<ul class="sectlevel3"> +<li><a href="#_dm_registers">5.2.1. DM Registers</a></li> +<li><a href="#_dm_cpu_access">5.2.2. DM CPU Access</a></li> +</ul> +</li> +<li><a href="#_debug_authentication">5.3. Debug Authentication</a> +<ul class="sectlevel3"> +<li><a href="#_default_authentication_mechanism">5.3.1. Default Authentication Mechanism</a></li> +</ul> +</li> +<li><a href="#_cpu_debug_mode">5.4. CPU Debug Mode</a> +<ul class="sectlevel3"> +<li><a href="#_cpu_debug_mode_csrs">5.4.1. CPU Debug Mode CSRs</a></li> +</ul> +</li> +<li><a href="#_trigger_module">5.5. Trigger Module</a> +<ul class="sectlevel3"> +<li><a href="#_trigger_module_csrs">5.5.1. Trigger Module CSRs</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_legal">6. Legal</a> +<ul class="sectlevel2"> +<li><a href="#_about">About</a></li> +<li><a href="#_license">License</a></li> +<li><a href="#_proprietary_notice">Proprietary Notice</a></li> +<li><a href="#_disclaimer">Disclaimer</a></li> +<li><a href="#_limitation_of_liability_for_external_links">Limitation of Liability for External Links</a></li> +<li><a href="#_citing">Citing</a></li> +<li><a href="#_acknowledgments">Acknowledgments</a></li> +</ul> +</li> +</ul> +</div> +</div> +<div id="content"> +<div id="preamble"> +<div class="sectionbody"> +<div class="imageblock text-center"> +<div class="content"> +<a class="image" href="https://github.com/stnolting/neorv32"><img src="img/neorv32_logo.png" alt="neorv32 logo"></a> +</div> +</div> +<div class="imageblock text-center"> +<div class="content"> +<a class="image" href="https://riscv.org/"><img src="img/riscv_logo.png" alt="riscv logo" width="350"></a> +</div> +</div> +<div class="paragraph text-center"> +<p><a href="https://github.com/stnolting/neorv32"><span class="image"><img src="https://img.shields.io/badge/GitHub-stnolting%2Fneorv32-ffbd00?style=flat-square&amp;logo=github&amp;" alt="GitHub stnolting%2Fneorv32 ffbd00?style=flat square&amp;logo=github&amp;" title="homepage"></span></a> +<a href="https://github.com/stnolting/neorv32/blob/main/LICENSE"><span class="image"><img src="https://img.shields.io/github/license/stnolting/neorv32?longCache=true&amp;style=flat-square" alt="neorv32?longCache=true&amp;style=flat square" title="license"></span></a> +<a href="https://github.com/stnolting/neorv32/releases/tag/nightly"><span class="image"><img src="https://img.shields.io/badge/data%20sheet-PDF-ffbd00?longCache=true&amp;style=flat-square&amp;logo=asciidoctor" alt="data%20sheet PDF ffbd00?longCache=true&amp;style=flat square&amp;logo=asciidoctor" title="datasheet (pdf)"></span></a> +<a href="https://github.com/stnolting/neorv32/releases/tag/nightly"><span class="image"><img src="https://img.shields.io/badge/user%20guide-PDF-ffbd00?longCache=true&amp;style=flat-square&amp;logo=asciidoctor" alt="user%20guide PDF ffbd00?longCache=true&amp;style=flat square&amp;logo=asciidoctor" title="userguide (pdf)"></span></a> +<a href="https://stnolting.github.io/neorv32/ug"><span class="image"><img src="https://img.shields.io/badge/-HTML-ffbd00?longCache=true&amp;style=flat-square" alt=" HTML ffbd00?longCache=true&amp;style=flat square" title="userguide (html)"></span></a> +<a href="https://stnolting.github.io/neorv32/sw/files.html"><span class="image"><img src="https://img.shields.io/badge/doxygen-HTML-ffbd00?longCache=true&amp;style=flat-square&amp;logo=Doxygen" alt="doxygen HTML ffbd00?longCache=true&amp;style=flat square&amp;logo=Doxygen" title="doxygen"></span></a><br> +<a href="https://github.com/stnolting/neorv32/releases"><span class="image"><img src="https://img.shields.io/github/v/release/stnolting/neorv32?longCache=true&amp;style=flat-square&amp;logo=GitHub" alt="neorv32?longCache=true&amp;style=flat square&amp;logo=GitHub" title="release"></span></a> +<a href="https://github.com/stnolting/neorv32/releases"><span class="image"><img src="https://img.shields.io/github/commits-since/stnolting/neorv32/latest?longCache=true&amp;style=flat-square&amp;logo=GitHub" alt="latest?longCache=true&amp;style=flat square&amp;logo=GitHub" title="release-commits"></span></a></p> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect1"> +<h2 id="_overview">1. Overview</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The NEORV32 RISC-V Processor is an open-source RISC-V compatible processor system that is intended as +<strong>ready-to-go</strong> auxiliary processor within a larger SoC designs or as stand-alone custom / customizable +microcontroller.</p> +</div> +<div class="paragraph"> +<p>The system is highly configurable and provides optional common peripherals like embedded memories, +timers, serial interfaces, general purpose IO ports and an external bus interface to connect custom IP like +memories, NoCs and other peripherals. On-line and in-system debugging is supported by an OpenOCD/gdb +compatible on-chip debugger accessible via JTAG.</p> +</div> +<div class="paragraph"> +<p>Special focus is paid on <strong>execution safety</strong> to provide defined and predictable behavior at any time. +Therefore, the CPU ensures that all memory access are acknowledged and no invalid/malformed instructions +are executed. Whenever an unexpected situation occurs, the application code is informed via hardware exceptions.</p> +</div> +<div class="paragraph"> +<p>The software framework of the processor comes with application makefiles, software libraries for all CPU +and processor features, a bootloader, a runtime environment and several example programs - including a port +of the CoreMark MCU benchmark and the official RISC-V architecture test suite. RISC-V GCC is used as +default toolchain (<a href="https://github.com/stnolting/riscv-gcc-prebuilt">prebuilt toolchains are also provided</a>).</p> +</div> +<div class="paragraph"> +<p>Check out the processor&#8217;s <strong><a href="https://stnolting.github.io/neorv32/ug">online User Guide</a></strong> +that provides hands-on tutorials to get you started.</p> +</div> +<div class="paragraph"> +<p><strong>Structure</strong></p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="2"> +<li> +<p><a href="#_neorv32_processor_soc">NEORV32 Processor (SoC)</a></p> +</li> +<li> +<p><a href="#_neorv32_central_processing_unit_cpu">NEORV32 Central Processing Unit (CPU)</a></p> +</li> +<li> +<p><a href="#_software_framework">Software Framework</a></p> +</li> +<li> +<p><a href="#_on_chip_debugger_ocd">On-Chip Debugger (OCD)</a></p> +</li> +<li> +<p><a href="#_legal">Legal</a></p> +</li> +</ol> +</div> +<div class="paragraph"> +<p><strong>Annotations Types</strong></p> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +Warning +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +Important +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +Note +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +Tip +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +<div class="sect2"> +<h3 id="_rationale">1.1. Rationale</h3> +<h4 id="_why_did_you_make_this" class="discrete">Why did you make this?</h4> +<div class="paragraph"> +<p>For me, processor and CPU architecture designs are fascinating things: they are the magic frontier where software meets hardware. +This project started as something like a <em>journey</em> into this realm to understand how things actually work +down on the very low level and evolved over time to a quite capable system-on-chip.</p> +</div> +<div class="paragraph"> +<p>When I started to dive into the emerging RISC-V ecosystem I felt overwhelmed by the complexity. +As a beginner it is hard to get an overview - especially when you want to setup a minimal platform to tinker with&#8230;&#8203; +Which core to use? How to get the right toolchain? What features do I need? How does booting work? How do I +create an actual executable? How to get that into the hardware? How to customize things? <em>Where to start???</em></p> +</div> +<div class="paragraph"> +<p>This project aims to provide a <em>simple to understand</em> and <em>easy to use</em> yet <em>powerful</em> and <em>flexible</em> platform +that targets FPGA and RISC-V beginners as well as advanced users.</p> +</div> +<h4 id="_why_a_soft_core_processor" class="discrete">Why a <em>soft-core</em> processor?</h4> +<div class="paragraph"> +<p>As a matter of fact soft-core processors <em>cannot</em> compete with discrete (ASIC) processors in terms +of performance, energy efficiency and size. But they do fill a niche in the design space: for example, soft-core +processors allow to implement the <em>control flow part</em> of certain applications (like communication protocol handling) +using software like plain C. This provides high flexibility as software can be easily changed, re-compiled and +re-uploaded again.</p> +</div> +<div class="paragraph"> +<p>Furthermore, the concept of flexibility applies to all aspects of a soft-core processor. The user can add +<em>exactly</em> the features that are required by the application: additional memories, custom interfaces, specialized +co-processors and even user-defined instructions. These application-specific optimization capabilities compensate +for many of the limitations of soft-core processors.</p> +</div> +<h4 id="_why_risc_v" class="discrete">Why RISC-V?</h4> +<div class="imageblock text-left"> +<div class="content"> +<img src="img/riscv_logo.png" alt="riscv logo" width="250"> +</div> +</div> +<div class="quoteblock"> +<blockquote> +<div class="paragraph"> +<p>RISC-V is a free and open ISA enabling a new era of processor innovation through open standard collaboration.</p> +</div> +</blockquote> +<div class="attribution"> +&#8212; RISC-V International<br> +<cite>https://riscv.org/about/</cite> +</div> +</div> +<div class="paragraph"> +<p>Open-source is a great thing! +While open-source has already become quite popular in <em>software</em>, hardware-focused projects still need to catch up. +Although processors and CPUs are the heart of almost every digital system, having a true open-source platform is still +a rarity. RISC-V aims to change that - and even it is <em>just one approach</em>, it helps paving the road for future development.</p> +</div> +<div class="paragraph"> +<p>Furthermore, I highly appreciate the community aspect of RISC-V. The ISA and everything beyond is developed in direct +contact with the community: this includes businesses and professionals but also hobbyist, amateurs and enthusiasts. +Everyone can join discussions and contribute to RISC-V in their very own way.</p> +</div> +<div class="paragraph"> +<p>Finally, I really like the RISC-V ISA itself. It aims to be a clean, orthogonal and "intuitive" ISA that +resembles with the basic concepts of RISC: <em>simple yet effective</em>.</p> +</div> +<h4 id="_yet_another_risc_v_core_what_makes_it_special" class="discrete">Yet another RISC-V core? What makes it special?</h4> +<div class="paragraph"> +<p>The NEORV32 is not based on another (RISC-V) core. It was build entirely from ground up just following the official +ISA specs. The project does not intend to replace certain RISC-V cores or beat existing ones in terms of <em>performance</em> +or <em>size</em>. It was build having a different design goal in mind.</p> +</div> +<div class="paragraph"> +<p>The project aims to provide <em>another option</em> in the RISC-V / soft-core design space with a different performance +vs. size trade-off and a different focus: embrace concepts like documentation, platform-independence / portability, +RISC-V compatibility, extensibility &amp; customization and - last but not least - ease of use.</p> +</div> +<div class="paragraph"> +<p>Furthermore, the NEORV32 pays special focus on <em>execution safety</em> using <a href="#_full_virtualization">Full Virtualization</a>. The CPU aims to +provide fall-backs for <em>everything that could go wrong</em>. This includes malformed instruction words, privilege escalations +and even memory accesses that are checked for address space holes and deterministic response times of memory-mapped +devices. Precise exceptions allow a defined and fully-synchronized state of the CPU at every time an in every situation.</p> +</div> +<div class="paragraph"> +<p>To summarize, this project pursues the following objectives (in rough order of importance):</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>RISC-V-compliance and -compatibility</p> +</li> +<li> +<p>Functionality and features</p> +</li> +<li> +<p>Extensibility</p> +</li> +<li> +<p>Safety and security</p> +</li> +<li> +<p>Minimal area</p> +</li> +<li> +<p>Short critical paths, high operating clock</p> +</li> +<li> +<p>Simplicity / easy to understand</p> +</li> +<li> +<p>Low-power design</p> +</li> +<li> +<p>High overall performance</p> +</li> +</ol> +</div> +<h4 id="_a_multi_cycle_architecture" class="discrete">A multi-cycle architecture?!</h4> +<div class="paragraph"> +<p>The primary goal of many mainstream CPUs is pure performance. Deep pipelines and out-of-order execution are some concepts +to boost performance, while also increasing complexity. In contrast, most CPUs used for teaching are single-cycle designs +since they are probably the most easiest to understand. But what about something in-between?</p> +</div> +<div class="paragraph"> +<p>In terms of energy, throughput, area and maximal clock frequency, multi-cycle architectures are somewhere in between +single-cycle and fully-pipelined designs: they provide higher throughput and clock speed when compared to their +single-cycle counterparts while having less hardware complexity (= area) and thus, less performance, then a fully-pipelined +designs. So I decided to use the multi-cycle-approach because of the following reasons:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Multi-cycle architectures are quite small! There is no need for pipeline hazard detection/resolution logic +(e.g. forwarding). Furthermore, you can "re-use" parts of the core to do several tasks (e.g. the ALU is used for +actual data processing and also for address generation, branch condition check and branch target computation).</p> +</li> +<li> +<p>Single-cycle architectures require memories that can be read asynchronously - a thing that is not feasible to implement +in real-world applications (i.e. FPGA block RAM is entirely synchronous). Furthermore, such designs usually have a very +long critical path tremendously reducing maximal operating frequency.</p> +</li> +<li> +<p>Pipelined designs increase performance by having several instruction "in fly" at the same time. But this also means +there is some kind of "out-of-order" behavior: if an instruction at the end of the pipeline causes an exception +all the instructions in earlier stages have to be invalidated. Potential architectural state changes have to be made <em>undone</em> +requiring additional logic (Spectre and Meltdown&#8230;&#8203;). In a multi-cycle architecture this situation cannot occur since only a +single instruction is being processed ("in-fly") at a time.</p> +</li> +<li> +<p>Having only a single instruction in fly does not only reduce hardware costs, it also simplifies +simulation/verification/debugging, state preservation/restoring during exceptions and extensibility (no need to care +about pipeline hazards) - but of course at the cost of reduced throughput.</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>To counteract the loss of performance implied by a <em>pure</em> multi-cycle architecture, the NEORV32 CPU uses a <em>mixed</em> +approach: instruction-fetch (front-end) and instruction-execution (back-end) are de-coupled to operate independently +of each other. Data is interchanged via a queue building a simple 2-stage pipeline. Each "pipeline" stage in terms is +implemented as multi-cycle architecture to simplify the hardware and to provide <em>precise</em> state control (for example +during exceptions).</p> +</div> +</div> +<div class="sect2"> +<h3 id="_project_key_features">1.2. Project Key Features</h3> +<div class="paragraph"> +<p><strong>Project</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p>all-in-one package: <strong>CPU</strong> + <strong>SoC</strong> + <strong>Software Framework &amp; Tooling</strong></p> +</li> +<li> +<p>completely described in behavioral, platform-independent VHDL - no vendor- or technology-specific primitives, attributes, macros, libraries, etc. are used at all</p> +</li> +<li> +<p>all-Verilog "version" available (auto-generated by GHDL)</p> +</li> +<li> +<p>extensive configuration options for adapting the processor to the requirements of the application</p> +</li> +<li> +<p>highly extensible hardware - on CPU, SoC and system level</p> +</li> +<li> +<p>aims to be as small as possible while being as RISC-V-compliant as possible - with a reasonable area-vs-performance trade-off</p> +</li> +<li> +<p>FPGA friendly (e.g. all internal memories can be mapped to block RAM - including the register file)</p> +</li> +<li> +<p>optimized for high clock frequencies to ease timing closure and integration</p> +</li> +<li> +<p>from zero to <em>"hello world!"</em> - completely open source and documented</p> +</li> +<li> +<p>easy to use even for FPGA/RISC-V starters – intended to <em>work out of the box</em></p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><strong>NEORV32 CPU (the core)</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p>32-bit RISC-V CPU</p> +</li> +<li> +<p>fully compatible to the RISC-V ISA specs. - checked by the <a href="https://github.com/stnolting/neorv32-riscof">official RISCOF architecture tests</a></p> +</li> +<li> +<p>base ISA + privileged ISA + several optional standard and custom ISA extensions</p> +</li> +<li> +<p>option to add user-defined RISC-V instructions as custom ISA extension</p> +</li> +<li> +<p>rich set of customization options (ISA extensions, design goal: performance / area / energy, tuning options, &#8230;&#8203;)</p> +</li> +<li> +<p><a href="#_full_virtualization">Full Virtualization</a> capabilities to increase execution safety</p> +</li> +<li> +<p>official RISC-V open source architecture ID</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><strong>NEORV32 Processor (the SoC)</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p>highly-configurable full-scale microcontroller-like processor system</p> +</li> +<li> +<p>based on the NEORV32 CPU</p> +</li> +<li> +<p>optional standard serial interfaces (UART, TWI, SPI (host and device), 1-Wire)</p> +</li> +<li> +<p>optional timers and counters (watchdog, system timer)</p> +</li> +<li> +<p>optional general purpose IO and PWM; a native NeoPixel(c)-compatible smart LED interface</p> +</li> +<li> +<p>optional embedded memories and caches for data, instructions and bootloader</p> +</li> +<li> +<p>optional external memory interface for custom connectivity</p> +</li> +<li> +<p>optional execute in-place (XIP) module to execute code directly form an external SPI flash</p> +</li> +<li> +<p>optional DMA controller for CPU-independent data transfers</p> +</li> +<li> +<p>optional CRC module to check data integrity</p> +</li> +<li> +<p>on-chip debugger compatible with OpenOCD and GDB including hardware trigger module and optional authentication</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><strong>Software framework</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p>GCC-based toolchain - <a href="https://github.com/stnolting/riscv-gcc-prebuilt">prebuilt toolchains available</a>; application compilation based on GNU makefiles</p> +</li> +<li> +<p>internal bootloader with serial user interface (via UART)</p> +</li> +<li> +<p>core libraries and HAL for high-level usage of the provided functions and peripherals</p> +</li> +<li> +<p>processor-specific runtime environment and several example programs</p> +</li> +<li> +<p>doxygen-based documentation of the software framework; a deployed version is available at <a href="https://stnolting.github.io/neorv32/sw/files.html" class="bare">https://stnolting.github.io/neorv32/sw/files.html</a></p> +</li> +<li> +<p>FreeRTOS port + demos available</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><strong>Extensibility and Customization</strong></p> +</div> +<div class="paragraph"> +<p>The NEORV32 processor is designed to ease customization and extensibility and provides several options for adding +application-specific custom hardware modules and accelerators. The three most common options for adding custom +on-chip modules are listed below.</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><a href="#_processor_external_bus_interface_xbus">Processor-External Bus Interface (XBUS)</a> to attach processor-external IP modules (memories and peripherals)</p> +</li> +<li> +<p><a href="#_custom_functions_subsystem_cfs">Custom Functions Subsystem (CFS)</a> for tightly-coupled processor-internal co-processors</p> +</li> +<li> +<p><a href="#_custom_functions_unit_cfu">Custom Functions Unit (CFU)</a> for custom RISC-V instructions</p> +</li> +</ul> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +A more detailed comparison of the extension/customization options can be found in section +<a href="https://stnolting.github.io/neorv32/ug/#_adding_custom_hardware_modules">Adding Custom Hardware Modules</a> +of the user guide. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_project_folder_structure">1.3. Project Folder Structure</h3> +<div class="paragraph"> +<p>The root directory of the repository is considered the NEORV32 base or home folder (i.e. <code>neorv32/</code>).</p> +</div> +<div class="literalblock"> +<div class="title">Folder Structure</div> +<div class="content"> +<pre>neorv32 - Project home folder +│ +├docs - Project documentation +│├datasheet - AsciiDoc sources for the NEORV32 data sheet +│├figures - Figures and logos +│├references - Data sheets and RISC-V specs +│├sources - Sources for the images in 'figures/' +│└userguide - AsciiDoc sources for the NEORV32 user guide +│ +├rtl - VHDL sources +│├core - Core sources of the CPU &amp; SoC +│├processor_templates - Pre-configured SoC wrappers +│├system_integration - System wrappers and bridges for advanced connectivity +│└test_setups - Minimal test setup "SoCs" used in the User Guide +│ +├sim - Simulation files +│ +└-sw - Software framework + ├bootloader - Sources of the processor-internal bootloader + ├common - Linker script, crt0.S start-up code and central makefile + ├example - Example programs for the core and the SoC modules + │├eclipse - Pre-configured Eclipse IDE project + │└... - Several example programs + ├lib - Processor core library + │├include - NEORV32 core library header files (*.h) + │└source - NEORV32 core library source files (*.c) + ├image_gen - Helper program to generate executables &amp; memory images + ├ocd_firmware - Firmware for the on-chip debugger's "park loop" + ├openocd - OpenOCD configuration files + └svd - Processor system view description file (CMSIS-SVD)</pre> +</div> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_vhdl_file_hierarchy">1.4. VHDL File Hierarchy</h3> +<div class="paragraph"> +<p>All required VHDL hardware source files are located in the project&#8217;s <code>rtl/core</code> folder.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">VHDL Library</div> +All core VHDL files from the list below have to be assigned to a <strong>new library</strong> named <code>neorv32</code>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Compilation Order</div> +See section <a href="#_file_list_files">File-List Files</a> for more information. +</td> +</tr> +</table> +</div> +<div class="literalblock"> +<div class="title">RTL File List and Hierarchy (in alphabetical order)</div> +<div class="content"> +<pre>neorv32_top.vhd - NEORV32 PROCESSOR/SOC TOP ENTITY +│ +├neorv32_cpu.vhd - NEORV32 CPU TOP ENTITY +│├neorv32_cpu_alu.vhd - Arithmetic/logic unit +││├neorv32_cpu_cp_bitmanip.vhd - Bit-manipulation co-processor (B ext.) +││├neorv32_cpu_cp_cfu.vhd - Custom instructions co-processor (Zxcfu ext.) +││├neorv32_cpu_cp_cond.vhd - Integer conditional co-processor (Zicond ext.) +││├neorv32_cpu_cp_crypto.vhd - Scalar cryptographic co-processor (Zk*/Zbk* ext.) +││├neorv32_cpu_cp_fpu.vhd - Floating-point co-processor (Zfinx ext.) +││├neorv32_cpu_cp_muldiv.vhd - Mul/Div co-processor (M ext.) +││└neorv32_cpu_cp_shifter.vhd - Bit-shift co-processor (base ISA) +│├neorv32_cpu_control.vhd - CPU control, exception system and CSRs +││└neorv32_cpu_decompressor.vhd - Compressed instructions decoder (C ext.) +│├neorv32_cpu_lsu.vhd - Load/store unit +│├neorv32_cpu_pmp.vhd - Physical memory protection unit (Smpmp ext.) +│└neorv32_cpu_regfile.vhd - Data register file +│ +├neorv32_boot_rom.vhd - Bootloader ROM +│└neorv32_bootloader_image.vhd - Bootloader ROM memory image (package) +├neorv32_bus.vhd - SoC bus infrastructure modules +├neorv32_cache.vhd - Generic cache module +├neorv32_cfs.vhd - Custom functions subsystem +├neorv32_clint.vhd - Core local interruptor +├neorv32_clockgate.vhd - Generic clock gating switch +├neorv32_crc.vhd - Cyclic redundancy check unit +├neorv32_debug_dm.vhd - on-chip debugger: debug module +├neorv32_debug_auth.vhd - on-chip debugger: authentication module +├neorv32_debug_dtm.vhd - on-chip debugger: debug transfer module +├neorv32_dma.vhd - Direct memory access controller +├neorv32_dmem.vhd - Generic processor-internal data memory +├neorv32_fifo.vhd - Generic FIFO component +├neorv32_gpio.vhd - General purpose input/output port unit +├neorv32_gptmr.vhd - General purpose 32-bit timer +├neorv32_imem.vhd - Generic processor-internal instruction memory +│└neorv32_application_image.vhd - IMEM application initialization image (package) +├neorv32_neoled.vhd - NeoPixel (TM) compatible smart LED interface +├neorv32_onewire.vhd - One-Wire serial interface controller +├neorv32_package.vhd - Main VHDL package file +├neorv32_pwm.vhd - Pulse-width modulation controller +├neorv32_sdi.vhd - Serial data interface controller (SPI device) +├neorv32_slink.vhd - Stream link interface +├neorv32_spi.vhd - Serial peripheral interface controller (SPI host) +├neorv32_sys.vhd - System infrastructure modules +├neorv32_sysinfo.vhd - System configuration information memory +├neorv32_trng.vhd - True random number generator +├neorv32_twi.vhd - Two wire serial interface controller +├neorv32_uart.vhd - Universal async. receiver/transmitter +├neorv32_wdt.vhd - Watchdog timer +├neorv32_xbus.vhd - External (Wishbone) bus interface gateways +├neorv32_xip.vhd - Execute in place module +└neorv32_xirq.vhd - External interrupt controller</pre> +</div> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Replacing Modules for Customization or Optimization</div> +Any module of the core can be replaced by the user for customization purpose. For example, the default IMEM and DMEM +modules as well as the CPU&#8217;s register file can be replaced by technology-specific primitives to optimize energy, speed +and area utilization. The module, which are dedicated for customization, i.e. CFS and CFU can be replaced by +user-defined modules to implement application-specific functionality. +</td> +</tr> +</table> +</div> +<div class="sect3"> +<h4 id="_file_list_files">1.4.1. File-List Files</h4> +<div class="paragraph"> +<p>Most of the RTL sources use <strong>entity instantiation</strong>. Hence, the RTL compile order might be relevant (depending on +the synthesis/simulation tool. Therefore, two file-list files are provided in the <code>rtl</code> folder that list all required +HDL files for the CPU core and for the entire processor and also represent their recommended compile order. +These file-list files can be consumed by EDA tools to simplify project setup.</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>file_list_cpu.f</code> - HDL files and compile order for the CPU core; top module: <code>neorv32_cpu</code></p> +</li> +<li> +<p><code>file_list_soc.f</code> - HDL files and compile order for the entire processor/SoC; top module: <code>neorv32_top</code></p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>A simple bash script <code>generate_file_lists.sh</code> is provided for regenerating the file-lists (using GHDL&#8217;s <em>elaborate</em> command). +This script can also be invoked using the default application makefile (see <a href="#_makefile_targets">Makefile Targets</a>).</p> +</div> +<div class="paragraph"> +<p>By default, the file-list files include a <strong>placeholder</strong> in the path of each included hardware source file. +These placeholders need to be replaced by the actual path before being used. Example:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>default: <code>NEORV32_RTL_PATH_PLACEHOLDER/core/neorv32_package.vhd</code></p> +</li> +<li> +<p>adjusted: <code>path/to/neorv32/rtl/core/neorv32_package.vhd</code></p> +</li> +</ul> +</div> +<div class="listingblock"> +<div class="title">Listing 1. Example: Processing the File-List Files in a Makefile</div> +<div class="content"> +<pre class="highlight"><code class="language-makefile" data-lang="makefile">NEORV32_HOME = path/to/neorv32 <i class="conum" data-value="1"></i><b>(1)</b> +NEORV32_SOC_FILE = $(shell cat $(NEORV32_HOME)/rtl/file_list_soc.f) <i class="conum" data-value="2"></i><b>(2)</b> +NEORV32_SOC_SRCS = $(subst NEORV32_RTL_PATH_PLACEHOLDER, $(NEORV32_HOME)/rtl, $(NEORV32_SOC_FILE)) <i class="conum" data-value="3"></i><b>(3)</b></code></pre> +</div> +</div> +<div class="colist arabic"> +<table> +<tr> +<td><i class="conum" data-value="1"></i><b>1</b></td> +<td>Path to the NEORV32 home folder (i.e. the root folder of the GitHub repository).</td> +</tr> +<tr> +<td><i class="conum" data-value="2"></i><b>2</b></td> +<td>Load the content of the <code>file_list_soc.f</code> file-list into a new variable <code>NEORV32_SOC_FILE</code>.</td> +</tr> +<tr> +<td><i class="conum" data-value="3"></i><b>3</b></td> +<td>Substitute the file-list file&#8217;s path placeholder &#8220;NEORV32_RTL_PATH_PLACEHOLDER&#8221; by the actual path.</td> +</tr> +</table> +</div> +<div class="listingblock"> +<div class="title">Listing 2. Example: Processing the File-List Files in a TCL Script</div> +<div class="content"> +<pre class="highlight"><code class="language-tcl" data-lang="tcl">set file_list_file [read [open "$neorv32_home/rtl/file_list_soc.f" r]] +set file_list [string map [list "NEORV32_RTL_PATH_PLACEHOLDER" "$neorv32_home/rtl"] $file_list_file] +puts "NEORV32 source files:" +puts $file_list</code></pre> +</div> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_vhdl_coding_style">1.5. VHDL Coding Style</h3> +<div class="ulist"> +<ul> +<li> +<p>The entire processor including the CPU core is written in platform-/technology-independent VHDL. +The code makes minimal use of VHDL 2008 features to provide compatibility even for older EDA tools.</p> +</li> +<li> +<p>A single package / library file (<code>neorv32_package.vhd</code>) is used to provide global defines and helper +functions. The specific user-defined configuration is done entirely by the generics of the top entity.</p> +</li> +<li> +<p>Internally, the generics are checked to ensure a correct configuration. Asserts and "sanity checks" are used +to inform the user about the actual processor configuration and potential illegal setting.</p> +</li> +<li> +<p>The code uses <em>entity instation</em> for all internal modules. However, if several "submodules" are specified +within the same file <em>component instantiation</em> is used for those.</p> +</li> +<li> +<p>When instantiating the processor top module (<code>neorv32_top.vhd</code>) in a custom design either entity instantiation or +component instantiation can be used as the NEORV32 package file / library already provides an according component declaration.</p> +</li> +</ul> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Verilog Version</div> +A GHDL-generated all-Verilog version of the processor is available at <a href="https://github.com/stnolting/neorv32-verilog" class="bare">https://github.com/stnolting/neorv32-verilog</a>. +The provided setup generates a synthesizable Verilog netlist for a custom processor configuration. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_fpga_implementation_results">1.6. FPGA Implementation Results</h3> +<div class="paragraph"> +<p>This section shows <strong>exemplary</strong> FPGA implementation results for the NEORV32 CPU and NEORV32 Processor modules.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +The results are generated by manual synthesis runs. Hence, they might not represent the latest version of the processor. +</td> +</tr> +</table> +</div> +<h4 id="_cpu" class="discrete">CPU</h4> +<table class="tableblock frame-all grid-topbot stretch"> +<colgroup> +<col style="width: 20%;"> +<col style="width: 80%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">HW version:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1.7.8.5</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rtl/core/neorv32_cpu.vhd</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">FPGA:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Intel Cyclone IV E <code>EP4CE22F17C6</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Toolchain:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Quartus Prime Lite 21.1</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Constraints:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>no timing constraints</strong>, "balanced optimization", f<sub>max</sub> from "<em>Slow 1200mV 0C Model</em>"</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<colgroup> +<col style="width: 54.5454%;"> +<col style="width: 9.0909%;"> +<col style="width: 9.0909%;"> +<col style="width: 9.0909%;"> +<col style="width: 9.0909%;"> +<col style="width: 9.091%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">CPU ISA Configuration</th> +<th class="tableblock halign-right valign-top">LEs</th> +<th class="tableblock halign-right valign-top">FFs</th> +<th class="tableblock halign-right valign-top">MEM bits</th> +<th class="tableblock halign-right valign-top">DSPs</th> +<th class="tableblock halign-right valign-top"><em>f<sub>max</sub></em></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rv32i_Zicsr</code></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1223</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">607</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">130 MHz</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rv32i_Zicsr_Zicntr</code></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1578</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">773</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">130 MHz</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rv32im_Zicsr_Zicntr</code></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">2087</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">983</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">130 MHz</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rv32imc_Zicsr_Zicntr</code></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">2338</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">992</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">130 MHz</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rv32imcb_Zicsr_Zicntr</code></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">3175</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1247</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">130 MHz</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rv32imcbu_Zicsr_Zicntr</code></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">3186</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1254</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">130 MHz</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rv32imcbu_Zicsr_Zicntr_Zifencei</code></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">3187</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1254</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">130 MHz</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rv32imcbu_Zicsr_Zicntr_Zifencei_Zfinx</code></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">4450</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1906</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">7</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">123 MHz</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rv32imcbu_Zicsr_Zicntr_Zifencei_Zfinx_DebugMode</code></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">4825</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">2018</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">7</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">123 MHz</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Goal-Driven Optimization</div> +The CPU provides further options to reduce the area footprint or to increase performance. +See section <a href="#_processor_top_entity_generics">Processor Top Entity - Generics</a> for more information. Also, take a look at the User Guide section +<a href="https://stnolting.github.io/neorv32/ug/#_application_specific_processor_configuration">Application-Specific Processor Configuration</a>. +</td> +</tr> +</table> +</div> +<h4 id="_processor_modules" class="discrete">Processor - Modules</h4> +<table class="tableblock frame-all grid-topbot stretch"> +<colgroup> +<col style="width: 20%;"> +<col style="width: 80%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">HW version:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1.8.6.7</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rtl/core/neorv32_top.vhd</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">FPGA:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Intel Cyclone IV E <code>EP4CE22F17C6</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Toolchain:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Quartus Prime Lite 21.1</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Constraints:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>no timing constraints</strong>, "balanced optimization"</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 1. Hardware utilization by processor module</caption> +<colgroup> +<col style="width: 13.3333%;"> +<col style="width: 53.3333%;"> +<col style="width: 6.6666%;"> +<col style="width: 6.6666%;"> +<col style="width: 13.3333%;"> +<col style="width: 6.6669%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Module</th> +<th class="tableblock halign-left valign-top">Description</th> +<th class="tableblock halign-right valign-top">LEs</th> +<th class="tableblock halign-right valign-top">FFs</th> +<th class="tableblock halign-right valign-top">MEM bits</th> +<th class="tableblock halign-right valign-top">DSPs</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">BOOT ROM</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Bootloader ROM (4kB)</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">32768</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Bus switch (core)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>SoC bus infrastructure</em></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">28</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">15</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Bus switch (DMA)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>SoC bus infrastructure</em></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">159</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">9</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CFS</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Custom functions subsystem (depends on custom design logic)</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">-</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CRC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Cyclic redundancy check unit</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">130</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">117</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">dCACHE</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Data cache (4 blocks, 64 bytes per block)</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">300</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">167</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">2112</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">DM</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">On-chip debugger - debug module</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">377</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">241</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">DTM</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">On-chip debugger - debug transfer module (JTAG)</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">262</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">220</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">DMA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Direct memory access controller</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">365</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">291</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">DMEM</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Processor-internal data memory (8kB)</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">6</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">65536</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Gateway</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>SoC bus infrastructure</em></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">215</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">91</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">GPIO</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">General purpose input/output ports</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">102</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">98</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">GPTMR</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">General Purpose Timer</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">150</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">105</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">IO Switch</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>SoC bus infrastructure</em></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">217</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">iCACHE</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Instruction cache (2x4 blocks, 64 bytes per block)</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">458</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">296</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">4096</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">IMEM</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Processor-internal instruction memory (16kB)</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">7</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">131072</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CLINT</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Core local interruptor</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">307</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">166</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">NEOLED</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Smart LED Interface (NeoPixel/WS28128) (FIFO_depth=1)</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">171</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">129</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ONEWIRE</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-wire interface</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">105</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">77</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">PWM</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Pulse_width modulation controller (4 channels)</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">91</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">81</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reservation Set</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reservation set controller for LR/SC instructions</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">52</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">33</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">SDI</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Serial data interface</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">103</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">77</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">512</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">SLINK</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Stream link interface (RX/TX FIFO depth=32)</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">96</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">73</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">2048</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">SPI</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Serial peripheral interface</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">137</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">97</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">SYSINFO</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">System configuration information memory</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">11</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">11</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">TRNG</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">True random number generator</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">140</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">108</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">512</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">TWI</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Two-wire interface</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">93</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">UART0, UART1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Universal asynchronous receiver/transmitter 0/1 (FIFO_depth=1)</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">222</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">142</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">WDT</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Watchdog timer</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">107</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">89</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">WISHBONE</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">External memory interface</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">122</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">112</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">XIP</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Execute in place module</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">369</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">276</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">XIRQ</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">External interrupt controller (4 channels)</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">35</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">29</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock">0</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_cpu_performance">1.7. CPU Performance</h3> +<div class="paragraph"> +<p>The performance of the NEORV32 was tested and evaluated using the <a href="https://www.eembc.org/coremark/">Core Mark CPU benchmark</a>. +The according sources can be found in the <code>sw/example/coremark</code> folder. +The resulting CoreMark score is defined as CoreMark iterations per second per MHz.</p> +</div> +<table class="tableblock frame-all grid-topbot stretch"> +<caption class="title">Table 2. Configuration</caption> +<colgroup> +<col style="width: 20%;"> +<col style="width: 80%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">HW version:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1.5.7.10</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">32kB int. IMEM, 16kB int. DMEM, no caches, 100MHz clock</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CoreMark:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">2000 iterations, MEM_METHOD is MEM_STACK</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Compiler:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RISCV32-GCC 10.2.0 (compiled with <code>march=rv32i mabi=ilp32</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Compiler flags:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">default but with <code>-O3</code>, see makefile</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 3. CoreMark results</caption> +<colgroup> +<col style="width: 62.5%;"> +<col style="width: 12.5%;"> +<col style="width: 12.5%;"> +<col style="width: 12.5%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">CPU</th> +<th class="tableblock halign-center valign-top">CoreMark Score</th> +<th class="tableblock halign-center valign-top">CoreMarks/MHz</th> +<th class="tableblock halign-center valign-top">Average CPI</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>small</em> (<code>rv32i_Zicsr_Zifencei</code>)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">33.89</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>0.3389</strong></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>4.04</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>medium</em> (<code>rv32imc_Zicsr_Zifencei</code>)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">62.50</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>0.6250</strong></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>5.34</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>performance</em> (<code>rv32imc_Zicsr_Zifencei</code> + perf. options)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">95.23</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>0.9523</strong></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>3.54</strong></p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>The NEORV32 CPU is based on a multi-cycle architecture. Each instruction is executed in a sequence of +several consecutive micro operations. The average CPI (cycles per instruction) depends on the instruction +mix of a specific applications and also on the available CPU extensions. More information regarding the execution +time of each implemented instruction can be found in section <a href="#_instruction_sets_and_extensions">Instruction Sets and Extensions</a>.</p> +</div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_neorv32_processor_soc">2. NEORV32 Processor (SoC)</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The NEORV32 Processor is based on the NEORV32 CPU. Together with common peripheral +interfaces and embedded memories it provides a RISC-V-based full-scale microcontroller-like SoC platform.</p> +</div> +<div class="imageblock text-center"> +<div class="content"> +<img src="img/neorv32_processor.png" alt="neorv32 processor"> +</div> +<div class="title">Figure 1. The NEORV32 Processor (Block Diagram)</div> +</div> +<div class="paragraph"> +<p><strong>Section Structure</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p><a href="#_processor_top_entity_signals">Processor Top Entity - Signals</a> and <a href="#_processor_top_entity_generics">Processor Top Entity - Generics</a></p> +</li> +<li> +<p><a href="#_processor_clocking">Processor Clocking</a> and <a href="#_processor_reset">Processor Reset</a></p> +</li> +<li> +<p><a href="#_processor_interrupts">Processor Interrupts</a></p> +</li> +<li> +<p><a href="#_address_space">Address Space</a> and <a href="#_boot_configuration">Boot Configuration</a></p> +</li> +<li> +<p><a href="#_processor_internal_modules">Processor-Internal Modules</a></p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><strong>Key Features</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p><em>optional</em> processor-internal data and instruction memories (<a href="#_data_memory_dmem"><strong>DMEM</strong></a>/<a href="#_instruction_memory_imem"><strong>IMEM</strong></a>)</p> +</li> +<li> +<p><em>optional</em> caches (<a href="#_processor_internal_instruction_cache_icache"><strong>I-CACHE</strong></a>, <a href="#_processor_internal_data_cache_dcache"><strong>D-CACHE</strong></a>, +<a href="#_execute_in_place_module_xip"><strong>XIP-CACHE</strong></a>, <a href="#_processor_external_bus_interface_xbus"><strong>XBUS-CACHE</strong></a>)</p> +</li> +<li> +<p><em>optional</em> internal bootloader (<a href="#_bootloader_rom_bootrom"><strong>BOOTROM</strong></a>) with UART console &amp; SPI flash boot option</p> +</li> +<li> +<p><em>optional</em> RISC-V-compatible core local interruptor (<a href="#_core_local_interruptor_clint"><strong>CLINT</strong></a>)</p> +</li> +<li> +<p><em>optional</em> two independent universal asynchronous receivers and transmitters (<a href="#_primary_universal_asynchronous_receiver_and_transmitter_uart0"><strong>UART0</strong></a>, +<a href="#_secondary_universal_asynchronous_receiver_and_transmitter_uart1"><strong>UART1</strong></a>) with optional hardware flow control (RTS/CTS)</p> +</li> +<li> +<p><em>optional</em> serial peripheral interface host controller (<a href="#_serial_peripheral_interface_controller_spi"><strong>SPI</strong></a>) with 8 dedicated CS lines</p> +</li> +<li> +<p><em>optional</em> 8-bit serial data device interface (<a href="#_serial_data_interface_controller_spi"><strong>SDI</strong></a>)</p> +</li> +<li> +<p><em>optional</em> two-wire serial interface controller (<a href="#_two_wire_serial_interface_controller_twi"><strong>TWI</strong></a>), compatible to the I²C standard</p> +</li> +<li> +<p><em>optional</em> two-wire serial device controller (<a href="#_two_wire_serial_device_controller_twd"><strong>TWD</strong></a>), compatible to the I²C standard</p> +</li> +<li> +<p><em>optional</em> general purpose parallel IO port (<a href="#_general_purpose_input_and_output_port_gpio"><strong>GPIO</strong></a>), 64xOut, 64xIn</p> +</li> +<li> +<p><em>optional</em> 32-bit external bus interface, Wishbone b4 / AXI4-Lite compatible (<a href="#_processor_external_bus_interface_xbus"><strong>XBUS</strong></a>)</p> +</li> +<li> +<p><em>optional</em> watchdog timer (<a href="#_watchdog_timer_wdt"><strong>WDT</strong></a>)</p> +</li> +<li> +<p><em>optional</em> PWM controller with up to 16 individual channels (<a href="#_pulse_width_modulation_controller_pwm"><strong>PWM</strong></a>)</p> +</li> +<li> +<p><em>optional</em> ring-oscillator-based true random number generator (<a href="#_true_random_number_generator_trng"><strong>TRNG</strong></a>)</p> +</li> +<li> +<p><em>optional</em> custom functions subsystem for custom co-processor extensions (<a href="#_custom_functions_subsystem_cfs"><strong>CFS</strong></a>)</p> +</li> +<li> +<p><em>optional</em> NeoPixel&#8482;/WS2812-compatible smart LED interface (<a href="#_smart_led_interface_neoled"><strong>NEOLED</strong></a>)</p> +</li> +<li> +<p><em>optional</em> external interrupt controller with up to 32 channels and programmable interrupt triggers (<a href="#_external_interrupt_controller_xirq"><strong>XIRQ</strong></a>)</p> +</li> +<li> +<p><em>optional</em> general purpose 32-bit timer (<a href="#_general_purpose_timer_gptmr"><strong>GPTMR</strong></a>)</p> +</li> +<li> +<p><em>optional</em> execute in-place module (<a href="#_execute_in_place_module_xip"><strong>XIP</strong></a>)</p> +</li> +<li> +<p><em>optional</em> 1-wire serial interface controller (<a href="#_one_wire_serial_interface_controller_onewire"><strong>ONEWIRE</strong></a>), compatible to the 1-wire standard</p> +</li> +<li> +<p><em>optional</em> autonomous direct memory access controller (<a href="#_direct_memory_access_controller_dma"><strong>DMA</strong></a>)</p> +</li> +<li> +<p><em>optional</em> stream link interface (<a href="#_stream_link_interface_slink"><strong>SLINK</strong></a>), AXI4-Stream compatible</p> +</li> +<li> +<p><em>optional</em> cyclic redundancy check unit (<a href="#_cyclic_redundancy_check_crc"><strong>CRC</strong></a>)</p> +</li> +<li> +<p><em>optional</em> on-chip debugger with JTAG TAP (<a href="#_on_chip_debugger_ocd"><strong>OCD</strong></a>)</p> +</li> +<li> +<p><em>optional</em> system configuration information memory to determine hardware configuration via software (<a href="#_system_configuration_information_memory_sysinfo"><strong>SYSINFO</strong></a>)</p> +</li> +</ul> +</div> +<div style="page-break-after: always;"></div> +<div class="sect2"> +<h3 id="_processor_top_entity_signals">2.1. Processor Top Entity - Signals</h3> +<div class="paragraph"> +<p>The following table shows all interface signals of the processor top entity (<code>rtl/core/neorv32_top.vhd</code>). +All signals are of type <code>std_ulogic</code> or <code>std_ulogic_vector</code>, respectively.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Default Values of Inputs</div> +All <em>optional</em> input signals provide default values in case they are not explicitly assigned during instantiation. +The weak driver strengths of VHDL (<code>'L'</code> and <code>'H'</code>) are used to model a pull-down or pull-up resistor. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Variable-Sized Ports</div> +Some peripherals allow to configure the number of channels to-be-implemented by a generic (for example the number +of PWM channels). The according input/output signals have a fixed sized regardless of the actually configured +amount of channels. If less than the maximum number of channels is configured, only the LSB-aligned channels are used: +in case of an <em>input port</em> the remaining bits/channels are left unconnected; in case of an <em>output port</em> the remaining +bits/channels are hardwired to zero. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Tri-State Interfaces</div> +Some interfaces (like the TWI, the TWD and the 1-Wire bus) require explicit tri-state drivers in the final top module. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Input/Output Registers</div> +By default all output signals are driven by register and all input signals are synchronized into the processor&#8217;s +clock domain also using registers. However, for ASIC implementations it is recommended to add another register state +to all inputs and output so the synthesis tool can insert an explicit IO (boundary) scan chain. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 4. NEORV32 Processor Signal List</caption> +<colgroup> +<col style="width: 23.5294%;"> +<col style="width: 11.7647%;"> +<col style="width: 11.7647%;"> +<col style="width: 11.7647%;"> +<col style="width: 41.1765%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Name</th> +<th class="tableblock halign-center valign-top">Width</th> +<th class="tableblock halign-center valign-top">Direction</th> +<th class="tableblock halign-center valign-top">Default</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong>Global Control (<a href="#_processor_clocking">Processor Clocking</a> and <a href="#_processor_reset">Processor Reset</a>)</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>clk_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">global clock line, all registers triggering on rising edge</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rstn_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">global reset, asynchronous, <strong>low-active</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong>JTAG Access Port for <a href="#_on_chip_debugger_ocd">On-Chip Debugger (OCD)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>jtag_tck_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial clock</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>jtag_tdi_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>jtag_tdo_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data output</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>jtag_tms_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">mode select</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_processor_external_bus_interface_xbus">Processor-External Bus Interface (XBUS)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_adr_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">destination address</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_dat_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">read data</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_tag_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">3</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">access tag</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_we_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">write enable ('0' = read transfer)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_sel_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">byte enable</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_stb_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">strobe</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_cyc_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">valid cycle</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_dat_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">write data</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_ack_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">transfer acknowledge</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_err_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">transfer error</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_stream_link_interface_slink">Stream Link Interface (SLINK)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_rx_dat_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX data</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_rx_src_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX source routing information</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_rx_val_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX data valid</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_rx_lst_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX last element of stream</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_rx_rdy_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX ready to receive</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_tx_dat_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX data</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_tx_dst_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX destination routing information</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_tx_val_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX data valid</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_tx_lst_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX last element of stream</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_tx_rdy_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX allowed to send</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_execute_in_place_module_xip">Execute In Place Module (XIP)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xip_csn_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">chip select, low-active</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xip_clk_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial clock</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xip_dat_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xip_dat_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data output</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_general_purpose_input_and_output_port_gpio">General Purpose Input and Output Port (GPIO)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>gpio_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">general purpose parallel output</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>gpio_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">general purpose parallel input</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_primary_universal_asynchronous_receiver_and_transmitter_uart0">Primary Universal Asynchronous Receiver and Transmitter (UART0)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart0_txd_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial transmitter</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart0_rxd_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial receiver</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart0_rts_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX ready to receive new char</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart0_cts_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX allowed to start sending, low-active</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_secondary_universal_asynchronous_receiver_and_transmitter_uart1">Secondary Universal Asynchronous Receiver and Transmitter (UART1)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart1_txd_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial transmitter</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart1_rxd_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial receiver</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart1_rts_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX ready to receive new char</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart1_cts_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX allowed to start sending, low-active</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_serial_peripheral_interface_controller_spi">Serial Peripheral Interface Controller (SPI)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>spi_clk_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">controller clock line</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>spi_dat_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data output</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>spi_dat_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>spi_csn_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">select (low-active)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_serial_data_interface_controller_sdi">Serial Data Interface Controller (SDI)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sdi_clk_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">controller clock line</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sdi_dat_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data output</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sdi_dat_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sdi_csn_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'H'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">chip select, low-active</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_two_wire_serial_interface_controller_twi">Two-Wire Serial Interface Controller (TWI)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twi_sda_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'H'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data line sense input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twi_sda_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data line output (pull low only)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twi_scl_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'H'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial clock line sense input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twi_scl_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial clock line output (pull low only)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_two_wire_serial_device_controller_twd">Two-Wire Serial Device Controller (TWD)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twd_sda_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'H'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data line sense input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twd_sda_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data line output (pull low only)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twd_scl_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'H'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial clock line sense input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twd_scl_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial clock line output (pull low only)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_one_wire_serial_interface_controller_onewire">One-Wire Serial Interface Controller (ONEWIRE)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>onewire_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'H'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-wire bus sense input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>onewire_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-wire bus output (pull low only)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_pulse_width_modulation_controller_pwm">Pulse-Width Modulation Controller (PWM)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>pwm_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">pulse-width modulated channels</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_custom_functions_subsystem_cfs">Custom Functions Subsystem (CFS)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cfs_in_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">custom CFS input signal conduit</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cfs_out_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">custom CFS output signal conduit</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_smart_led_interface_neoled">Smart LED Interface (NEOLED)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neoled_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">asynchronous serial data output</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong>&lt;&lt;_core_local_interruptor_clint&gt;</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>mtime_time_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">CLINT.MTIMER system time output</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_external_interrupt_controller_xirq">External Interrupt Controller (XIRQ)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xirq_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">external interrupt requests</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong>RISC-V Machine-Mode <a href="#_processor_interrupts">Processor Interrupts</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>mtime_irq_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">machine timer interrupt (RISC-V), high-level-active; for chip-internal usage only</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>msw_irq_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">machine software interrupt (RISC-V), high-level-active; for chip-internal usage only</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>mext_irq_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>'L'</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">machine external interrupt (RISC-V), high-level-active; for chip-internal usage only</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_processor_top_entity_generics">2.2. Processor Top Entity - Generics</h3> +<div class="paragraph"> +<p>This section lists all configuration generics of the NEORV32 processor top entity (<code>rtl/neorv32_top.vhd</code>). +These generics allow to configure the system according to your needs. The generics are +used to control implementation of certain CPU extensions and peripheral modules and even allow to +optimize the system for certain design goals like minimal area or maximum performance.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Default Values</div> +All <em>optional</em> configuration generics provide default values in case they are not explicitly assigned during instantiation. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Software Discovery of Configuration</div> +Software can determine the actual CPU configuration via the <a href="#_misa"><strong><code>misa</code></strong></a> and <a href="#_mxisa"><strong><code>mxisa</code></strong></a> CSRs. The Soc/Processor +and can be determined via the <a href="#_system_configuration_information_memory_sysinfo">SYSINFO</a> memory-mapped registers. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Excluded Modules and Extensions</div> +If optional modules (like CPU extensions or peripheral devices) are not enabled the according hardware +will not be synthesized at all. Hence, the disabled modules do not increase area and power requirements +and do not impact timing. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Table Abbreviations</div> +The generic type &#8220;suv(x:y)&#8221; is an abbreviation for &#8220;std_ulogic_vector(x downto y)&#8221;. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 5. NEORV32 Processor Generic List</caption> +<colgroup> +<col style="width: 20%;"> +<col style="width: 13.3333%;"> +<col style="width: 13.3333%;"> +<col style="width: 53.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Name</th> +<th class="tableblock halign-center valign-top">Type</th> +<th class="tableblock halign-center valign-top">Default</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong><a href="#_processor_clocking">Processor Clocking</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CLOCK_FREQUENCY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The clock frequency of the processor&#8217;s <code>clk_i</code> input port in Hertz (Hz).</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>Core Identification</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>JEDEC_ID</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">suv(10:0)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">"00000000000"</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">JEDEC ID; continuation codes plus vendor ID (passed to <a href="#_mvendorid"><strong><code>mvendorid</code></strong></a> CSR and to the <a href="#_debug_transport_module_dtm">Debug Transport Module (DTM)</a>).</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong><a href="#_boot_configuration">Boot Configuration</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOT_MODE_SELECT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Boot mode select; see <a href="#_boot_configuration">Boot Configuration</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOT_ADDR_CUSTOM</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">suv(31:0)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">x"00000000"</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Custom CPU boot address (available if <code>BOOT_MODE_SELECT</code> = 1).</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong><a href="#_on_chip_debugger_ocd">On-Chip Debugger (OCD)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>OCD_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the on-chip debugger and the CPU debug mode.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>OCD_AUTHENTICATION</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement <a href="#_debug_authentication">Debug Authentication</a> module.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>CPU <a href="#_instruction_sets_and_extensions">Instruction Sets and Extensions</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_C</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_c_isa_extension"><code>C</code> ISA Extension</a> (compressed instructions).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_E</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_e_isa_extension"><code>E</code> ISA Extension</a> (reduced register file size).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_M</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_m_isa_extension"><code>M</code> ISA Extension</a> (hardware-based integer multiplication and division).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_U</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_u_isa_extension"><code>U</code> ISA Extension</a> (less-privileged user mode).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zalrsc</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zalrsc_isa_extension"><code>Zalrsc</code> ISA Extension</a> (atomic reservation-set operations).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zba</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zba_isa_extension"><code>Zba</code> ISA Extension</a> (shifted-add bit-manipulation instructions).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zbb</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zbb_isa_extension"><code>Zbb</code> ISA Extension</a> (basic bit-manipulation instructions).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zbkb</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zbkb_isa_extension"><code>Zbkb</code> ISA Extension</a> (scalar cryptography bit manipulation instructions).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zbkc</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zbkc_isa_extension"><code>Zbkc</code> ISA Extension</a> (scalar cryptography carry-less multiplication instructions).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zbkx</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zbkx_isa_extension"><code>Zbkx</code> ISA Extension</a> (scalar cryptography crossbar permutations).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zbs</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zbs_isa_extension"><code>Zbs</code> ISA Extension</a> (single-bit bit-manipulation instructions).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zfinx</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zfinx_isa_extension"><code>Zfinx</code> ISA Extension</a> (single-precision floating-point unit).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zicntr</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">true</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zicntr_isa_extension"><code>Zicntr</code> ISA Extension</a> (CPU base counters).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zicond</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zicond_isa_extension"><code>Zicond</code> ISA Extension</a> (integer conditional instructions).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zihpm</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zihpm_isa_extension"><code>Zihpm</code> ISA Extension</a> (hardware performance monitors).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zknd</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zknd_isa_extension"><code>Zknd</code> ISA Extension</a> (scalar cryptography NIST AES decryption instructions).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zkne</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zkne_isa_extension"><code>Zkne</code> ISA Extension</a> (scalar cryptography NIST AES encryption instructions).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zknh</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zknh_isa_extension"><code>Zknh</code> ISA Extension</a> (scalar cryptography NIST hash instructions).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zksed</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zksed_isa_extension"><code>Zksed</code> ISA Extension</a> (scalar cryptography ShangMi block cyphers).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zksh</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zksh_isa_extension"><code>Zksh</code> ISA Extension</a> (scalar cryptography ShangMi hash functions).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zmmul</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable <a href="#_zmmul_isa_extension"><code>Zmmul</code> - ISA Extension</a> (hardware-based integer multiplication).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Zxcfu</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable NEORV32-specific <a href="#_zxcfu_isa_extension"><code>Zxcfu</code> ISA Extension</a> (custom RISC-V instructions).</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong><a href="#_cpu_tuning_options">CPU Tuning Options</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CPU_CLOCK_GATING_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement sleep-mode clock gating; see sections <a href="#_sleep_mode">Sleep Mode</a> and <a href="#_cpu_clock_gating">CPU Clock Gating</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CPU_FAST_MUL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement fast but large full-parallel multipliers (trying to infer DSP blocks); see section <a href="#_cpu_arithmetic_logic_unit">CPU Arithmetic Logic Unit</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CPU_FAST_SHIFT_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement fast but large full-parallel barrel shifters; see section <a href="#_cpu_arithmetic_logic_unit">CPU Arithmetic Logic Unit</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CPU_RF_HW_RST_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement full hardware reset for register file (use individual FFs instead of BRAM); see section <a href="#_cpu_register_file">CPU Register File</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>Physical Memory Protection (<a href="#_smpmp_isa_extension"><code>Smpmp</code> ISA Extension</a>)</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>PMP_NUM_REGIONS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of implemented PMP regions (0..16).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>PMP_MIN_GRANULARITY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Minimal region granularity in bytes. Has to be a power of two, min 4.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>PMP_TOR_MODE_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">true</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement support for top-of-region (TOR) mode.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>PMP_NAP_MODE_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">true</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement support for naturally-aligned power-of-two (NAPOT &amp; NA4) modes.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>Hardware Performance Monitors (<a href="#_zihpm_isa_extension"><code>Zihpm</code> ISA Extension</a>)</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>HPM_NUM_CNTS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of implemented hardware performance monitor counters (0..13).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>HPM_CNT_WIDTH</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">40</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Total LSB-aligned size of each HPM counter. Min 0, max 64.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>Internal <a href="#_instruction_memory_imem">Instruction Memory (IMEM)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MEM_INT_IMEM_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the processor-internal instruction memory.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MEM_INT_IMEM_SIZE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">16*1024</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Size in bytes of the processor internal instruction memory (use a power of 2).</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>Internal <a href="#_data_memory_dmem">Data Memory (DMEM)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MEM_INT_DMEM_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the processor-internal data memory.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MEM_INT_DMEM_SIZE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">8*1024</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Size in bytes of the processor-internal data memory (use a power of 2).</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong><a href="#_processor_internal_instruction_cache_icache">Processor-Internal Instruction Cache (iCACHE)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ICACHE_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the instruction cache.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ICACHE_NUM_BLOCKS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of blocks ("lines") Has to be a power of two.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ICACHE_BLOCK_SIZE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Size in bytes of each block. Has to be a power of two.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong><a href="#_processor_internal_data_cache_dcache">Processor-Internal Data Cache (dCACHE)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DCACHE_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the data cache.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DCACHE_NUM_BLOCKS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of blocks ("lines"). Has to be a power of two.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DCACHE_BLOCK_SIZE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Size in bytes of each block. Has to be a power of two.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong><a href="#_processor_external_bus_interface_xbus">Processor-External Bus Interface (XBUS)</a> (Wishbone b4 protocol)</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XBUS_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the external bus interface.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XBUS_TIMEOUT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">255</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Clock cycles after which a pending external bus access will auto-terminate and raise a bus fault exception.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XBUS_REGSTAGE_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement XBUS register stages to ease timing closure.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XBUS_CACHE_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the external bus cache.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XBUS_CACHE_NUM_BLOCKS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of blocks ("lines"). Has to be a power of two.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XBUS_CACHE_BLOCK_SIZE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Size in bytes of each block. Has to be a power of two.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong><a href="#_execute_in_place_module_xip">Execute In Place Module (XIP)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XIP_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the execute in-place module.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XIP_CACHE_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement XIP cache.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XIP_CACHE_NUM_BLOCKS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of blocks in XIP cache. Has to be a power of two.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XIP_CACHE_BLOCK_SIZE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">256</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of bytes per XIP cache block. Has to be a power of two, min 4.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong><a href="#_external_interrupt_controller_xirq">External Interrupt Controller (XIRQ)</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XIRQ_NUM_CH</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of channels of the external interrupt controller. Valid values are 0..32.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>Peripheral/IO Modules</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_DISABLE_SYSINFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Disable <a href="#_system_configuration_information_memory_sysinfo">System Configuration Information Memory (SYSINFO)</a> module; ⚠️ not recommended - for advanced users only!</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_GPIO_NUM</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of general purpose input/output pairs of the <a href="#_general_purpose_input_and_output_port_gpio">General Purpose Input and Output Port (GPIO)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_CLINT_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_UART0_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_primary_universal_asynchronous_receiver_and_transmitter_uart0">Primary Universal Asynchronous Receiver and Transmitter (UART0)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_UART0_RX_FIFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">UART0 RX FIFO depth, has to be a power of two, minimum value is 1, max 32768.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_UART0_TX_FIFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">UART0 TX FIFO depth, has to be a power of two, minimum value is 1, max 32768.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_UART1_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_secondary_universal_asynchronous_receiver_and_transmitter_uart1">Secondary Universal Asynchronous Receiver and Transmitter (UART1)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_UART1_RX_FIFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">UART1 RX FIFO depth, has to be a power of two, minimum value is 1, max 32768.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_UART1_TX_FIFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">UART1 TX FIFO depth, has to be a power of two, minimum value is 1, max 32768.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SPI_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_serial_peripheral_interface_controller_spi">Serial Peripheral Interface Controller (SPI)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SPI_FIFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Depth of the <a href="#_serial_peripheral_interface_controller_spi">Serial Peripheral Interface Controller (SPI)</a> FIFO. Has to be a power of two, min 1, max 32768.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SDI_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_serial_data_interface_controller_sdi">Serial Data Interface Controller (SDI)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SDI_FIFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Depth of the <a href="#_serial_data_interface_controller_sdi">Serial Data Interface Controller (SDI)</a> FIFO. Has to be a power of two, min 1, max 32768.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_TWI_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_two_wire_serial_interface_controller_twi">Two-Wire Serial Interface Controller (TWI)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_TWI_FIFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Depth of the <a href="#_two_wire_serial_interface_controller_twi">Two-Wire Serial Interface Controller (TWI)</a> FIFO. Has to be a power of two, min 1, max 32768.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_TWD_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_two_wire_serial_device_controller_twd">Two-Wire Serial Device Controller (TWD)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_TWD_FIFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Depth of the <a href="#_two_wire_serial_device_controller_twd">Two-Wire Serial Device Controller (TWD)</a> FIFO. Has to be a power of two, min 1, max 32768.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_PWM_NUM_CH</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of channels of the <a href="#_pulse_width_modulation_controller_pwm">Pulse-Width Modulation Controller (PWM)</a> to implement (0..16).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_WDT_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_watchdog_timer_wdt">Watchdog Timer (WDT)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_TRNG_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_true_random_number_generator_trng">True Random-Number Generator (TRNG)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_TRNG_FIFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Depth of the TRNG data FIFO. Has to be a power of two, min 1, max 32768.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_CFS_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_custom_functions_subsystem_cfs">Custom Functions Subsystem (CFS)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_CFS_CONFIG</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">suv(31:0)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">x"00000000"</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Conduit" generic to pass user-defined flags to the <a href="#_custom_functions_subsystem_cfs">Custom Functions Subsystem (CFS)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_CFS_IN_SIZE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Size of the <a href="#_custom_functions_subsystem_cfs">Custom Functions Subsystem (CFS)</a> input signal conduit (<code>cfs_in_i</code>).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_CFS_OUT_SIZE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Size of the <a href="#_custom_functions_subsystem_cfs">Custom Functions Subsystem (CFS)</a> output signal conduit (<code>cfs_out_o</code>).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_NEOLED_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_smart_led_interface_neoled">Smart LED Interface (NEOLED)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_NEOLED_TX_FIFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO depth of the the <a href="#_smart_led_interface_neoled">Smart LED Interface (NEOLED)</a>. Has to be a power of two, min 1, max 32768.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_GPTMR_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_general_purpose_timer_gptmr">General Purpose Timer (GPTMR)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_ONEWIRE_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_one_wire_serial_interface_controller_onewire">One-Wire Serial Interface Controller (ONEWIRE)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_ONEWIRE_FIFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Depth of the <a href="#_one_wire_serial_interface_controller_onewire">One-Wire Serial Interface Controller (ONEWIRE)</a> FIFO. Has to be a power of two, min 1, max 32768.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_DMA_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_direct_memory_access_controller_dma">Direct Memory Access Controller (DMA)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SLINK_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_stream_link_interface_slink">Stream Link Interface (SLINK)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SLINK_RX_FIFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SLINK RX FIFO depth, has to be a power of two, minimum value is 1, max 32768.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SLINK_TX_FIFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SLINK TX FIFO depth, has to be a power of two, minimum value is 1, max 32768.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_CRC_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the <a href="#_cyclic_redundancy_check_crc">Cyclic Redundancy Check (CRC)</a> unit.</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_processor_clocking">2.3. Processor Clocking</h3> +<div class="paragraph"> +<p>The processor is implemented as fully-synchronous logic design using a single clock domain that is driven entirely +by the top&#8217;s <code>clk_i</code> signal. This clock signal is used by all internal registers and memories. All of them trigger +on the <strong>rising edge</strong> of this clock signal. External "clocks" like the OCD&#8217;s JTAG clock or the SDI&#8217;s serial clock +are synchronized into the processor&#8217;s clock domain before being used as "general logic signal" (and not as a dedicated clock).</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">CPU Clock Gating</div> +The CPU core provides an optional clock-gating feature to switch off large parts of the core when sleep mode is entered. +See section <a href="#_cpu_clock_gating">CPU Clock Gating</a> for more information. +</td> +</tr> +</table> +</div> +<div class="sect3"> +<h4 id="_peripheral_clocks">2.3.1. Peripheral Clocks</h4> +<div class="paragraph"> +<p>Many processor modules like the UARTs or the timers provide a programmable time base for operations. In order to simplify +the hardware, the processor implements a global "clock generator" (<code>neorv32_sys.vhd</code>) that provides single-cycle <em>clock enables</em> +for certain frequencies which are derived from the main clock. These clock enable signals are synchronous to the system&#8217;s +main clock. The processor modules can use these enables for sub-main-clock operations while still providing a single +clock domain only.</p> +</div> +<div class="paragraph"> +<p>In total, 8 sub-main-clock signals are available. All processor modules, which feature a time-based configuration, provide a +programmable three-bit prescaler select in their control register to select one of the 8 available clocks. The +mapping of the prescaler select bits to the according clock source is shown in the table below. Here, <em>f</em> represents the +processor main clock from the top entity&#8217;s <code>clk_i</code> signal.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<colgroup> +<col style="width: 27.2727%;"> +<col style="width: 9.0909%;"> +<col style="width: 9.0909%;"> +<col style="width: 9.0909%;"> +<col style="width: 9.0909%;"> +<col style="width: 9.0909%;"> +<col style="width: 9.0909%;"> +<col style="width: 9.0909%;"> +<col style="width: 9.091%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Prescaler bits:</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0b000</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0b001</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0b010</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0b011</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0b100</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0b101</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0b110</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0b111</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Resulting clock:</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>f/2</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>f/4</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>f/8</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>f/64</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>f/128</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>f/1024</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>f/2048</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>f/4096</em></p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Power Saving</div> +If no peripheral modules requires a clock signal from the internal clock generator (all according modules are disabled by +clearing the enable bit in the according module&#8217;s control register) the generator is automatically deactivated to reduce +dynamic power consumption. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_processor_reset">2.4. Processor Reset</h3> +<div class="paragraph"> +<p>The NEORV32 processor includes a central reset sequencer (<code>neorv32_sys.vhd</code>) that handles all reset requests +and controls the internal reset nets. The processor-wide reset (aka "system reset") can be triggered by any +of the following sources:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>the asynchronous low-active <code>rstn_i</code> top entity input signal (External source)</p> +</li> +<li> +<p>the <a href="#_on_chip_debugger_ocd">On-Chip Debugger (OCD)</a> (internal source)</p> +</li> +<li> +<p>the <a href="#_watchdog_timer_wdt">Watchdog Timer (WDT)</a> (internal source)</p> +</li> +</ul> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Processor Reset Signal</div> +Make sure to connect the processor&#8217;s reset signal <code>rstn_i</code> to a valid reset source (a button, the "locked" +signal of a PLL, a dedicated reset controller, etc.). +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Reset Cause</div> +The actual reset cause can be determined via the <a href="#_watchdog_timer_wdt">Watchdog Timer (WDT)</a>. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>If any of these sources triggers a reset, the internal system-wide reset will be active for at least 4 clock cycles ensuring +a valid reset of the entire processor. This system reset is asserted <em>asynchronoulsy</em> if triggered by the external +<code>rstn_i</code> signal and is asserted <em>synchronously</em> if triggered by an internal reset source. However, the system reset is +always de-asserted <em>synchronously</em> at the next rising clock edge.</p> +</div> +<div class="paragraph"> +<p>Internally, <strong>all registers</strong> that are not meant for mapping to blockRAM (like the register file) do provide a dedicated and +<strong>low-active asynchronous</strong> hardware reset. This asynchronous reset ensures that the entire processor logic is reset to a +defined state even if the main clock is not operational yet.</p> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_processor_interrupts">2.5. Processor Interrupts</h3> +<div class="paragraph"> +<p>The NEORV32 Processor provides several interrupt request signals (IRQs) for custom platform use.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Trigger Type</div> +All interrupt request lines are <strong>level-triggered and high-active</strong>. Once set, the signal should remain high until +the interrupt request is explicitly acknowledged (e.g. writing to a memory-mapped register). +</td> +</tr> +</table> +</div> +<div class="sect3"> +<h4 id="_risc_v_standard_interrupts">2.5.1. RISC-V Standard Interrupts</h4> +<div class="paragraph"> +<p>The processor setup features the standard machine-level RISC-V interrupt lines for "machine timer interrupt", "machine +software interrupt" and "machine external interrupt". Their usage is defined by the RISC-V privileged architecture +specifications. However, bare-metal system can also repurpose these interrupts. See CPU section +<a href="#_traps_exceptions_and_interrupts">Traps, Exceptions and Interrupts</a> for more information.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<colgroup> +<col style="width: 28.5714%;"> +<col style="width: 71.4286%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Top signal</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>mtime_irq_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine timer interrupt from <em>processor-external</em> CLINT (<code>MTI</code>). This IRQ is only available if the processor-internal <a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a> unit is not implemented.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>msw_irq_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine software interrupt from <em>processor-external</em> CLINT (<code>MSI</code>). This IRQ is only available if the processor-internal <a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a> unit is not implemented.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>mext_irq_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine external interrupt (<code>MEI</code>). This interrupt is used for any processor-external interrupt source (like a platform interrupt controller).</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_neorv32_specific_fast_interrupt_requests">2.5.2. NEORV32-Specific Fast Interrupt Requests</h4> +<div class="paragraph"> +<p>As part of the NEORV32-specific CPU extensions, the processor core features 16 fast interrupt request signals +(<code>FIRQ0</code> to <code>FIRQ15</code>) providing dedicated bits in the <a href="#_mip"><strong><code>mip</code></strong></a> and <a href="#_mie"><strong><code>mie</code></strong></a> CSRs and custom <a href="#_mcause"><strong><code>mcause</code></strong></a> trap codes. +The FIRQ signals are reserved for <em>processor-internal</em> modules only (for example for the communication +interfaces to signal "available incoming data" or "ready to send new data").</p> +</div> +<div class="paragraph"> +<p>The mapping of the 16 FIRQ channels to the according processor-internal modules is shown in the following +table (the channel number also corresponds to the according FIRQ priority: 0 = highest, 15 = lowest):</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 6. NEORV32 Fast Interrupt Request (FIRQ) Mapping</caption> +<colgroup> +<col style="width: 20%;"> +<col style="width: 20%;"> +<col style="width: 60%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Channel</th> +<th class="tableblock halign-left valign-top">Source</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_two_wire_serial_device_controller_twd">TWD</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TWD FIFO level interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_custom_functions_subsystem_cfs">CFS</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Custom functions subsystem (CFS) interrupt (user-defined)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_primary_universal_asynchronous_receiver_and_transmitter_uart0">UART0</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">UART0 RX FIFO level interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">3</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_primary_universal_asynchronous_receiver_and_transmitter_uart0">UART0</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">UART0 TX FIFO level interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_secondary_universal_asynchronous_receiver_and_transmitter_uart1">UART1</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">UART1 RX FIFO level interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">5</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_secondary_universal_asynchronous_receiver_and_transmitter_uart1">UART1</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">UART1 TX FIFO level interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">6</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_serial_peripheral_interface_controller_spi">SPI</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SPI FIFO level interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">7</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_two_wire_serial_interface_controller_twi">TWI</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TWI FIFO level interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_external_interrupt_controller_xirq">XIRQ</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">External interrupt controller interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">9</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_smart_led_interface_neoled">NEOLED</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">NEOLED TX FIFO level interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">10</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_direct_memory_access_controller_dma">DMA</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">DMA transfer done interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">11</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_serial_data_interface_controller_sdi">SDI</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SDI FIFO level interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">12</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_general_purpose_timer_gptmr">GPTMR</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">General purpose timer interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">13</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_one_wire_serial_interface_controller_onewire">ONEWIRE</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-wire idle interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">14</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_stream_link_interface_slink">SLINK</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SLINK RX FIFO level interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">15</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_stream_link_interface_slink">SLINK</a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SLINK TX FIFO level interrupt</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_address_space">2.6. Address Space</h3> +<div class="paragraph"> +<p>As a 32-bit architecture the NEORV32 can access a 4GB physical address space. By default, this address space is +split into four main regions. All accesses to "unmapped" addresses (a.k.a. "the void") are redirected to the +<a href="#_processor_external_bus_interface_xbus">Processor-External Bus Interface (XBUS)</a>. For example, if the internal IMEM is disabled, the accesses to the +<em>entire</em> address space between <code>0x00000000</code> and <code>0x7FFFFFFF</code> are converted into XBUS requests. If the XBUS interface +is not enabled any access to the void will raise a bus error exception.</p> +</div> +<div class="imageblock"> +<div class="content"> +<img src="img/address_space.png" alt="900"> +</div> +<div class="title">Figure 2. NEORV32 Processor Address Space (Default Configuration)</div> +</div> +<div class="paragraph"> +<p>Each region provides specific <em>physical memory attributes</em> ("PMAs") that define the access capabilities (<code>rwxac</code>; +<code>r</code> = read access, <code>w</code> = write access, <code>x</code> - execute access, <code>a</code> = atomic access, <code>c</code> = cached CPU access).</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Custom PMAs</div> +Custom physical memory attributes enforced by the CPU&#8217;s <em>physcial memory protection</em> (<a href="#_smpmp_isa_extension"><code>Smpmp</code> ISA Extension</a>) +can be used to further constrain the physical memory attributes. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 7. Main Address Regions</caption> +<colgroup> +<col style="width: 7.1428%;"> +<col style="width: 28.5714%;"> +<col style="width: 14.2857%;"> +<col style="width: 50.0001%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">#</th> +<th class="tableblock halign-center valign-top">Region</th> +<th class="tableblock halign-center valign-top">PMAs</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">Internal IMEM address space</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>rwxac</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">For instructions / code and constants; mapped to the internal <a href="#_instruction_memory_imem">Instruction Memory (IMEM)</a> if implemented.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">Internal DMEM address space</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>rwxac</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">For application runtime data (heap, stack, etc.); mapped to the internal <a href="#_data_memory_dmem">Data Memory (DMEM)</a>) if implemented.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">Memory-mapped XIP flash</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>r-xac</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Transparent memory-mapped access to an external <a href="#_execute_in_place_module_xip">Execute In Place Module (XIP)</a> SPI flash.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">IO/peripheral address space</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>rwxa-</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Processor-internal peripherals / IO devices including the <a href="#_bootloader_rom_bootrom">Bootloader ROM (BOOTROM)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">The "<strong>void</strong>"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>rwxa[c]</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Unmapped address space. All accesses to this region(s) are redirected to the <a href="#_processor_external_bus_interface_xbus">Processor-External Bus Interface (XBUS)</a> if implemented.</p></td> +</tr> +</tbody> +</table> +<div class="sect3"> +<h4 id="_bus_system">2.6.1. Bus System</h4> +<div class="paragraph"> +<p>The CPU provides individual interfaces for instruction fetch and data access. It can can access all of the 32-bit +address space from each of the interface. Both of them can be equipped with optional caches (<a href="#_processor_internal_data_cache_dcache">Processor-Internal Data Cache (dCACHE)</a> +and <a href="#_processor_internal_instruction_cache_icache">Processor-Internal Instruction Cache (iCACHE)</a>).</p> +</div> +<div class="paragraph"> +<p>The two CPU interfaces are multiplexed by a simple bus switch into a <em>single processor-internal bus</em>. Optionally, +this bus is further multiplexed by another instance of the bus switch so the <a href="#_direct_memory_access_controller_dma">Direct Memory Access Controller (DMA)</a> +controller can also access the entire address space. Accesses via the resulting SoC bus are split by the <a href="#_bus_gateway">Bus Gateway</a> +that redirects accesses to the according main address regions (see table above). Accesses to the processor-internal +IO/peripheral devices are further redirected via a dedicated <a href="#_io_switch">IO Switch</a>.</p> +</div> +<div class="imageblock"> +<div class="content"> +<img src="img/neorv32_bus.png" alt="1300"> +</div> +<div class="title">Figure 3. Processor-Internal Bus Architecture</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Bus System Infrastructure</div> +The components of the processor&#8217;s bus system infrastructure are located in <code>rtl/core/neorv32_bus.vhd</code>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Bus Interface</div> +See sections CPU <a href="#_architecture">Architecture</a> and <a href="#_bus_interface">Bus Interface</a> for more information regarding the CPU bus accesses. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_bus_gateway">2.6.2. Bus Gateway</h4> +<div class="paragraph"> +<p>The central bus gateway serves two purposes: it <strong>redirects</strong> accesses to the according modules (e.g. memory accesses +vs. memory-mapped IO accesses) and also <strong>monitors</strong> all bus transactions. The redirection of access request is based on a +customizable memory map implemented via VHDL constants in the main package file (<code>rtl/core/neorv323_package.vhd</code>):</p> +</div> +<div class="listingblock"> +<div class="title">Listing 3. Main Address Regions Configuration in the VHDL Package File</div> +<div class="content"> +<pre class="highlight"><code class="language-vhdl" data-lang="vhdl">-- Main Address Regions --- +constant mem_imem_base_c : std_ulogic_vector(31 downto 0) := x"00000000"; -- IMEM size via generic +constant mem_dmem_base_c : std_ulogic_vector(31 downto 0) := x"80000000"; -- DMEM size via generic +constant mem_xip_base_c : std_ulogic_vector(31 downto 0) := x"e0000000"; -- page (4 MSBs) only! +constant mem_xip_size_c : natural := 256*1024*1024; +constant mem_io_base_c : std_ulogic_vector(31 downto 0) := x"ffe00000"; +constant mem_io_size_c : natural := 32*64*1024; -- = 32 * iodev_size_c</code></pre> +</div> +</div> +<div class="paragraph"> +<p>Besides the redirecting of bus requests the gateway also implements a bus monitor (aka "the bus keeper") that tracks all +active bus transactions to ensure <em>safe</em> and <em>deterministic</em> operations. Whenever a memory-mapped device is accessed (a +real memory, a memory-mapped IO or some processor-external module) the bus monitor starts an internal countdown. The +accessed module has to respond ("ACK") to the bus request within a bound <strong>time window</strong>. This time window is defined +by a global constant in the processor&#8217;s VHDL package file (<code>rtl/core/neorv323_package.vhd</code>).</p> +</div> +<div class="listingblock"> +<div class="title">Listing 4. Internal Bus Timeout Configuration</div> +<div class="content"> +<pre class="highlight"><code class="language-vhdl" data-lang="vhdl">constant bus_timeout_c : natural := 15;</code></pre> +</div> +</div> +<div class="paragraph"> +<p>This constant defines the <em>maximum</em> number of cycles after which a non-responding bus request (i.e. no <code>ack</code> +and no <code>err</code> signal) will time out raising a bus access fault exception. For example this can happen when accessing +"address space holes" - addresses that are not mapped to any physical module. The resulting exception type corresponds +to the according access type, i.e. instruction fetch access exception, load access exception or store access exception.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">XIP Timeout</div> +Accesses to the memory-mapped XIP flash (via the <a href="#_execute_in_place_module_xip">Execute In Place Module (XIP)</a>) will <em>never</em> time out. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">External Bus Interface Timeout</div> +Accesses that are delegated to the external bus interface have a different maximum timeout value that is defined by an +explicit specific processor generic. See section <a href="#_processor_external_bus_interface_xbus">Processor-External Bus Interface (XBUS)</a> for more information. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_reservation_set_controller">2.6.3. Reservation Set Controller</h4> +<div class="paragraph"> +<p>The reservation set controller is responsible for handling the load-reservate and store-conditional bus transaction that +are triggered by the <code>lr.w</code> (LR) and <code>sc.w</code> (SC) instructions from the CPU&#8217;s <a href="#_zalrsc_isa_extension"><code>Zalrsc</code> ISA Extension</a>.</p> +</div> +<div class="paragraph"> +<p>A "reservation" defines an address or address range that provides a guarding mechanism to support atomic accesses. A new +reservation is registered by the LR instruction. The address provided by this instruction defines the memory location +that is now monitored for atomic accesses. The according SC instruction evaluates the state of this reservation. If +the reservation is still valid the write access triggered by the SC instruction is finally executed and the instruction +return a "success" state (<code>rd</code> = 0). If the reservation has been invalidated the SC instruction will not write to memory +and will return a "failed" state (<code>rd</code> = 1).</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Reservation Set(s) and Granule</div> +The reservation set controller supports only <strong>a single</strong> global reservation set with a <strong>word-aligned 4-byte granule</strong>. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The reservation is invalidated if&#8230;&#8203;</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>an SC instruction is executed that accesses an address <strong>outside</strong> of the reservation set of the previous LR instruction. +This SC instruction will <strong>fail</strong> (not writing to memory).</p> +</li> +<li> +<p>an SC instruction is executed that accesses an address <strong>inside</strong> of the reservation set of the previous LR instruction. +This SC instruction will <strong>succeed</strong> (finally writing to memory).</p> +</li> +<li> +<p>a normal store operation accesses an address <strong>inside</strong> of the current reservation set (by the CPU or by the DMA).</p> +</li> +<li> +<p>a hardware reset is triggered.</p> +</li> +</ul> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Consecutive LR Instructions</div> +If an LR instruction is followed by another LR instruction the reservation set of the former one is overridden +by the reservation set of the latter one. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Bus Access Errors</div> +If the LR operation causes a bus access error (raising a load access exception) the reservation <strong>is registered anyway</strong>. +If the SC operation causes a bus access error (raising a store access exception) an already registered reservation set +<strong>is invalidated anyway</strong>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Strong Semantic</div> +The LR/SC mechanism follows the <em>strong semantic</em> approach: the LR/SC instruction pair fails only if there is a write +access to the referenced memory location between the LR and SC instructions (by the CPU itself or by the DMA). +Context changes, interrupts, traps, etc. do not effect nor invalidate the reservation state at all. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Physical Memory Attributes</div> +The reservation set can be set for <em>any</em> address (only constrained by the configured granularity). This also +includes cached memory, memory-mapped IO devices and processor-external address spaces. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>Bus transactions triggered by the LR instruction register a new reservation set and are delegated to the adressed +memory/device. Bus transactions triggered by the SC remove a reservation set and are forwarded to the adressed +memory/device only if the SC operations succeeds. Otherwise, the access request is not forwarded and a local ACK is +generated to terminate the bus transaction.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">LR/SC Bus Protocol</div> +More information regarding the LR/SC bus transactions and the the according protocol can be found in section +<a href="#_bus_interface">Bus Interface</a> / <a href="#_atomic_accesses">Atomic Accesses</a>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Cache Coherency</div> +Atomic operations <strong>always bypass</strong> the cache using direct/uncached accesses. Care must be taken +to maintain data cache coherency (e.g. by using the <code>fence</code> instruction). +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_io_switch">2.6.4. IO Switch</h4> +<div class="paragraph"> +<p>The IO switch further decodes the address when accessing the processor-internal IO/peripheral devices and forwards +the access request to the according module. Note that a total address space size of 256 bytes is assigned to each +IO module in order to simplify address decoding. The IO-specific address map is also defined in the main VHDL +package file (<code>rtl/core/neorv323_package.vhd</code>).</p> +</div> +<div class="listingblock"> +<div class="title">Listing 5. Exemplary Cut-Out from the IO Address Map</div> +<div class="content"> +<pre class="highlight"><code class="language-vhdl" data-lang="vhdl">-- IO Address Map -- +constant iodev_size_c : natural := 256; -- size of a single IO device (bytes) +constant base_io_cfs_c : std_ulogic_vector(31 downto 0) := x"ffffeb00"; +constant base_io_slink_c : std_ulogic_vector(31 downto 0) := x"ffffec00"; +constant base_io_dma_c : std_ulogic_vector(31 downto 0) := x"ffffed00";</code></pre> +</div> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_boot_configuration">2.7. Boot Configuration</h3> +<div class="paragraph"> +<p>The NEORV32 processor provides some pre-defined boot configurations to adjust system start-up to +the requirements of the application. The actual boot configuration is defined by the <code>BOOT_MODE_SELECT</code> +generic (see <a href="#_processor_top_entity_generics">Processor Top Entity - Generics</a>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 8. NEORV32 Boot Configurations</caption> +<colgroup> +<col style="width: 16.6666%;"> +<col style="width: 16.6666%;"> +<col style="width: 16.6666%;"> +<col style="width: 50.0002%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top"><code>BOOT_MODE_SELECT</code></th> +<th class="tableblock halign-center valign-top">Name</th> +<th class="tableblock halign-center valign-top">Boot address</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0 (default)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">Bootloader</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">Base of internal BOOTROM</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the processor-internal <a href="#_bootloader_rom_bootrom">Bootloader ROM (BOOTROM)</a> as pre-initialized ROM and boot from there.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">Custom Address</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>BOOT_ADDR_CUSTOM</code> generic</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Start booting at user-defined address (<code>BOOT_ADDR_CUSTOM</code> top generic).</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">IMEM Image</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">Base of internal IMEM</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement the processor-internal <a href="#_instruction_memory_imem">Instruction Memory (IMEM)</a> as pre-initialized ROM and boot from there.</p></td> +</tr> +</tbody> +</table> +<div class="sect3"> +<h4 id="_booting_via_bootloader">2.7.1. Booting via Bootloader</h4> +<div class="paragraph"> +<p>This is the most common and thus, the default boot configuration. When selected, the processor-internal +<a href="#_bootloader_rom_bootrom">Bootloader ROM (BOOTROM)</a> is enabled. This ROM contains the executable image (<code>rtl/core/neorv32_bootloader_image.vhd</code>) +of the default NEORV32 <a href="#_bootloader">Bootloader</a> that will be executed right after reset. The bootloader provides an interactive +user console for executable upload as well as an automatic boot-configuration targeting external (SPI) memories.</p> +</div> +<div class="paragraph"> +<p>If the processor-internal <a href="#_instruction_memory_imem">Instruction Memory (IMEM)</a> is enabled it will be implemented as <em>blank</em> RAM.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_boot_from_custom_address">2.7.2. Boot from Custom Address</h4> +<div class="paragraph"> +<p>This is the most flexible boot configuration as it allows the user to specify a custom boot address via the +<code>BOOT_ADDR_CUSTOM</code> generic. Note that this address has to be aligned to 4-byte boundary. The processor will +start executing from the defined address right after reset. For example, this boot configuration ca be used to +execute a <em>custom bootloader</em> from a memory that is attached via the <a href="#_processor_external_bus_interface_xbus">Processor-External Bus Interface (XBUS)</a>.</p> +</div> +<div class="paragraph"> +<p>The <a href="#_bootloader_rom_bootrom">Bootloader ROM (BOOTROM)</a> is not enabled / implement at all. +If the processor-internal <a href="#_instruction_memory_imem">Instruction Memory (IMEM)</a> is enabled it will be implemented as <em>blank</em> RAM.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_boot_imem_image">2.7.3. Boot IMEM Image</h4> +<div class="paragraph"> +<p>This configuration will implement the <a href="#_instruction_memory_imem">Instruction Memory (IMEM)</a> as <em>pre-initialized read-only memory</em> (ROM). +The ROM is initialized during synthesis with the according application image file (<code>rtl/core/neorv32_application_image.vhd</code>). +After reset, the CPU will directly start executing this image. Since the IMEM is implemented as ROM, the executable cannot +be altered at runtime at all.</p> +</div> +<div class="paragraph"> +<p>The <a href="#_bootloader_rom_bootrom">Bootloader ROM (BOOTROM)</a> is not enabled / implement at all.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Internal IMEM is Required</div> +This boot configuration requires the IMEM to be enabled (<code>MEM_INT_IMEM_EN</code> = true). +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Simulation Setup</div> +This boot configuration is handy for simulations as the application software is executed right away without the +need for an explicit initialization / executable upload. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_processor_internal_modules">2.8. Processor-Internal Modules</h3> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Full-Word Write Accesses Only</div> +All peripheral/IO devices should only be accessed in full-word mode (i.e. 32-bit). +Byte or half-word (8/16-bit) write accesses might cause undefined behavior. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<div class="title">IO Module Address Space</div> +<p>Each peripheral/IO module occupies an address space of 64kB bytes. Most devices do not fully utilize this +address space and will <em>mirror</em> the available memory-mapped registers across the entire 64kB address space. +However, accessing memory-mapped registers other than the specified ones should be avoided.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Unimplemented Modules / Address Holes</div> +When accessing an IO device that hast not been implemented (disabled via the according generic) +or when accessing an address that is actually unused, a load/store access fault exception is raised. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Writing to Read-Only Registers</div> +Unless otherwise specified, writing to registers that are listed as read-only does not trigger an exception +as the write access is simply ignored by the corresponding hardware module. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">IO Access Latency</div> +In order to shorten the critical path of the IO system, the IO switch provides register stages for the request and +response buses.Hence, accesses to the processor-internal IO region require two additional clock cycles to complete. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Module Interrupts</div> +Several peripheral/IO devices provide some kind of interrupt. These interrupts are mapped to the CPU&#8217;s +<a href="#_custom_fast_interrupt_request_lines">Custom Fast Interrupt Request Lines</a>. See section <a href="#_processor_interrupts">Processor Interrupts</a> for more information. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">CMSIS System Description View (SVD)</div> +A CMSIS-compatible <strong>System View Description (SVD)</strong> file including all peripherals is available in <code>sw/svd</code>. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +<div class="sect3"> +<h4 id="_instruction_memory_imem">2.8.1. Instruction Memory (IMEM)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_imem.vhd</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">default platform-agnostic instruction memory (RAM or ROM)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_application_image.vhd</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">initialization image (a VHDL package)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>implicitly used</em></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MEM_INT_IMEM_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement processor-internal IMEM when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MEM_INT_IMEM_SIZE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">IMEM size in bytes (use a power of 2)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOT_MODE_SELECT</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement IMEM as ROM when <code>BOOT_MODE_SELECT</code> = 2; see <a href="#_boot_configuration">Boot Configuration</a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">none / read-only if <code>INT_BOOTLOADER_EN = true</code></p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>Implementation of the processor-internal instruction memory is enabled by the processor&#8217;s +<code>MEM_INT_IMEM_EN</code> generic. The total memory size in bytes is defined via the <code>MEM_INT_IMEM_SIZE</code> generic. +Note that this size should be a power of two to optimize physical implementation. If enabled, +the IMEM is mapped to base address <code>0x00000000</code> (see section <a href="#_address_space">Address Space</a>).</p> +</div> +<div class="paragraph"> +<p>By default the IMEM is implemented as true RAM so the content can be modified during run time. This is +required when using the <a href="#_bootloader">Bootloader</a> (or the <a href="#_on_chip_debugger_ocd">On-Chip Debugger (OCD)</a>) so it can update the content of the IMEM at +any time.</p> +</div> +<div class="paragraph"> +<p>Alternatively, the IMEM can be implemented as <strong>pre-initialized read-only memory (ROM)</strong>, so the processor can +directly boot from it after reset. This option is configured via the <code>BOOT_MODE_SELECT</code> generic. See section +<a href="#_boot_configuration">Boot Configuration</a> for more information. The initialization image is embedded into the bitstream during synthesis. +The software framework provides an option to generate and override the default VHDL initialization file +<code>rtl/core/neorv32_application_image.vhd</code>, which is automatically inserted into the IMEM (see <a href="#_makefile_targets">Makefile Targets</a>. +If the IMEM is implemented as RAM (default), the memory block will not be initialized at all.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Platform-Specific Memory Primitives</div> +If required, the default IMEM can be replaced by a platform-/technology-specific primitive to +optimize area utilization, timing and power consumption. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Memory Size</div> +If the configured memory size (via the <code>MEM_INT_IMEM_SIZE</code> generic) is not a power of two the actual memory +size will be auto-adjusted to the next power of two (e.g. configuring a memory size of 60kB will result in a +physical memory size of 64kB). +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Legacy HDL Style</div> +If synthesis fails to infer block RAM for the IMEM, turn on the <code>alt_style_c</code> option inside +the memory&#8217;s VHDL source file. When enabled, a different HDL style is used to describe the memory core. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Read-Only Access</div> +If the IMEM is implemented as ROM any write attempt to it will raise a <em>store access fault</em> exception. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_data_memory_dmem">2.8.2. Data Memory (DMEM)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_dmem.vhd</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">default platform-agnostic data memory</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>implicitly used</em></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MEM_INT_DMEM_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement processor-internal DMEM when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MEM_INT_DMEM_SIZE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">DMEM size in bytes (use a power of 2)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">none</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>Implementation of the processor-internal data memory is enabled by the processor&#8217;s <code>MEM_INT_DMEM_EN</code> +generic. The total memory size in bytes is defined via the <code>MEM_INT_DMEM_SIZE</code> generic. Note that this +size should be a power of two to optimize physical implementation. If the DMEM is implemented, +it is mapped to base address <code>0x80000000</code> by default (see section <a href="#_address_space">Address Space</a>). +The DMEM is always implemented as true RAM.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Platform-Specific Memory Primitives</div> +If required, the default DMEM can be replaced by a platform-/technology-specific primitive to +optimize area utilization, timing and power consumption. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Memory Size</div> +If the configured memory size (via the <code>MEM_INT_DMEM_SIZE</code> generic) is not a power of two the actual memory +size will be auto-adjusted to the next power of two (e.g. configuring a memory size of 60kB will result in a +physical memory size of 64kB). +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Legacy HDL Style</div> +If synthesis fails to infer block RAM for the DMEM, turn on the <code>alt_style_c</code> option inside +the memory&#8217;s VHDL source file. When enabled, a different HDL style is used to describe the memory core. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Execute from RAM</div> +The CPU is capable of executing code also from arbitrary data memory. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_bootloader_rom_bootrom">2.8.3. Bootloader ROM (BOOTROM)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_boot_rom.vhd</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">default platform-agnostic bootloader ROM</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_bootloader_image.vhd</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">initialization image (a VHDL package)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>implicitly used</em></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOT_MODE_SELECT</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement BOOTROM when <code>BOOT_MODE_SELECT</code> = 0; see <a href="#_boot_configuration">Boot Configuration</a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">read-only</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The boot ROM contains the executable image of the default NEORV32 <a href="#_bootloader">Bootloader</a>. When the +<a href="#_boot_configuration">Boot Configuration</a> is set to <em>bootloader</em> mode (0) via the <code>BOOT_MODE_SELECT</code> generic, the +boot ROM is automatically enabled and the CPU boot address is adjusted to the base address of the boot ROM.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Bootloader Image</div> +The bootloader ROM is initialized during synthesis with the default bootloader image +(<code>rtl/core/neorv32_bootloader_image.vhd</code>). The physical size of the ROM is automatically +adjusted to the next power of two of the image size. However, note that the BOOTROM is +constrained to a maximum size of 64kB. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_processor_internal_instruction_cache_icache">2.8.4. Processor-Internal Instruction Cache (iCACHE)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_cache.vhd</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Generic cache module</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>implicitly used</em></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ICACHE_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement processor-internal instruction cache when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ICACHE_NUM_BLOCKS</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">number of cache blocks (pages/lines)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ICACHE_BLOCK_SIZE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">size of a cache block in bytes</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">none</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The processor features an optional instruction cache to improve performance when using memories with high +access latencies. The cache is connected directly to the CPU&#8217;s instruction fetch interface and provides +full-transparent accesses. The cache is direct-mapped and read-only.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Cached/Uncached Accesses</div> +The data cache provides direct accesses (= uncached) to memory in order to access memory-mapped IO (like the +processor-internal IO/peripheral modules). All accesses that target the address range from <code>0xF0000000</code> to <code>0xFFFFFFFF</code> +will not be cached at all (see section <a href="#_address_space">Address Space</a>). Direct/uncached accesses have <strong>lower</strong> priority than +cache block operations to allow continuous burst transfer and also to maintain logical instruction forward +progress / data coherency. Furthermore, atomic load-reservate and store-conditional instructions (<a href="#_zalrsc_isa_extension"><code>Zalrsc</code> ISA Extension</a>) +will always <strong>bypass</strong> the cache. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Caching Internal Memories</div> +The data cache is intended to accelerate data access to <strong>processor-external</strong> memories. +The CPU cache(s) should not be implemented when using only processor-internal data and instruction memories. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Manual Cache Clear/Reload</div> +By executing the <code>fence(.i)</code> instruction the cache is cleared and a reload from main memory is triggered. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Retrieve Cache Configuration from Software</div> +Software can retrieve the cache configuration/layout from the <a href="#_sysinfo_cache_configuration">SYSINFO - Cache Configuration</a> register. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Bus Access Fault Handling</div> +The cache always loads a complete cache block (aligned to the block size) every time a +cache miss is detected. Each cached word from this block provides a single status bit that indicates if the +according bus access was successful or caused a bus error. Hence, the whole cache block remains valid even +if certain addresses inside caused a bus error. If the CPU accesses any of the faulty cache words, an +instruction bus error exception is raised. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_processor_internal_data_cache_dcache">2.8.5. Processor-Internal Data Cache (dCACHE)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_cache.vhd</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Generic cache module</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>implicitly used</em></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DCACHE_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement processor-internal data cache when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DCACHE_NUM_BLOCKS</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">number of cache blocks (pages/lines)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DCACHE_BLOCK_SIZE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">size of a cache block in bytes</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">none</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The processor features an optional data cache to improve performance when using memories with high +access latencies. The cache is connected directly to the CPU&#8217;s data access interface and provides +full-transparent accesses. The cache is direct-mapped and uses "write-allocate" and "write-back" strategies.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Cached/Uncached Accesses</div> +The data cache provides direct accesses (= uncached) to memory in order to access memory-mapped IO (like the +processor-internal IO/peripheral modules). All accesses that target the address range from <code>0xF0000000</code> to <code>0xFFFFFFFF</code> +will not be cached at all (see section <a href="#_address_space">Address Space</a>). Direct/uncached accesses have <strong>lower</strong> priority than +cache block operations to allow continuous burst transfer and also to maintain logical instruction forward +progress / data coherency. Furthermore, atomic load-reservate and store-conditional instructions (<a href="#_zalrsc_isa_extension"><code>Zalrsc</code> ISA Extension</a>) +will always <strong>bypass</strong> the cache. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Caching Internal Memories</div> +The data cache is intended to accelerate data access to <strong>processor-external</strong> memories. +The CPU cache(s) should not be implemented when using only processor-internal data and instruction memories. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Manual Cache Flush/Clear/Reload</div> +By executing the <code>fence(.i)</code> instruction the cache is flushed, cleared and a reload from main memory is triggered. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Retrieve Cache Configuration from Software</div> +Software can retrieve the cache configuration/layout from the <a href="#_sysinfo_cache_configuration">SYSINFO - Cache Configuration</a> register. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Bus Access Fault Handling</div> +The cache always loads a complete cache block (aligned to the block size) every time a +cache miss is detected. Each cached word from this block provides a single status bit that indicates if the +according bus access was successful or caused a bus error. Hence, the whole cache block remains valid even +if certain addresses inside caused a bus error. If the CPU accesses any of the faulty cache words, a +data bus error exception is raised. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_direct_memory_access_controller_dma">2.8.6. Direct Memory Access Controller (DMA)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_dma.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_dma.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_dma.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_DMA_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement DMA when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 10</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">DMA transfer done (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The NEORV32 DMA provides a small-scale scatter/gather direct memory access controller that allows to transfer and +modify data independently of the CPU. A single read/write transfer channel is implemented that is configured via +memory-mapped registers. a configured transfer can either be triggered manually or by a programmable CPU FIRQ interrupt +(see <a href="#_neorv32_specific_fast_interrupt_requests">NEORV32-Specific Fast Interrupt Requests</a>).</p> +</div> +<div class="paragraph"> +<p>The DMA is connected to the central processor-internal bus system (see section <a href="#_address_space">Address Space</a>) and can access the same +address space as the CPU core. It uses <em>interleaving mode</em> accessing the central processor bus only if the CPU does not +currently request and bus access.</p> +</div> +<div class="paragraph"> +<p>The controller can handle different data quantities (e.g. read bytes and write them back as sign-extend words) and can +also change the Endianness of data while transferring.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">DMA Demo Program</div> +A DMA example program can be found in <code>sw/example/demo_dma</code>. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>The DMA provides four memory-mapped interface registers: A status and control register <code>CTRL</code> and three registers for +configuring the actual DMA transfer. The base address of the source data is programmed via the <code>SRC_BASE</code> register. +Vice versa, the base address of the destination data is programmed via the <code>DST_BASE</code>. The third configuration register +<code>TTYPE</code> is use to configure the actual transfer type and the number of elements to transfer.</p> +</div> +<div class="paragraph"> +<p>The DMA is enabled by setting the <code>DMA_CTRL_EN</code> bit of the control register. Manual trigger mode (i.e. the DMA transfer is +triggered by writing to the <code>TTYPE</code> register) is selected if <code>DMA_CTRL_AUTO</code> is cleared. Alternatively, the DMA transfer can +be triggered by a processor internal FIRQ signal if <code>DMA_CTRL_AUTO</code> is set (see section below).</p> +</div> +<div class="paragraph"> +<p>The DMA uses a load-modify-write data transfer process. Data is read from the bus system, internally modified and then written +back to the bus system. This combination is implemented as an atomic progress, so canceling the current transfer by clearing the +<code>DMA_CTRL_EN</code> bit will stop the DMA right after the current load-modify-write operation.</p> +</div> +<div class="paragraph"> +<p>If the DMA controller detects a bus error during operation, it will set either the <code>DMA_CTRL_ERROR_RD</code> (error during +last read access) or <code>DMA_CTRL_ERROR_WR</code> (error during last write access) and will terminate the current transfer. +Software can read the <code>SRC_BASE</code> or <code>DST_BASE</code> register to retrieve the address that caused the according error. +Alternatively, software can read back the <code>NUM</code> bits of the control register to determine the index of the element +that caused the error. The error bits are automatically cleared when starting a new transfer.</p> +</div> +<div class="paragraph"> +<p>When the <code>DMA_CTRL_DONE</code> flag is set the DMA has actually executed a transfer. However, the <code>DMA_CTRL_ERROR_*</code> flags +should also be checked to verify that the executed transfer completed without errors. The <code>DMA_CTRL_DONE</code> flag is +automatically cleared when writing the <code>CTRL</code> register.</p> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +<div class="title">DMA Access Privilege Level</div> +Transactions performed by the DMA are executed as bus transactions with elevated <strong>machine-mode</strong> privilege level. +Note that any physical memory protection rules (<a href="#_smpmp_isa_extension"><code>Smpmp</code> ISA Extension</a>) are not applied to DMA transfers. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Transfer Configuration</strong></p> +</div> +<div class="paragraph"> +<p>If the DMA is set to <strong>manual trigger mode</strong> (<code>DMA_CTRL_AUTO</code> = 0) writing the <code>TTRIG</code> register will start the +programmed DMA transfer. Once started, the DMA will read one data quantity from the source address, processes it internally +and then will write it back to the destination address. The <code>DMA_TTYPE_NUM</code> bits of the <code>TTYPE</code> register define how many +times this process is repeated by specifying the number of elements to transfer.</p> +</div> +<div class="paragraph"> +<p>Optionally, the source and/or destination addresses can be increments according to the data quantities +automatically by setting the according <code>DMA_TTYPE_SRC_INC</code> and/or <code>DMA_TTYPE_DST_INC</code> bit.</p> +</div> +<div class="paragraph"> +<p>Four different transfer quantities are available, which are configured via the <code>DMA_TTYPE_QSEL</code> bits:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>00</code>: Read source data as byte, write destination data as byte</p> +</li> +<li> +<p><code>01</code>: Read source data as byte, write destination data as zero-extended word</p> +</li> +<li> +<p><code>10</code>: Read source data as byte, write destination data as sign-extended word</p> +</li> +<li> +<p><code>11</code>: Read source data as word, write destination data as word</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>Optionally, the DMA controller can automatically convert Endianness of the transferred data if the <code>DMA_TTYPE_ENDIAN</code> +bit is set.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Address Alignment</div> +Make sure to align the source and destination base addresses to the according transfer data quantities. For instance, +word-to-word transfers require that the two LSB of <code>SRC_BASE</code> and <code>DST_BASE</code> are cleared. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Writing to IO Device</div> +When writing data to IO / peripheral devices (for example to the <a href="#_cyclic_redundancy_check_crc">Cyclic Redundancy Check (CRC)</a>) the destination +data quantity has to be set to <strong>word</strong> (32-bit) since all IO registers can only be written in full 32-bit word mode. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Automatic Trigger</strong></p> +</div> +<div class="paragraph"> +<p>As an alternative to the manual trigger mode, the DMA can be set to <strong>automatic trigger mode</strong> starting a pre-configured +transfer if a specific processor-internal peripheral issues a FIRQ interrupt request. The automatic trigger mode is enabled by +setting the <code>CTRL</code> register&#8217;s <code>DMA_CTRL_AUTO</code> bit. In this configuration <em>no</em> transfer is started when writing to the DMA&#8217;s +<code>TTYPE</code> register.</p> +</div> +<div class="paragraph"> +<p>The actually triggering FIRQ channel is configured via the control register&#8217;s <code>DMA_CTRL_FIRQ_SEL</code> bits. Writing a 0 will +select FIRQ channel 0, writing a 1 will select FIRQ channel 1, and so on. See section <a href="#_processor_interrupts">Processor Interrupts</a> +for a list of all FIRQ channels and their according sources.</p> +</div> +<div class="paragraph"> +<p>The FIRQ trigger can operate in two trigger mode configured via the <code>DMA_CTRL_FIRQ_TYPE</code> flag:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>DMA_CTRL_FIRQ_TYPE = 0</code>: trigger the automatic DMA transfer on a rising-edge of the selected FIRQ channel (e.g. trigger +DMA transfer only once)</p> +</li> +<li> +<p><code>DMA_CTRL_FIRQ_TYPE = 1</code>: trigger the automatic DMA transfer when the selected FIRQ channel is active (e.g. trigger +DMA transfer again and again)</p> +</li> +</ul> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">FIRQ Trigger</div> +The DMA transfer will start if a <strong>rising edge</strong> is detected on the configured FIRQ channel. Hence, the DMA is triggered only +once even if the selected FIRQ channel keeps pending. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Memory Barrier / Fence Operation</strong></p> +</div> +<div class="paragraph"> +<p>Optionally, the DMA can issue a FENCE request to the downstream memory system when a transfer has been completed +without errors. This can be used to re-sync caches (flush and reload) and buffers to maintain data coherency. +This automatic fencing is enabled by the setting the control register&#8217;s <code>DMA_CTRL_FENCE</code> bit.</p> +</div> +<div class="paragraph"> +<p><strong>DMA Interrupt</strong></p> +</div> +<div class="paragraph"> +<p>The DMA features a single CPU interrupt that is triggered when the programmed transfer has completed. This +interrupt is also triggered if the DMA encounters a bus error during operation. The interrupt will remain pending +until the control register&#8217;s <code>DMA_CTRL_DONE</code> is cleared (this will happen upon any write access to the control +register).</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 9. DMA Register Map (<code>struct NEORV32_DMA</code>)</caption> +<colgroup> +<col style="width: 13.3333%;"> +<col style="width: 6.6666%;"> +<col style="width: 26.6666%;"> +<col style="width: 6.6666%;"> +<col style="width: 46.6669%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="12"><p class="tableblock"><code>0xffed0000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="12"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code> <code>DMA_CTRL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">DMA module enable</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code> <code>DMA_CTRL_AUTO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable automatic mode (FIRQ-triggered)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2</code> <code>DMA_CTRL_FENCE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Issue a downstream FENCE operation when DMA transfer completes (without errors)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:3</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>8</code> <code>DMA_CTRL_ERROR_RD</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Error during read access, clears when starting a new transfer</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>9</code> <code>DMA_CTRL_ERROR_WR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Error during write access, clears when starting a new transfer</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>10</code> <code>DMA_CTRL_BUSY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">DMA transfer in progress</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>11</code> <code>DMA_CTRL_DONE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/c</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set if a transfer was executed; auto-clears on write-access</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>14:12</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>15</code> <code>DMA_CTRL_FIRQ_TYPE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger on rising-edge (<code>0</code>) or high-level (<code>1</code>) or selected FIRQ channel</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>19:16</code> <code>DMA_CTRL_FIRQ_SEL_MSB : DMA_CTRL_FIRQ_SEL_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">FIRQ trigger select (FIRQ0=0 &#8230;&#8203; FIRQ15=15)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:20</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xffed0004</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SRC_BASE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Source base address (shows the last-accessed source address when read)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xffed0008</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DST_BASE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Destination base address (shows the last-accessed destination address when read)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" rowspan="6"><p class="tableblock"><code>0xffed000c</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="6"><p class="tableblock"><code>TTYPE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>23:0</code> <code>DMA_TTYPE_NUM_MSB : DMA_TTYPE_NUM_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of elements to transfer (shows the last-transferred element index when read)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>26:24</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>28:27</code> <code>DMA_TTYPE_QSEL_MSB : DMA_TTYPE_QSEL_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Quantity select (<code>00</code> = byte &#8594; byte, <code>01</code> = byte &#8594; zero-extended-word, <code>10</code> = byte &#8594; sign-extended-word, <code>11</code> = word &#8594; word)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>29</code> <code>DMA_TTYPE_SRC_INC</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Constant (<code>0</code>) or incrementing (<code>1</code>) source address</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30</code> <code>DMA_TTYPE_DST_INC</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Constant (<code>0</code>) or incrementing (<code>1</code>) destination address</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code> <code>DMA_TTYPE_ENDIAN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Swap Endianness when set</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_processor_external_bus_interface_xbus">2.8.7. Processor-External Bus Interface (XBUS)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_xbus.vhd</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">External bus gateway</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_cache.vhd</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Generic cache module</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>implicitly used</em></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_adr_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">address output (32-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_dat_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">data output (32-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_tag_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">access tag (3-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_we_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">write enable (1-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_sel_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">byte enable (4-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_stb_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">bus strobe (1-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_cyc_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">valid cycle (1-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_dat_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">data input (32-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_ack_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">acknowledge (1-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xbus_err_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">bus error (1-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XBUS_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">enable external bus interface when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XBUS_TIMEOUT</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">number of clock cycles after which an unacknowledged external bus access will auto-terminate (0 = disabled)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XBUS_REGSTAGE_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement XBUS register stages</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XBUS_CACHE_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement the external bus cache</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XBUS_CACHE_NUM_BLOCKS</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">number of blocks ("lines"), has to be a power of two.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XBUS_CACHE_BLOCK_SIZE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">size in bytes of each block, has to be a power of two.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">none</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The external bus interface provides a <strong>Wishbone b4</strong>-compatible on-chip bus interface that is +implemented if the <code>XBUS_EN</code> generic is <code>true</code>. This bus interface can be used to attach processor-external +modules like memories, custom hardware accelerators or additional peripheral devices. +An optional cache module ("XCACHE") can be enabled to improve memory access latency.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Address Mapping</div> +The external interface is <strong>not</strong> mapped to a specific address space. Instead, all CPU memory accesses that +do not target a specific (and actually implemented) processor-internal address region (hence, accessing the "void"; +see section <a href="#_address_space">Address Space</a>) are <strong>redirected</strong> to the external bus interface. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">AXI4-Lite Interface Bridge</div> +A simple bridge that converts the processor&#8217;s XBUS into an AXI4-lite-compatible host interface can +be found in in <code>rtl/system_inegration</code> (<code>xbus2axi4lite_bridge.vhd</code>). +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">AHB3-Lite Interface Bridge</div> +A simple bridge that converts the processor&#8217;s XBUS into an AHB3-lite-compatible host interface can +be found in in <code>rtl/system_inegration</code> (<code>xbus2ahblite_bridge.vhd</code>). +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Wishbone Bus Protocol</strong></p> +</div> +<div class="paragraph"> +<p>The external bus interface complies to the <strong>pipelined Wishbone b4</strong> protocol. Even though this protocol +was explicitly designed to support pipelined transfers, only a single transfer will be "in fly" at once. +Hence, just two types of bus transactions are generated by the XBUS controller (see images below).</p> +</div> +<div class="imageblock"> +<div class="content"> +<img src="img/xbus_write.png" alt="700"> +</div> +<div class="title">Figure 4. XBUS/Wishbone Write Transaction</div> +</div> +<div class="imageblock"> +<div class="content"> +<img src="img/xbus_read.png" alt="700"> +</div> +<div class="title">Figure 5. XBUS/Wishbone Read Transaction</div> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Wishbone "Classic" Protocol</div> +Native support for the "classic" Wishbone protocol has been deprecated. +However, classic mode can still be <em>emulated</em> by connecting the processor&#8217;s <code>xbus_cyc_o</code> directly to the +device&#8217;s / bus system&#8217;s <code>cyc</code> and <code>stb</code> signals (omitting the processor&#8217;s <code>xbus_stb_o</code> signal). +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Endianness</div> +Just like the processor itself the XBUS interface uses <strong>little-endian</strong> byte order. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Wishbone Specs.</div> +A detailed description of the implemented Wishbone bus protocol and the according interface signals +can be found in the data sheet "Wishbone B4 - WISHBONE System-on-Chip (SoC) Interconnection +Architecture for Portable IP Cores". A copy of this document can be found in the <code>docs</code> folder of this +project. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>An accessed XBUS/Wishbone device does not have to respond immediately to a bus request by sending an <code>ACK</code>. +Instead, there is a <strong>time window</strong> where the device has to acknowledge the transfer. This time window +is configured by the <code>XBUS_TIMEOUT</code> generic and it defines the maximum time (in clock cycles) a bus access can +be pending before it is automatically terminated raising an bus fault exception. If <code>XBUS_TIMEOUT</code> is set to zero, +the timeout is disabled and a bus access can take an arbitrary number of cycles to complete. Note that this is not +recommended as a missing ACK will permanently stall the entire processor!</p> +</div> +<div class="paragraph"> +<p>Furthermore, an accesses XBUS/Wishbone device can signal an error condition at any time by setting the <code>ERR</code> signal +high for one cycle. This will also terminate the current bus transaction before raising a CPU bus fault exception.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Register Stage</div> +An optional register stage can be added to the XBUS gateway to break up the critical path easing timing closure. +When <code>XBUS_REGSTAGE_EN</code> is <em>true</em> all outgoing and incoming XBUS signals are registered increasing access latency +by two cycles. Furthermore, all outgoing signals (like the address) will be kept stable if there is no bus access +being initiated. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Access Tag</strong></p> +</div> +<div class="paragraph"> +<p>The XBUS tag signal <code>xbus_tag_o(0)</code> provides additional information about the current access cycle. +It compatible to the the AXI4 <code>ARPROT</code> and <code>AWPROT</code> signals.</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>xbus_tag_o(0)</code> <strong>P</strong>: access is performed from <strong>privileged</strong> mode (machine-mode) when set</p> +</li> +<li> +<p><code>xbus_tag_o(1)</code> <strong>NS</strong>: this bit is hardwired to <code>0</code> indicating a <strong>secure</strong> access</p> +</li> +<li> +<p><code>xbus_tag_o(2)</code> <strong>I</strong>: access is an <strong>instruction</strong> fetch when set; access is a data access when cleared</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><strong>External Bus Cache (X-CACHE)</strong></p> +</div> +<div class="paragraph"> +<p>The XBUS interface provides an optional internal cache that can be used to buffer processor-external accesses. +The x-cache is enabled via the <code>XBUS_CACHE_EN</code> generic. The total size of the cache is split into the number of +cache lines or cache blocks (<code>XBUS_CACHE_NUM_BLOCKS</code> generic) and the line or block size in bytes +(<code>XBUS_CACHE_BLOCK_SIZE</code> generic).</p> +</div> +<div class="listingblock"> +<div class="title">Listing 6. Simplified X-Cache Architecture</div> +<div class="content"> +<pre class="highlight"><code class="language-asciiart" data-lang="asciiart"> Direct Access +----------+ + /|-------------------------&gt;| Register |------------------------&gt;|\ + | | +----------+ | | +Core ---&gt;| | | |---&gt; XBUS + | | +--------------+ +--------------+ +-------------+ | | + \|---&gt;| Host Arbiter |---&gt;| Cache Memory |&lt;---| Bus Arbiter |---&gt;|/ + +--------------+ +--------------+ +-------------+</code></pre> +</div> +</div> +<div class="paragraph"> +<p>The cache uses a direct-mapped architecture that implements "write-allocate" and "write-back" strategies. +The <strong>write-allocate</strong> strategy will fetch the entire referenced block from main memory when encountering +a cache write-miss. The <strong>write-back</strong> strategy will gather all writes locally inside the cache until the according +cache block is about to be replaced. In this case, the entire modified cache block is written back to main memory.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Cached/Uncached Accesses</div> +The data cache provides direct accesses (= uncached) to memory in order to access memory-mapped IO. +All accesses that target the address range from <code>0xF0000000</code> to <code>0xFFFFFFFF</code> +will not be cached at all (see section <a href="#_address_space">Address Space</a>). Direct/uncached accesses have <strong>lower</strong> priority than +cache block operations to allow continuous burst transfer and also to maintain logical instruction forward +progress / data coherency. Furthermore, atomic load-reservate and store-conditional instructions (<a href="#_zalrsc_isa_extension"><code>Zalrsc</code> ISA Extension</a>) +will always <strong>bypass</strong> the cache. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_stream_link_interface_slink">2.8.8. Stream Link Interface (SLINK)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_slink.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_slink.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_slink.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_rx_dat_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX link data (32-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_rx_src_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX routing information (4-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_rx_val_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX link data valid (1-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_rx_lst_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX link last element of stream (1-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_rx_rdy_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX link ready to receive (1-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_tx_dat_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX link data (32-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_tx_dst_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX routing information (4-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_tx_val_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX link data valid (1-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_tx_lst_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX link last element of stream (1-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>slink_tx_rdy_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX link allowed to send (1-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SLINK_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement SLINK when <em>true</em></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SLINK_RX_FIFO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO depth (1..32k), has to be a power of two, min 1</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SLINK_TX_FIFO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO depth (1..32k), has to be a power of two, min 1</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 14</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX SLINK IRQ (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 15</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX SLINK IRQ (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The stream link interface provides independent RX and TX channels for sending and receiving +stream data. Each channel features a configurable internal FIFO to buffer stream data +(<code>IO_SLINK_RX_FIFO</code> for the RX FIFO, <code>IO_SLINK_TX_FIFO</code> for the TX FIFO). The SLINK interface provides higher +bandwidth and less latency than the external bus interface making it ideally suited for coupling custom +stream processors or streaming peripherals.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Example Program</div> +An example program for the SLINK module is available in <code>sw/example/demo_slink</code>. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Interface &amp; Protocol</strong></p> +</div> +<div class="paragraph"> +<p>The SLINK interface consists of four signals for each channel:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>dat</code> contains the actual data word</p> +</li> +<li> +<p><code>val</code> marks the current transmission cycle as valid</p> +</li> +<li> +<p><code>lst</code> marks the current transmission cycle as the last element of a stream</p> +</li> +<li> +<p><code>rdy</code> indicates that the receiver is ready to receive</p> +</li> +<li> +<p><code>src</code> and <code>dst</code> provide source/destination routing information (optional)</p> +</li> +</ul> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">AXI4-Stream Compatibility</div> +The interface names (except for <code>src</code> and <code>dst</code>) and the underlying protocol is compatible to the AXI4-Stream protocol standard. +A processor top entity with a AXI4-Stream-compatible interfaces can be found in <code>rtl/system_inegration</code>. +More information regarding this alternate top entity can be found in in the user guide: +<a href="https://stnolting.github.io/neorv32/ug/#_packaging_the_processor_as_vivado_ip_block" class="bare">https://stnolting.github.io/neorv32/ug/#_packaging_the_processor_as_vivado_ip_block</a> +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>The SLINK provides four interface registers. The control register (<code>CTRL</code>) is used to configure +the module and to check its status. Two individual data registers (<code>DATA</code> and <code>DATA_LAST</code>) +are used to send and receive the link&#8217;s actual data stream.</p> +</div> +<div class="paragraph"> +<p>The <code>DATA</code> register provides direct access to the RX/TX FIFO buffers. Read accesses return data from the RX FIFO. +After reading data from this register the control register&#8217;s <code>SLINK_CTRL_RX_LAST</code> flag can be checked to determine +if the according data word has been marked as "end of stream" via the <code>slink_rx_lst_i</code> signal (this signal is also +buffered by the link&#8217;s FIFO). +Writing to the <code>DATA</code> register will immediately write to the TX link FIFO. +When writing to the <code>TX_DATA_LAST</code> the according data word will also be marked as "end of stream" via the +<code>slink_tx_lst_o</code> signal (this signal is also buffered by the link&#8217;s FIFO).</p> +</div> +<div class="paragraph"> +<p>The configured FIFO sizes can be retrieved by software via the control register&#8217;s <code>SLINK_CTRL_RX_FIFO_*</code> and +<code>SLINK_CTRL_TX_FIFO_*</code> bits.</p> +</div> +<div class="paragraph"> +<p>The SLINK is globally activated by setting the control register&#8217;s enable bit <code>SLINK_CTRL_EN</code>. Clearing this bit will +reset all internal logic and will also clear both FIFOs. The FIFOs can also be cleared manually at any time by +setting the <code>SLINK_CTRL_RX_CLR</code> and/or <code>SLINK_CTRL_TX_CLR</code> bits (these bits will auto-clear).</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">FIFO Overflow</div> +Writing to the TX channel&#8217;s FIFO while it is <em>full</em> will have no effect. Reading from the RX channel&#8217;s FIFO while it +is <em>empty</em> will also have no effect and will return the last received data word. There is no overflow indicator +implemented yet. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The current status of the RX and TX FIFOs can be determined via the control register&#8217;s <code>SLINK_CTRL_RX_*</code> and +<code>SLINK_CTRL_TX_*</code> flags.</p> +</div> +<div class="paragraph"> +<p><strong>Stream Routing Information</strong></p> +</div> +<div class="paragraph"> +<p>Both stream link interface provide an optional port for routing information: <code>slink_tx_dst_o</code> (AXI stream&#8217;s <code>TDEST</code>) +can be used to set a destination address when using a switch/interconnect to access several stream sinks. <code>slink_rx_src_i</code> +(AXI stream&#8217;s <code>TID</code>) can be used to determine the source when several sources can send data via a switch/interconnect. +The routing information can be set/read via the <code>ROUTE</code> interface registers. Note that all routing information is also +fully buffered by the internal RX/TX FIFOs. RX routing information has to be read <strong>after</strong> reading the according RX +data. Vice versa, TX routing information has to be set <strong>before</strong> writing the according TX data.</p> +</div> +<div class="paragraph"> +<p><strong>Interrupts</strong></p> +</div> +<div class="paragraph"> +<p>The SLINK module provides two independent interrupt channels: one for RX events and one for TX events. +The interrupt conditions are based on the according link&#8217;s FIFO status flags and are configured via the control +register&#8217;s <code>SLINK_CTRL_IRQ_*</code> flags. The according interrupt will fire when the module is enabled (<code>SLINK_CTRL_EN</code>) +and the selected interrupt conditions are met. Note that all enabled interrupt conditions are logically OR-ed per +channel. If any enable interrupt conditions becomes active the interrupt will become pending until the +interrupt-causing condition is resolved (e.g. by reading from the RX FIFO).</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 10. SLINK register map (<code>struct NEORV32_SLINK</code>)</caption> +<colgroup> +<col style="width: 15.3846%;"> +<col style="width: 15.3846%;"> +<col style="width: 30.7692%;"> +<col style="width: 7.6923%;"> +<col style="width: 30.7693%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s)</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="22"><p class="tableblock"><code>0xffec0000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="22"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code> <code>SLINK_CTRL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SLINK global enable</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code> <code>SLINK_CTRL_RX_CLR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Clear RX FIFO when set (bit auto-clears)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2</code> <code>SLINK_CTRL_TX_CLR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Clear TX FIFO when set (bit auto-clears)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>3</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>4</code> <code>SLINK_CTRL_RX_LAST</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Last word read from <code>RX_DATA</code> is marked as "end of stream"</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:5</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>8</code> <code>SLINK_CTRL_RX_EMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>9</code> <code>SLINK_CTRL_RX_HALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO at least half full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>10</code> <code>SLINK_CTRL_RX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>11</code> <code>SLINK_CTRL_TX_EMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>12</code> <code>SLINK_CTRL_TX_HALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO at least half full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>13</code> <code>SLINK_CTRL_TX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>15:14</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>16</code> <code>SLINK_CTRL_IRQ_RX_NEMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX interrupt if RX FIFO not empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>17</code> <code>SLINK_CTRL_IRQ_RX_HALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX interrupt if RX FIFO at least half full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>18</code> <code>SLINK_CTRL_IRQ_RX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX interrupt if RX FIFO full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>19</code> <code>SLINK_CTRL_IRQ_TX_EMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX interrupt if TX FIFO empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>20</code> <code>SLINK_CTRL_IRQ_TX_NHALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX interrupt if TX FIFO not at least half full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>21</code> <code>SLINK_CTRL_IRQ_TX_NFULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX interrupt if TX FIFO not full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>23:22</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>27:24</code> <code>SLINK_CTRL_RX_FIFO_MSB : SLINK_CTRL_RX_FIFO_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">log2(RX FIFO size)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:28</code> <code>SLINK_CTRL_TX_FIFO_MSB : SLINK_CTRL_TX_FIFO_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">log2(TX FIFO size)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" rowspan="3"><p class="tableblock"><code>0xffec0004</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="3"><p class="tableblock"><code>ROUTE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>3:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX destination routing information (<code>slink_tx_dst_o</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:4</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX source routing information (<code>slink_rx_src_i</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:8</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">-/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xffec0008</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DATA</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Write data to TX FIFO; read data from RX FIFO</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xffec000c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DATA_LAST</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Write data to TX FIFO (and also set "last" signal); read data from RX FIFO</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_general_purpose_input_and_output_port_gpio">2.8.9. General Purpose Input and Output Port (GPIO)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_gpio.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_gpio.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_gpio.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>gpio_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">64-bit parallel output port</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>gpio_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">64-bit parallel input port</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_GPIO_NUM</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">number of input/output pairs to implement (0..64)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The general purpose parallel IO unit provides a simple parallel input and output port. These ports can be used +chip-externally (for example to drive status LEDs, connect buttons, etc.) or chip-internally to provide control +signals for other IP modules.</p> +</div> +<div class="paragraph"> +<p>The actual number of input/output pairs is defined by the <code>IO_GPIO_NUM</code> generic. When set to zero, the GPIO module +is excluded from synthesis and the output port <code>gpio_o</code> is tied to all-zero. If <code>IO_GPIO_NUM</code> is less than the +maximum value of 64, only the LSB-aligned bits in <code>gpio_o</code> and <code>gpio_i</code> are actually connected while the remaining +bits are tied to zero or are left unconnected, respectively.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Access Atomicity</div> +The GPIO modules uses two memory-mapped registers (each 32-bit) each for accessing the input and +output signals. Since the CPU can only process 32-bit "at once" updating the entire output cannot +be performed within a single clock cycle. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 11. GPIO unit register map (<code>struct NEORV32_GPIO</code>)</caption> +<colgroup> +<col style="width: 16.6666%;"> +<col style="width: 16.6666%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 50.0002%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">Bit(s)</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfffc0000</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>INPUT[0]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">parallel input port pins 31:0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfffc0004</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>INPUT[1]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">parallel input port pins 63:32</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfffc0008</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>OUTPUT[0]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">parallel output port pins 31:0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfffc000c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>OUTPUT[1]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">parallel output port pins 63:32</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_cyclic_redundancy_check_crc">2.8.10. Cyclic Redundancy Check (CRC)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_crc.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_crc.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_crc.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_CRC_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement CRC module when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The cyclic redundancy check unit provides a programmable checksum computation module. The unit operates on +single bytes and can either compute CRC8, CRC16 or CRC32 checksums based on an arbitrary polynomial and +start value.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">CRC Demo Program</div> +A CRC example program (also using CPU-independent DMA transfers) can be found in <code>sw/example/crc_dma</code>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">CPU-Independent Operation</div> +The CRC unit can compute a checksum for an arbitrary memory array without any CPU overhead +by using the processor&#8217;s <a href="#_direct_memory_access_controller_dma">Direct Memory Access Controller (DMA)</a>. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>The module provides four interface registers:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>MODE</code>: selects either CRC8-, CRC16- or CRC32-mode</p> +</li> +<li> +<p><code>POLY</code>: programmable polynomial</p> +</li> +<li> +<p><code>DATA</code>: data input register (single bytes only)</p> +</li> +<li> +<p><code>SREG</code>: the CRC shift register; this register is used to define the start value and to obtain +the final processing result</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>The <code>MODE</code>, <code>POLY</code> and <code>SREG</code> registers need to be programmed before the actual processing can be started. +Writing a byte to <code>DATA</code> will update the current checksum in <code>SREG</code>.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Access Latency</div> +Write access to the CRC module have an increased latency of 8 clock cycles. This additional latency +ensures that the internal bit-serial processing of the current data byte has also been completed when the +transfer is completed. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Data Size</div> +For CRC8-mode only bits <code>7:0</code> of <code>POLY</code> and <code>SREG</code> are relevant; for CRC16-mode only bits <code>15:0</code> are used +and for CRC32-mode the entire 32-bit of <code>POLY</code> and <code>SREG</code> are used. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 12. CRC Register Map (<code>struct NEORV32_CRC</code>)</caption> +<colgroup> +<col style="width: 13.3333%;"> +<col style="width: 6.6666%;"> +<col style="width: 26.6666%;"> +<col style="width: 6.6666%;"> +<col style="width: 46.6669%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>0xffee0000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">CRC mode select (<code>00</code> CRC8, <code>01</code>: CRC16, <code>10</code>: CRC32)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:2</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xffee0004</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>POLY</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">CRC polynomial</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>0xffee0008</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>DATA</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">data input (single byte)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:8</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero, writes are ignored</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xffee000c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SREG</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>32:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">current CRC shift register value (set start value on write)</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_watchdog_timer_wdt">2.8.11. Watchdog Timer (WDT)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_wdt.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_wdt.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_wdt.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_WDT_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement watchdog when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The watchdog (WDT) provides a last resort for safety-critical applications. When a pre-programmed timeout value is reached +a system-wide hardware reset is generated. The internal counter has to be reset explicitly by the application +program every now and then to prevent a timeout.</p> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>The watchdog is enabled by setting the control register&#8217;s <code>WDT_CTRL_EN</code> bit. When this bit is cleared, the internal +timeout counter is reset to zero and no system reset can be triggered by this module.</p> +</div> +<div class="paragraph"> +<p>The internal 32-bit timeout counter is clocked at 1/4096th of the processor&#8217;s main clock (f<sub>WDT</sub>[Hz] = f<sub>main</sub>[Hz] / 4096). +Whenever this counter reaches the programmed timeout value (<code>WDT_CTRL_TIMEOUT</code> bits in the control register) a +hardware reset is triggered.</p> +</div> +<div class="paragraph"> +<p>The watchdog&#8217;s timeout counter is reset ("feeding the watchdog") by writing the reset <strong>PASSWORD</strong> to the <code>RESET</code> register. +The password is hardwired to hexadecimal <code>0x709D1AB3</code>.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Watchdog Operation during Debugging</div> +By default, the watchdog stops operation when the CPU enters debug mode and will resume normal operation after +the CPU has left debug mode again. This will prevent an unintended watchdog timeout during a debug session. However, +the watchdog can also be configured to keep operating even when the CPU is in debug mode by setting the control +register&#8217;s <code>WDT_CTRL_DBEN</code> bit. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Watchdog Operation during CPU Sleep</div> +By default, the watchdog stops operating when the CPU enters sleep mode. However, the watchdog can also be configured +to keep operating even when the CPU is in sleep mode by setting the control register&#8217;s <code>WDT_CTRL_SEN</code> bit. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Configuration Lock</strong></p> +</div> +<div class="paragraph"> +<p>The watchdog control register can be <em>locked</em> to protect the current configuration from being modified. The lock is +activated by setting the <code>WDT_CTRL_LOCK</code> bit. In the locked state any write access to the control register is entirely +ignored (see table below, "writable if locked"). However, read accesses to the control register as well as watchdog resets +are further possible.</p> +</div> +<div class="paragraph"> +<p>The lock bit can only be set if the WDT is already enabled (<code>WDT_CTRL_EN</code> is set). Furthermore, the lock bit can +only be cleared again by a system-wide hardware reset.</p> +</div> +<div class="paragraph"> +<p><strong>Strict Mode</strong></p> +</div> +<div class="paragraph"> +<p>The <em>strict operation mode</em> provides additional safety functions. If the strict mode is enabled by the <code>WDT_CTRL_STRICT</code> +control register bit an <strong>immediate hardware</strong> reset if enforced if</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>the <code>RESET</code> register is written with an incorrect password or</p> +</li> +<li> +<p>the <code>CTRL</code> register is written and the <code>WDT_CTRL_LOCK</code> bit is set.</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><strong>Cause of last Hardware Reset</strong></p> +</div> +<div class="paragraph"> +<p>The cause of the last system hardware reset can be determined via the <code>WDT_CTRL_RCAUSE_*</code> bits:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>WDT_RCAUSE_EXT</code> (0b00): Reset caused by external reset signal/pin</p> +</li> +<li> +<p><code>WDT_RCAUSE_OCD</code> (0b01): Reset caused by on-chip debugger</p> +</li> +<li> +<p><code>WDT_RCAUSE_TMO</code> (0b10): Reset caused by watchdog timeout</p> +</li> +<li> +<p><code>WDT_RCAUSE_ACC</code> (0b11): Reset caused by illegal watchdog access (strict mode)</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 13. WDT register map (<code>struct NEORV32_WDT</code>)</caption> +<colgroup> +<col style="width: 13.3333%;"> +<col style="width: 6.6666%;"> +<col style="width: 26.6666%;"> +<col style="width: 6.6666%;"> +<col style="width: 6.6666%;"> +<col style="width: 13.3333%;"> +<col style="width: 26.667%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-center valign-top">Reset value</th> +<th class="tableblock halign-center valign-top">Writable if locked</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="8"><p class="tableblock"><code>0xfffb0000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="8"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code> <code>WDT_CTRL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">no</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">watchdog enable</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code> <code>WDT_CTRL_LOCK</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">no</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">lock configuration when set, clears only on system reset, can only be set if enable bit is set already</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2</code> <code>WDT_CTRL_DBEN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">no</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set to allow WDT to continue operation even when CPU is in debug mode</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>3</code> <code>WDT_CTRL_SEN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">no</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set to allow WDT to continue operation even when CPU is in sleep mode</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>4</code> <code>WDT_CTRL_STRICT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">no</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set to enable strict mode (force hardware reset if reset password is incorrect or if write access to locked CTRL register)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>6:5</code> <code>WDT_CTRL_RCAUSE_HI : WDT_CTRL_RCAUSE_LO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">cause of last system reset; 0=external reset, 1=ocd-reset, 2=watchdog reset</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7</code> -</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, reads as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:8</code> <code>WDT_CTRL_TIMEOUT_MSB : WDT_CTRL_TIMEOUT_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">no</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">24-bit watchdog timeout value</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfffb0004</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RESET</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">yes</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Write <em>PASSWORD</em> to reset WDT timeout counter</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_core_local_interruptor_clint">2.8.12. Core Local Interruptor (CLINT)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_clint.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_clint.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_clint.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>mtime_irq_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RISC-V machine timer IRQ if CLINT is <strong>not</strong> implemented</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>msw_irq_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RISC-V software IRQ if CLINT is <strong>not</strong> implemented</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>mtime_time_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Current system time (from CLINT&#8217;s MTIMER)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_CLINT_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement core local interruptor when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MTI</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">machine timer interrupt (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MSI</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">machine software interrupt (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The core local interruptor provides machine-level timer and software interrupts for a set of CPU cores (also called <em>harts). +It is compatible to the original SiFive&#174; CLINT specifications and it is also backwards-compatible to the upcoming RISC-V +_Advanced Core Local Interruptor (ACLINT)</em> specifications. In terms of the ACLINT spec the NEORV32 CLINT implements three +<em>devices</em> that are placed next to each other in the address space: an MTIMER and an MSWI device.</p> +</div> +<div class="paragraph"> +<p>The CLINT can support up to 4095 harts. However, the NEORV32 CLINT is configured for a single hart only (yet). +Hence, only the according registers are implemented while the remaining ones are hardwired to zero.</p> +</div> +<div class="paragraph"> +<p><strong>MTIMER Device</strong></p> +</div> +<div class="paragraph"> +<p>The MTIMER device provides a global 64-bit machine timer (<code>NEORV32_CLINT&#8594;MTIME</code>) that increments with every main processor +clock tick. Upon reset the timer is reset to all zero. Each hart provides an individual 64-bit timer-compare register +(<code>NEORV32_CLINT&#8594;MTIMECMP[0]</code> for hart 0). Whenever <code>MTIMECMP &gt;= MTIME</code> the according machine timer interrupt is pending.</p> +</div> +<div class="paragraph"> +<p><strong>MSIW Device</strong></p> +</div> +<div class="paragraph"> +<p>The MSIV provides software interrupts for each hart via hart-individual memory-mapped registers (<code>NEORV32_CLINT&#8594;MSWI[0]</code> for +hart 0). Setting bit 0 of this register will bring the machine software interrupt into pending state.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">External Machine Timer and Software Interrupts</div> +If the NEORV32 CLINT module is disabled (<code>IO_CLINT_EN</code> = <code>false</code>) the core&#8217;s machine timer interrupt and +machine software interrupt become available as processor-external signals (<code>mtime_irq_i</code> and <code>msw_irq_i</code>, respectively). +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 14. CLINT register map (<code>struct NEORV32_CLINT</code>)</caption> +<colgroup> +<col style="width: 21.4285%;"> +<col style="width: 21.4285%;"> +<col style="width: 7.1428%;"> +<col style="width: 7.1428%;"> +<col style="width: 42.8574%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">Bits</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>0xfff40000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>MSWI[0]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">trigger machine software interrupt for hart 0 when set</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">hardwired to zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfff44000</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MTIMECMP[0]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">63:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">64-bit time compare for hart 0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfff4bff8</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MTIME</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">63:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">64-bit global machine timer</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_primary_universal_asynchronous_receiver_and_transmitter_uart0">2.8.13. Primary Universal Asynchronous Receiver and Transmitter (UART0)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_uart.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_uart.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_uart.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart0_txd_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial transmitter output</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart0_rxd_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial receiver input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart0_rts_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">flow control: RX ready to receive, low-active</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart0_cts_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">flow control: RX ready to receive, low-active</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_UART0_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement UART0 when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>UART0_RX_FIFO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO depth (power of 2, min 1)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>UART0_TX_FIFO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO depth (power of 2, min 1)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 2</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 3</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX interrupt (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The NEORV32 UART provides a standard serial interface with independent transmitter and receiver channels, each +equipped with a configurable FIFO. The transmission frame is fixed to <strong>8N1</strong>: 8 data bits, no parity bit, 1 stop +bit. The actual transmission rate (Baud rate) is programmable via software. The module features two memory-mapped +registers: <code>CTRL</code> and <code>DATA</code>. These are used for configuration, status check and data transfer.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Standard Console</div> +All default example programs and software libraries of the NEORV32 software framework (including the bootloader +and the runtime environment) use the primary UART (<em>UART0</em>) as default user console interface. Furthermore, UART0 +is used to implement the "standard consoles" (<code>STDIN</code>, <code>STDOUT</code> and <code>STDERR</code>). +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>RX and TX FIFOs</strong></p> +</div> +<div class="paragraph"> +<p>The UART provides individual data FIFOs for RX and TX to allow data transmission without CPU intervention. +The sizes of these FIFOs can be configured via the according configuration generics (<code>UART0_RX_FIFO</code> and <code>UART0_TX_FIFO</code>). +Both FIFOs a re automatically cleared when disabling the module via the <code>UART_CTRL_EN</code> flag. However, the FIFOs can +also be cleared individually by setting the <code>UART_CTRL_RX_CLR</code> / <code>UART_CTRL_TX_CLR</code> flags.</p> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>The module is enabled by setting the <code>UART_CTRL_EN</code> bit in the UART0 control register <code>CTRL</code>. The Baud rate +is configured via a 10-bit <code>UART_CTRL_BAUDx</code> baud divisor (<code>baud_div</code>) and a 3-bit <code>UART_CTRL_PRSCx</code> +clock prescaler (<code>clock_prescaler</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 15. UART0 Clock Configuration</caption> +<colgroup> +<col style="width: 33.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3336%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"><strong><code>UART_CTRL_PRSCx</code></strong></th> +<th class="tableblock halign-center valign-top"><code>0b000</code></th> +<th class="tableblock halign-center valign-top"><code>0b001</code></th> +<th class="tableblock halign-center valign-top"><code>0b010</code></th> +<th class="tableblock halign-center valign-top"><code>0b011</code></th> +<th class="tableblock halign-center valign-top"><code>0b100</code></th> +<th class="tableblock halign-center valign-top"><code>0b101</code></th> +<th class="tableblock halign-center valign-top"><code>0b110</code></th> +<th class="tableblock halign-center valign-top"><code>0b111</code></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Resulting <code>clock_prescaler</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">128</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2048</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4096</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><em><strong>Baud rate</strong></em> = (<em>f<sub>main</sub>[Hz]</em> / <code>clock_prescaler</code>) / (<code>baud_div</code> + 1)</p> +</div> +<div class="paragraph"> +<p>The control register&#8217;s <code>UART_CTRL_RX_*</code> and <code>UART_CTRL_TX_*</code> flags provide information about the RX and TX FIFO fill level. +Disabling the module via the <code>UART_CTRL_EN</code> bit will also clear these FIFOs.</p> +</div> +<div class="paragraph"> +<p>A new TX transmission is started by writing to the <code>DATA</code> register. The +transfer is completed when the <code>UART_CTRL_TX_BUSY</code> control register flag returns to zero. RX data is available when +the <code>UART_CTRL_RX_NEMPTY</code> flag becomes set. The <code>UART_CTRL_RX_OVER</code> will be set if the RX FIFO overflows. This flag +is cleared only by disabling the module via <code>UART_CTRL_EN</code>.</p> +</div> +<div class="paragraph"> +<p><strong>UART Interrupts</strong></p> +</div> +<div class="paragraph"> +<p>The UART module provides independent interrupt channels for RX and TX. These interrupts are triggered by certain RX and TX +FIFO levels. The actual configuration is programmed independently for the RX and TX interrupt channel via the control register&#8217;s +<code>UART_CTRL_IRQ_RX_*</code> and <code>UART_CTRL_IRQ_TX_*</code> bits:</p> +</div> +<div class="olist arabic"> +<ol class="arabic"> +<li> +<p><strong>RX IRQ</strong> The RX interrupt can be triggered by three different RX FIFO level states: If <code>UART_CTRL_IRQ_RX_NEMPTY</code> is set the +interrupt fires if the RX FIFO is <em>not</em> empty (e.g. when incoming data is available). If <code>UART_CTRL_IRQ_RX_HALF</code> is set the RX IRQ +fires if the RX FIFO is at least half-full. If <code>UART_CTRL_IRQ_RX_FULL</code> the interrupt fires if the RX FIFO is full. Note that all +these programmable conditions are logically OR-ed (interrupt fires if any enabled conditions is true).</p> +</li> +<li> +<p><strong>TX IRQ</strong> The TX interrupt can be triggered by two different TX FIFO level states: If <code>UART_CTRL_IRQ_TX_EMPTY</code> is set the +interrupt fires if the TX FIFO is empty. If <code>UART_CTRL_IRQ_TX_NHALF</code> is set the interrupt fires if the TX FIFO is <em>not</em> at least +half full. Note that all these programmable conditions are logically OR-ed (interrupt fires if any enabled conditions is true).</p> +</li> +</ol> +</div> +<div class="paragraph"> +<p>Once an UART interrupt has fired it remains pending until the actual cause of the interrupt is resolved; for +example if just the <code>UART_CTRL_IRQ_RX_NEMPTY</code> bit is set, the RX interrupt will keep firing until the RX FIFO is empty again.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">RX/TX FIFO Size</div> +Software can retrieve the configured sizes of the RX and TX FIFO via the according <code>UART_DATA_RX_FIFO_SIZE</code> and +<code>UART_DATA_TX_FIFO_SIZE</code> bits from the <code>DATA</code> register. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>RTS/CTS Hardware Flow Control</strong></p> +</div> +<div class="paragraph"> +<p>The NEORV32 UART supports optional hardware flow control using the standard CTS <code>uart0_cts_i</code> ("clear to send") and RTS +<code>uart0_rts_o</code> ("ready to send" / "ready to receive (RTR)") signals. Both signals are low-active. +Hardware flow control is enabled by setting the <code>UART_CTRL_HWFC_EN</code> bit in the modules control register <code>CTRL</code>.</p> +</div> +<div class="paragraph"> +<p>When hardware flow control is enabled:</p> +</div> +<div class="olist arabic"> +<ol class="arabic"> +<li> +<p>The UART&#8217;s transmitter will not start a new transmission until the <code>uart0_cts_i</code> signal goes low. +During this time, the UART busy flag <code>UART_CTRL_TX_BUSY</code> remains set.</p> +</li> +<li> +<p>The UART will set <code>uart0_rts_o</code> signal low if the RX FIFO is <strong>less than half full</strong> (to have a wide safety margin). +As long as this signal is low, the connected device can send new data. <code>uart0_rts_o</code> is always low if the hardware flow-control +is disabled. Disabling the UART (setting <code>UART_CTRL_EN</code> low) while having hardware flow-control enabled, will set <code>uart0_rts_o</code> +high to signal that the UARt is not capable of receiving new data.</p> +</li> +</ol> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +Note that RTS and CTS signaling can only be activated together. If the RTS handshake is not required the signal can be left +unconnected. If the CTS handshake is not required it has to be tied to zero. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Simulation Mode</strong></p> +</div> +<div class="paragraph"> +<p>The UART provides a <em>simulation-only</em> mode to dump console data as well as raw data directly to a file. When the simulation +mode is enabled (by setting the <code>UART_CTRL_SIM_MODE</code> bit) there will be <strong>no</strong> physical transaction on the <code>uart0_txd_o</code> signal. +Instead, all data written to the <code>DATA</code> register is immediately dumped to a file. Data written to <code>DATA[7:0]</code> will be dumped as +ASCII chars to a file named <code>neorv32.uart0_sim_mode.out</code>. Additionally, the ASCII data is printed to the simulator console.</p> +</div> +<div class="paragraph"> +<p>Both file are created in the simulation&#8217;s home folder.</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 16. UART0 register map (<code>struct NEORV32_UART0</code>)</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 11.1111%;"> +<col style="width: 27.7777%;"> +<col style="width: 11.1111%;"> +<col style="width: 27.7779%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="21"><p class="tableblock"><code>0xfff50000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="21"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code> <code>UART_CTRL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">UART enable</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code> <code>UART_CTRL_SIM_MODE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">enable <strong>simulation mode</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2</code> <code>UART_CTRL_HWFC_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">enable RTS/CTS hardware flow-control</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>5:3</code> <code>UART_CTRL_PRSC2 : UART_CTRL_PRSC0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Baud rate clock prescaler select</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>15:6</code> <code>UART_CTRL_BAUD9 : UART_CTRL_BAUD0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">12-bit Baud value configuration value</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>16</code> <code>UART_CTRL_RX_NEMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO not empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>17</code> <code>UART_CTRL_RX_HALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO at least half-full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>18</code> <code>UART_CTRL_RX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>19</code> <code>UART_CTRL_TX_EMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>20</code> <code>UART_CTRL_TX_NHALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO not at least half-full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>21</code> <code>UART_CTRL_TX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>22</code> <code>UART_CTRL_IRQ_RX_NEMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fire IRQ if RX FIFO not empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>23</code> <code>UART_CTRL_IRQ_RX_HALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fire IRQ if RX FIFO at least half-full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>24</code> <code>UART_CTRL_IRQ_RX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fire IRQ if RX FIFO full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>25</code> <code>UART_CTRL_IRQ_TX_EMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fire IRQ if TX FIFO empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>26</code> <code>UART_CTRL_IRQ_TX_NHALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fire IRQ if TX not at least half full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>27</code> -</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em> read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>28</code> <code>UART_CTRL_RX_CLR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Clear RX FIFO, flag auto-clears</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>29</code> <code>UART_CTRL_TX_CLR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Clear TX FIFO, flag auto-clears</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30</code> <code>UART_CTRL_RX_OVER</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO overflow; cleared by disabling the module</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code> <code>UART_CTRL_TX_BUSY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX busy or TX FIFO not empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" rowspan="4"><p class="tableblock"><code>0xfff50004</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="4"><p class="tableblock"><code>DATA</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:0</code> <code>UART_DATA_RTX_MSB : UART_DATA_RTX_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">receive/transmit data</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>11:8</code> <code>UART_DATA_RX_FIFO_SIZE_MSB : UART_DATA_RX_FIFO_SIZE_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">log2(RX FIFO size)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>15:12</code> <code>UART_DATA_TX_FIFO_SIZE_MSB : UART_DATA_TX_FIFO_SIZE_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">log2(TX FIFO size)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:16</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_secondary_universal_asynchronous_receiver_and_transmitter_uart1">2.8.14. Secondary Universal Asynchronous Receiver and Transmitter (UART1)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_uart.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_uart.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_uart.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart1_txd_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial transmitter output</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart1_rxd_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial receiver input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart1_rts_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">flow control: RX ready to receive, low-active</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>uart1_cts_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">flow control: RX ready to receive, low-active</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_UART1_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement UART1 when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>UART1_RX_FIFO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO depth (power of 2, min 1)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>UART1_TX_FIFO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO depth (power of 2, min 1)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 4</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 5</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX interrupt (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">privileged access only, non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The secondary UART (UART1) is functionally identical to the primary UART +(<a href="#_primary_universal_asynchronous_receiver_and_transmitter_uart0">Primary Universal Asynchronous Receiver and Transmitter (UART0)</a>). Obviously, UART1 uses different addresses for the +control register (<code>CTRL</code>) and the data register (<code>DATA</code>). The register&#8217;s bits/flags use the same bit positions and naming +as for the primary UART. The RX and TX interrupts of UART1 are mapped to different CPU fast interrupt (FIRQ) channels.</p> +</div> +<div class="paragraph"> +<p><strong>Simulation Mode</strong></p> +</div> +<div class="paragraph"> +<p>The secondary UART (UART1) provides the same simulation options as the primary UART (UART0). However, output data is +written to UART1-specific file <code>neorv32.uart1_sim_mode.out</code>. This data is also printed to the simulator console.</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 17. UART1 register map (<code>struct NEORV32_UART1</code>)</caption> +<colgroup> +<col style="width: 28.5714%;"> +<col style="width: 14.2857%;"> +<col style="width: 14.2857%;"> +<col style="width: 14.2857%;"> +<col style="width: 28.5715%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfff60000</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">&#8230;&#8203;</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Same as UART0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfff60004</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DATA</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">&#8230;&#8203;</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Same as UART0</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_serial_peripheral_interface_controller_spi">2.8.15. Serial Peripheral Interface Controller (SPI)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_spi.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_spi.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_spi.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>spi_clk_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial clock output</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>spi_dat_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial data output</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>spi_dat_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial data input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>spi_csn_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">8-bit dedicated chip select output (low-active)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SPI_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement SPI controller when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SPI_FIFO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">FIFO depth, has to be a power of two, min 1</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 6</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">configurable SPI interrupt (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The NEORV32 SPI module is a <strong>host</strong> transceiver. Hence, it is responsible for generating transmission. +The module operates on a byte.wide data granularity, supports all 4 standard clock modes, a fine-tunable +SPI clock generator and provides up to 8 dedicated chip select signals via the top entity&#8217;s <code>spi_csn_o</code> signal. +An optional receive/transmit ring-buffer/FIFO can be configured via the <code>IO_SPI_FIFO</code> generic to support block-based +transmissions without CPU interaction.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Host-Mode Only</div> +The NEORV32 SPI module only supports <em>host mode</em>. Transmission are initiated only by the processor&#8217;s SPI module +and not by an external SPI module. If you are looking for a <em>device-mode</em> serial peripheral interface (transactions +initiated by an external host) check out the <a href="#_serial_data_interface_controller_sdi">Serial Data Interface Controller (SDI)</a>. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The SPI module provides a single control register <code>CTRL</code> to configure the module and to check it&#8217;s status +and a single data register <code>DATA</code> for receiving/transmitting data.</p> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>The SPI module is enabled by setting the <code>SPI_CTRL_EN</code> bit in the <code>CTRL</code> control register. No transfer can be initiated +and no interrupt request will be triggered if this bit is cleared. Clearing this bit will reset the entire module, clear +the FIFO and terminate any transfer being in process.</p> +</div> +<div class="paragraph"> +<p>The actual SPI transfer (receiving one byte while sending one byte) as well as control of the chip-select lines is handled +via the module&#8217;s <code>DATA</code> register. Note that this register will access the TX FIFO of the ring-buffer when writing and will +access the RX FIFO of the ring-buffer when reading.</p> +</div> +<div class="paragraph"> +<p>The most significant bit of the <code>DATA</code> register (<code>SPI_DATA_CMD</code>) is used to select the purpose of the data being written. +When the <code>SPI_DATA_CMD</code> is cleared, the lowest 8-bit represent the actual SPI TX data. This data will be transmitted by the +SPI bus engine. After completion, the received data is stored to the RX FIFO.</p> +</div> +<div class="paragraph"> +<p>If <code>SPI_DATA_CMD</code> is cleared, the lowest 4-bit control the chip-select lines. In this case, bis <code>2:0</code> select one of the eight +chip-select lines. The selected line will become enabled when bit <code>3</code> is also set. If bit <code>3</code> is cleared, all chip-select +lines will be disabled.</p> +</div> +<div class="paragraph"> +<p>Examples:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Enable chip-select line 3: <code>NEORV32_SPI&#8594;DATA = (1 &lt;&lt; SPI_DATA_CMD) | (1 &lt;&lt; 3) | 3;</code></p> +</li> +<li> +<p>Enable chip-select line 7: <code>NEORV32_SPI&#8594;DATA = (1 &lt;&lt; SPI_DATA_CMD) | (1 &lt;&lt; 3) | 7;</code></p> +</li> +<li> +<p>Disable all chip-select lines: <code>NEORV32_SPI&#8594;DATA = (1 &lt;&lt; SPI_DATA_CMD) | (0 &lt;&lt; 3);</code></p> +</li> +<li> +<p>Send data byte <code>0xAB</code>: <code>NEORV32_SPI&#8594;DATA = (0 &lt;&lt; SPI_DATA_CMD) | 0xAB;</code></p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>Since all SPI operations are controlled via the FIFO, entire SPI sequences (chip-enable, data transmissions, chip-disable) +can be "programmed". Thus, SPI operations can be executed without any CPU interaction at all.</p> +</div> +<div class="paragraph"> +<p>Application software can check if any chip-select is enabled by reading the control register&#8217;s <code>SPI_CS_ACTIVE</code> flag.</p> +</div> +<div class="paragraph"> +<p><strong>SPI Clock Configuration</strong></p> +</div> +<div class="paragraph"> +<p>The SPI module supports all standard SPI clock modes (0, 1, 2, 3), which are configured via the two control register bits +<code>SPI_CTRL_CPHA</code> and <code>SPI_CTRL_CPOL</code>. The <code>SPI_CTRL_CPHA</code> bit defines the <em>clock phase</em> and the <code>SPI_CTRL_CPOL</code> +bit defines the <em>clock polarity</em>.</p> +</div> +<div class="imageblock"> +<div class="content"> +<img src="img/SPI_timing_diagram2.wikimedia.png" alt="SPI timing diagram2.wikimedia"> +</div> +<div class="title">Figure 6. SPI clock modes; image from <a href="https://en.wikipedia.org/wiki/File:SPI_timing_diagram2.svg" class="bare">https://en.wikipedia.org/wiki/File:SPI_timing_diagram2.svg</a> (license: (Wikimedia) <a href="https://en.wikipedia.org/wiki/Creative_Commons">Creative Commons</a> <a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">Attribution-Share Alike 3.0 Unported</a>)</div> +</div> +<div class="paragraph"> +<p>The SPI clock frequency (<code>spi_clk_o</code>) is programmed by the 3-bit <code>SPI_CTRL_PRSCx</code> clock prescaler for a coarse clock selection +and a 4-bit clock divider <code>SPI_CTRL_CDIVx</code> for a fine clock configuration. +The following clock prescalers (<code>SPI_CTRL_PRSCx</code>) are available:</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 18. SPI prescaler configuration</caption> +<colgroup> +<col style="width: 33.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3336%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"><strong><code>SPI_CTRL_PRSCx</code></strong></th> +<th class="tableblock halign-center valign-top"><code>0b000</code></th> +<th class="tableblock halign-center valign-top"><code>0b001</code></th> +<th class="tableblock halign-center valign-top"><code>0b010</code></th> +<th class="tableblock halign-center valign-top"><code>0b011</code></th> +<th class="tableblock halign-center valign-top"><code>0b100</code></th> +<th class="tableblock halign-center valign-top"><code>0b101</code></th> +<th class="tableblock halign-center valign-top"><code>0b110</code></th> +<th class="tableblock halign-center valign-top"><code>0b111</code></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Resulting <code>clock_prescaler</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">128</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2048</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4096</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>Based on the programmed clock configuration, the actual SPI clock frequency f<sub>SPI</sub> is derived +from the processor&#8217;s main clock f<sub>main</sub> according to the following equation:</p> +</div> +<div class="paragraph"> +<p><em><strong>f<sub>SPI</sub></strong></em> = <em>f<sub>main</sub>[Hz]</em> / (2 * <code>clock_prescaler</code> * (1 + <code>SPI_CTRL_CDIVx</code>))</p> +</div> +<div class="paragraph"> +<p>Hence, the maximum SPI clock is f<sub>main</sub> / 4 and the lowest SPI clock is f<sub>main</sub> / 131072. The SPI clock is always +symmetric having a duty cycle of exactly 50%.</p> +</div> +<div class="paragraph"> +<p><strong>High-Speed Mode</strong></p> +</div> +<div class="paragraph"> +<p>The SPI provides a high-speed mode to further boost the maximum SPI clock frequency. When enabled via the control +register&#8217;s <code>SPI_CTRL_HIGHSPEED</code> bit the clock prescaler configuration (<code>SPI_CTRL_PRSCx</code> bits) is overridden setting it +to a minimal factor of 1. However, the clock speed can still be fine-tuned using the <code>SPI_CTRL_CDIVx</code> bits.</p> +</div> +<div class="paragraph"> +<p><em><strong>f<sub>SPI</sub></strong></em> = <em>f<sub>main</sub>[Hz]</em> / (2 * 1 * (1 + <code>SPI_CTRL_CDIVx</code>))</p> +</div> +<div class="paragraph"> +<p>Hence, the maximum SPI clock is f<sub>main</sub> / 2 when in high-speed mode.</p> +</div> +<div class="paragraph"> +<p><strong>SPI Interrupt</strong></p> +</div> +<div class="paragraph"> +<p>The SPI module provides a set of programmable interrupt conditions based on the level of the RX/TX FIFO. The different +interrupt sources are enabled by setting the according control register&#8217;s <code>SPI_CTRL_IRQ_*</code> bits. All enabled interrupt +conditions are logically OR-ed, so any enabled interrupt source will trigger the module&#8217;s interrupt signal.</p> +</div> +<div class="paragraph"> +<p>Once the SPI interrupt has fired it remains pending until the actual cause of the interrupt is resolved; for +example if just the <code>SPI_CTRL_IRQ_RX_AVAIL</code> bit is set, the interrupt will keep firing until the RX FIFO is empty again.</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 19. SPI register map (<code>struct NEORV32_SPI</code>)</caption> +<colgroup> +<col style="width: 13.3333%;"> +<col style="width: 6.6666%;"> +<col style="width: 26.6666%;"> +<col style="width: 6.6666%;"> +<col style="width: 46.6669%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="19"><p class="tableblock"><code>0xfff80000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="19"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code> <code>SPI_CTRL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SPI module enable</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code> <code>SPI_CTRL_CPHA</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">clock phase</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2</code> <code>SPI_CTRL_CPOL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">clock polarity</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>5:3</code> <code>SPI_CTRL_PRSC2 : SPI_CTRL_PRSC0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3-bit clock prescaler select</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>9:6</code> <code>SPI_CTRL_CDIV2 : SPI_CTRL_CDIV0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4-bit clock divider for fine-tuning</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>10</code> <code>SPI_CTRL_HIGHSPEED</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">high-speed mode enable (overriding <code>SPI_CTRL_PRSC*</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>15:11</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>16</code> <code>SPI_CTRL_RX_AVAIL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO data available (RX FIFO not empty)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>17</code> <code>SPI_CTRL_TX_EMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>18</code> <code>SPI_CTRL_TX_NHALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO <em>not</em> at least half full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>19</code> <code>SPI_CTRL_TX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>20</code> <code>SPI_CTRL_IRQ_RX_AVAIL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger IRQ if RX FIFO not empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>21</code> <code>SPI_CTRL_IRQ_TX_EMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger IRQ if TX FIFO empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>22</code> <code>SPI_CTRL_IRQ_TX_NHALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger IRQ if TX FIFO <em>not</em> at least half full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>23</code> <code>SPI_CTRL_IRQ_IDLE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger IRQ if TX FIFO is empty and SPI bus engine is idle</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>27:24</code> <code>SPI_CTRL_FIFO_MSB : SPI_CTRL_FIFO_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">FIFO depth; log2(<code>IO_SPI_FIFO</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30:28</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30</code> <code>SPI_CS_ACTIVE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set if any chip-select line is active</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code> <code>SPI_CTRL_BUSY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SPI module busy when set (serial engine operation in progress and TX FIFO not empty yet)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" rowspan="3"><p class="tableblock"><code>0xfff80004</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="3"><p class="tableblock"><code>DATA</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:0</code> <code>SPI_DATA_MSB : SPI_DATA_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">receive/transmit data (FIFO)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30:8</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code> <code>SPI_DATA_CMD</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">data (<code>0</code>) / chip-select-command (<code>1</code>) select</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_serial_data_interface_controller_sdi">2.8.16. Serial Data Interface Controller (SDI)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_sdi.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_sdi.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_sdi.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sdi_clk_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial clock input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sdi_dat_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial data output</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sdi_dat_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial data input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sdi_csn_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit chip-select input (low-active)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SDI_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement SDI controller when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_SDI_FIFO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">data FIFO size, has to a power of two, min 1</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 11</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">configurable SDI interrupt (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The serial data interface module provides a <strong>device-class</strong> SPI interface and allows to connect the processor +to an <strong>external SPI host</strong>, which is responsible of performing the actual transmission - the SDI is entirely +passive. An optional receive/transmit ring buffer (FIFOs) can be configured via the <code>IO_SDI_FIFO</code> generic to +support block-based transmissions without CPU interaction.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Device-Mode Only</div> +The NEORV32 SDI module only supports <em>device mode</em>. Transmission are initiated by an external host and not by the +the processor itself. If you are looking for a <em>host-mode</em> serial peripheral interface (transactions +performed by the NEORV32) check out the <a href="#_serial_peripheral_interface_controller_spi">Serial Peripheral Interface Controller (SPI)</a>. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The SDI module provides a single control register <code>CTRL</code> to configure the module and to check it&#8217;s status +and a single data register <code>DATA</code> for receiving/transmitting data. Any access to the <code>DATA</code> register +actually accesses the internal ring buffer.</p> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>The SDI module is enabled by setting the <code>SDI_CTRL_EN</code> bit in the <code>CTRL</code> control register. Clearing this bit +resets the entire module and will also clear the entire RX/TX ring buffer.</p> +</div> +<div class="paragraph"> +<p>The SDI operates on byte-level only. Data written to the <code>DATA</code> register will be pushed to the TX FIFO. Received +data can be retrieved by reading the RX FIFO via the <code>DATA</code> register. The current state of these FIFOs is available +via the control register&#8217;s <code>SDI_CTRL_RX_*</code> and <code>SDI_CTRL_TX_*</code> flags. If no data is available in the TX FIFO while +an external device performs a transmission the external device will read all-zero from the SDI controller.</p> +</div> +<div class="paragraph"> +<p>Application software can check the current state of the SDI chip-select input via the control register&#8217;s +<code>SDI_CTRL_CS_ACTIVE</code> flag (the flag is set when the chip-select line is active (pulled low)).</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">MSB-first Only</div> +The NEORV32 SDI module only supports MSB-first mode. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">In-Transmission Abort</div> +If the external SPI controller aborts the transmission by setting the chip-select signal high again <em>before</em> +8 data bits have been transferred, no data is written to the RX FIFO. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>SDI Clocking</strong></p> +</div> +<div class="paragraph"> +<p>The SDI module supports both SPI clock polarity modes ("CPOL") but only "CPHA=0"-clock-phase is <em>officially</em> supported +yet. However, experiments have shown that the SDI module can also deal with both clock phase modes (for slow SDI clock speeds).</p> +</div> +<div class="paragraph"> +<p>All SDI operations are clocked by the external <code>sdi_clk_i</code> signal. This signal is synchronized to the processor&#8217;s +clock domain to simplify timing behavior. This clock synchronization requires the external SDI clock +(<code>sdi_clk_i</code>) does <strong>not exceed 1/4 of the processor&#8217;s main clock</strong>.</p> +</div> +<div class="paragraph"> +<p><strong>SDI Interrupt</strong></p> +</div> +<div class="paragraph"> +<p>The SDI module provides a set of programmable interrupt conditions based on the level of the RX &amp; TX FIFOs. The different +interrupt sources are enabled by setting the according control register&#8217;s <code>SDI_CTRL_IRQ_*</code> bits. All enabled interrupt +conditions are logically OR-ed so any enabled interrupt source will trigger the module&#8217;s interrupt signal.</p> +</div> +<div class="paragraph"> +<p>Once the SDI interrupt has fired it will remain active until the actual cause of the interrupt is resolved; for +example if just the <code>SDI_CTRL_IRQ_RX_AVAIL</code> bit is set, the interrupt will keep firing until the RX FIFO is empty again.</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 20. SDI register map (<code>struct NEORV32_SDI</code>)</caption> +<colgroup> +<col style="width: 13.3333%;"> +<col style="width: 6.6666%;"> +<col style="width: 26.6666%;"> +<col style="width: 6.6666%;"> +<col style="width: 46.6669%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="18"><p class="tableblock"><code>0xfff70000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="18"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code> <code>SDI_CTRL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SDI module enable</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>3:1</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:4</code> <code>SDI_CTRL_FIFO_MSB : SDI_CTRL_FIFO_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">FIFO depth; log2(<em>IO_SDI_FIFO</em>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>14:8</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>15</code> <code>SDI_CTRL_IRQ_RX_AVAIL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fire interrupt if RX FIFO is not empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>16</code> <code>SDI_CTRL_IRQ_RX_HALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fire interrupt if RX FIFO is at least half full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>17</code> <code>SDI_CTRL_IRQ_RX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fire interrupt if if RX FIFO is full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>18</code> <code>SDI_CTRL_IRQ_TX_EMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fire interrupt if TX FIFO is empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>19</code> <code>SDI_CTRL_IRQ_TX_NHALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fire interrupt if TX FIFO is not at least half full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>22:20</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>23</code> <code>SDI_CTRL_RX_AVAIL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO data available (RX FIFO not empty)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>24</code> <code>SDI_CTRL_RX_HALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO at least half full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>25</code> <code>SDI_CTRL_RX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>26</code> <code>SDI_CTRL_TX_EMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>27</code> <code>SDI_CTRL_TX_NHALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO not at least half full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>28</code> <code>SDI_CTRL_TX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30:29</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code> <code>SDI_CTRL_CS_ACTIVE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Chip-select is active when set</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>0xfff70004</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>DATA</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">receive/transmit data (FIFO)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:8</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, read as zero</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_two_wire_serial_interface_controller_twi">2.8.17. Two-Wire Serial Interface Controller (TWI)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_twi.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_twi.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_twi.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twi_sda_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial data line sense input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twi_sda_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial data line output (pull low only)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twi_scl_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial clock line sense input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twi_scl_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial clock line output (pull low only)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_TWI_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement TWI controller when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_TWI_FIFO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">FIFO depth, has to be a power of two, min 1</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 7</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">FIFO empty and module idle interrupt (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The NEORV32 TWI implements a I²C-compatible host controller to communicate with arbitrary I2C-devices. +Note that peripheral-mode (controller acts as a device) and multi-controller mode are not supported yet.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Host-Mode Only</div> +The NEORV32 TWI controller only supports <strong>host mode</strong>. Transmission are initiated by the processor&#8217;s TWI controller +and not by an external I²C module. If you are looking for a <em>device-mode</em> module (transactions +initiated by an external host) check out the <a href="#_two_wire_serial_device_controller_twd">Two-Wire Serial Device Controller (TWD)</a>. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>Key features:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Programmable clock speed</p> +</li> +<li> +<p>Optional clock stretching</p> +</li> +<li> +<p>Generate START / repeated-START and STOP conditions</p> +</li> +<li> +<p>Sending &amp; receiving 8 data bits including ACK/NACK</p> +</li> +<li> +<p>Generating a host-ACK (ACK send by the TWI controller)</p> +</li> +<li> +<p>Configurable data/command FIFO to "program" large I²C sequences without further involvement of the CPU</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>The TWI controller provides two memory-mapped registers that are used for configuring the module and +for triggering operations: the control and status register <code>CTRL</code> and the command and data register <code>DCMD</code>.</p> +</div> +<div class="paragraph"> +<p><strong>Tristate Drivers</strong></p> +</div> +<div class="paragraph"> +<p>The TWI module requires two tristate drivers (actually: open-drain drivers - signals can only be actively driven low) for +the SDA and SCL lines, which have to be implemented by the user in the setup&#8217;s top module / IO ring. A generic VHDL example +is shown below (here, <code>sda_io</code> and <code>scl_io</code> are the actual I²C bus lines, which are of type <code>std_logic</code>).</p> +</div> +<div class="listingblock"> +<div class="title">Listing 7. TWI VHDL Tristate Driver Example</div> +<div class="content"> +<pre class="highlight"><code class="language-VHDL" data-lang="VHDL">sda_io &lt;= '0' when (twi_sda_o = '0') else 'Z'; -- drive +scl_io &lt;= '0' when (twi_scl_o = '0') else 'Z'; -- drive +twi_sda_i &lt;= std_ulogic(sda_io); -- sense +twi_scl_i &lt;= std_ulogic(scl_io); -- sense</code></pre> +</div> +</div> +<div class="paragraph"> +<p><strong>TWI Clock Speed</strong></p> +</div> +<div class="paragraph"> +<p>The TWI clock frequency is programmed by two bit-fields in the device&#8217;s control register <code>CTRL</code>: a 3-bit clock prescaler +(<code>TWI_CTRL_PRSCx</code>) is used for a coarse clock configuration and a 4-bit clock divider (<code>TWI_CTRL_CDIVx</code>) is used for a fine +clock configuration.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 21. TWI prescaler configuration</caption> +<colgroup> +<col style="width: 33.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3336%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"><strong><code>TWI_CTRL_PRSCx</code></strong></th> +<th class="tableblock halign-center valign-top"><code>0b000</code></th> +<th class="tableblock halign-center valign-top"><code>0b001</code></th> +<th class="tableblock halign-center valign-top"><code>0b010</code></th> +<th class="tableblock halign-center valign-top"><code>0b011</code></th> +<th class="tableblock halign-center valign-top"><code>0b100</code></th> +<th class="tableblock halign-center valign-top"><code>0b101</code></th> +<th class="tableblock halign-center valign-top"><code>0b110</code></th> +<th class="tableblock halign-center valign-top"><code>0b111</code></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Resulting <code>clock_prescaler</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">128</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2048</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4096</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>Based on the clock configuration, the actual TWI clock frequency f<sub>SCL</sub> is derived +from the processor&#8217;s main clock f<sub>main</sub> according to the following equation:</p> +</div> +<div class="paragraph"> +<p><em><strong>f<sub>SCL</sub></strong></em> = <em>f<sub>main</sub>[Hz]</em> / (4 * <code>clock_prescaler</code> * (1 + TWI_CTRL_CDIV))</p> +</div> +<div class="paragraph"> +<p>Hence, the maximum TWI clock is f<sub>main</sub> / 8 and the lowest TWI clock is f<sub>main</sub> / 262144. The generated TWI clock is +always symmetric having a duty cycle of exactly 50% (if the clock is not haled by a device during clock stretching).</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Clock Stretching</div> +An accessed peripheral can slow down/halt the controller&#8217;s bus clock by using clock stretching (= actively keeping the +SCL line low). The controller will halt operation in this case. Clock stretching is enabled by setting the +<code>TWI_CTRL_CLKSTR</code> bit in the module&#8217;s control register <code>CTRL</code>. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>TWI Transfers</strong></p> +</div> +<div class="paragraph"> +<p>The TWI is enabled via the <code>TWI_CTRL_EN</code> bit in the <code>CTRL</code> control register. All TWI operations are controlled by +the <code>DCMD</code> register. The actual operation is selected by a 2-bit value that is written to the register&#8217;s <code>TWI_DCMD_CMD_*</code> +bit-field:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>00</code>: NOP (no-operation); all further bit-fields in <code>DCMD</code> are ignored</p> +</li> +<li> +<p><code>01</code>: Generate a (repeated) START conditions; all further bit-fields in <code>DCMD</code> are ignored</p> +</li> +<li> +<p><code>10</code>: Generate a STOP conditions; all further bit-fields in <code>DCMD</code> are ignored</p> +</li> +<li> +<p><code>11</code>: Trigger a data transmission; the data to be send has to be written to the register&#8217;s <code>TWI_DCMD_MSB : TWI_DCMD_LSB</code> +bit-field; if <code>TWI_DCMD_ACK</code> is set the controller will send a host-ACK in the ACK/NACK time slot; after the transmission +is completed <code>TWI_DCMD_MSB : TWI_DCMD_LSB</code> contains the RX data and <code>TWI_DCMD_ACK</code> the device&#8217;s response if no host-ACK was +configured (<code>0</code> = ACK, <code>1</code> = ACK)</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>All operations/data written to the <code>DCMD</code> register are buffered by a configurable data/command FIFO. The depth of the FIFO is +configured by the <code>IO_TWI_FIFO</code> top generic. Software can retrieve this size by reading the control register&#8217;s <code>TWI_CTRL_FIFO</code> bits.</p> +</div> +<div class="paragraph"> +<p>The command/data FIFO is internally split into a TX FIFO and a RX FIFO. Writing to <code>DCMD</code> will write to the TX FIFO while reading from +<code>DCMD</code> will read from the RX FIFO. The TX FIFO is full when the <code>TWI_CTRL_TX_FULL</code> flag is set. Accordingly, the RX FIFO contains valid +data when the <code>TWI_CTRL_RX_AVAIL</code> flag is set.</p> +</div> +<div class="paragraph"> +<p>The control register&#8217;s busy flag <code>TWI_CTRL_BUSY</code> is set as long as the TX FIFO contains valid data (i.e. programmed TWI operations +that have not been executed yet) or of the TWI bus engine is still processing an operation.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +An active transmission can be terminated at any time by disabling the TWI module. This will also clear the data/command FIFO. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +The current state of the I²C bus lines (SCL and SDA) can be checked by software via the <code>TWI_CTRL_SENSE_*</code> control register bits. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +When reading data from a device, an all-one byte (<code>0xFF</code>) has to be written to TWI data register <code>NEORV32_TWI.DATA</code> +so the accessed device can actively pull-down SDA when required. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>TWI Interrupt</strong></p> +</div> +<div class="paragraph"> +<p>The TWI module provides a single interrupt to signal "idle condition" to the CPU. The interrupt becomes active when the +TWI module is enabled (<code>TWI_CTRL_EN</code> = <code>1</code>) and the TX FIFO is empty and the TWI bus engine is idle.</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 22. TWI register map (<code>struct NEORV32_TWI</code>)</caption> +<colgroup> +<col style="width: 13.3333%;"> +<col style="width: 6.6666%;"> +<col style="width: 26.6666%;"> +<col style="width: 6.6666%;"> +<col style="width: 46.6669%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="12"><p class="tableblock"><code>0xfff90000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="12"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code> <code>TWI_CTRL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TWI enable, reset if cleared</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>3:1</code> <code>TWI_CTRL_PRSC2 : TWI_CTRL_PRSC0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3-bit clock prescaler select</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:4</code> <code>TWI_CTRL_CDIV3 : TWI_CTRL_CDIV0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4-bit clock divider</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>8</code> <code>TWI_CTRL_CLKSTR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable (allow) clock stretching</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>14:9</code> -</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>18:15</code> <code>TWI_CTRL_FIFO_MSB : TWI_CTRL_FIFO_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">FIFO depth; log2(<code>IO_TWI_FIFO</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>26:12</code> -</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>27</code> <code>TWI_CTRL_SENSE_SCL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">current state of the SCL bus line</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>28</code> <code>TWI_CTRL_SENSE_SDA</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">current state of the SDA bus line</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>29</code> <code>TWI_CTRL_TX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if the TWI bus is claimed by any controller</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30</code> <code>TWI_CTRL_RX_AVAIL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO data available</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code> <code>TWI_CTRL_BUSY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TWI bus engine busy or TX FIFO not empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" rowspan="3"><p class="tableblock"><code>0xfff90004</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="3"><p class="tableblock"><code>DCMD</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:0</code> <code>TWI_DCMD_MSB : TWI_DCMD_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX/TX data byte</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>8</code> <code>TWI_DCMD_ACK</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">write: ACK bit sent by controller; read: <code>1</code> = device NACK, <code>0</code> = device ACK</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>10:9</code> <code>TWI_DCMD_CMD_HI : TWI_DCMD_CMD_LO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TWI operation (<code>00</code> = NOP, <code>01</code> = START conditions, <code>10</code> = STOP condition, <code>11</code> = data transmission)</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_two_wire_serial_device_controller_twd">2.8.18. Two-Wire Serial Device Controller (TWD)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_twd.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_twd.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_twd.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twd_sda_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial data line sense input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twd_sda_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial data line output (pull low only)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twd_scl_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial clock line sense input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>twd_scl_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial clock line output (pull low only)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_TWD_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement TWD controller when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_TWD_FIFO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX/TX FIFO depth, has to be a power of two, min 1</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">FIFO status interrupt (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The NEORV32 TWD implements a I2C-compatible <strong>device-mode</strong> controller. Processor-external hosts can communicate +with this module by issuing I2C transactions. The TWD is entirely passive an only reacts on those transmissions.</p> +</div> +<div class="paragraph"> +<p>Key features:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Programmable 7-bit device address</p> +</li> +<li> +<p>Programmable interrupt conditions</p> +</li> +<li> +<p>Configurable RX/TX data FIFO to "program" large TWD sequences without further involvement of the CPU</p> +</li> +</ul> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Device-Mode Only</div> +The NEORV32 TWD controller only supports <strong>device mode</strong>. Transmission are initiated by processor-external modules +and not by an external TWD. If you are looking for a <em>host-mode</em> module (transactions initiated by the processor) +check out the <a href="#_two_wire_serial_interface_controller_twi">Two-Wire Serial Interface Controller (TWI)</a>. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>The TWD module provides two memory-mapped registers that are used for configuration &amp; status check (<code>CTRL</code>) and +for accessing transmission data (<code>DATA</code>). The <code>DATA</code> register is transparently buffered by separate RX and TX FIFOs. +The size of those FIFOs can be configured by the <code>IO_TWD_FIFO</code> generic. Software can determine the FIFO size via the +<code>TWD_CTRL_FIFO_*</code> bits.</p> +</div> +<div class="paragraph"> +<p>The module is globally enabled by setting the control register&#8217;s <code>TWD_CTRL_EN</code> bit. Clearing this bit will disable +and reset the entire module also clearing the internal RX and TX FIFOs. Each FIFO can also be cleared individually at +any time by setting <code>TWD_CTRL_CLR_RX</code> or <code>TWD_CTRL_CLR_TX</code>, respectively.</p> +</div> +<div class="paragraph"> +<p>The external two wire bus is sampled sampled and synchronized to processor&#8217;s clock domain with a sampling frequency +of 1/8 of the processor&#8217;s main clock. To increase the resistance to glitches the sampling frequency can be lowered +to 1/64 of the processor clock by setting the <code>TWD_CTRL_FSEL</code> bit.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Current Bus State</div> +The current state of the I²C bus lines (SCL and SDA) can be checked by software via the <code>TWD_CTRL_SENSE_*</code> control +register bits. Note that the TWD module needs to be enabled in order to sample the bus state. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The actual 7-bit device address of the TWD is programmed by the <code>TWD_CTRL_DEV_ADDR</code> bits. Note that the TWD will +only response to a host transactions if the host issues the according address. Specific general-call or broadcast +addresses are not supported.</p> +</div> +<div class="paragraph"> +<p>Depending on the transaction type, data is either read from the RX FIFO and transferred to the host ("read operation") +or data is received from the host and written to the TX FIFO ("write operation"). Hence, data sequences can be +programmed to the TX FIFO to be fetched from the host. If the TX FIFO is empty and the host keeps performing read +transaction, the transferred data byte is automatically set to all-one.</p> +</div> +<div class="paragraph"> +<p>The current status of the RX and TX FIFO can be polled by software via the <code>TWD_CTRL_RX_*</code> and <code>TWD_CTRL_TX_*</code> +flags.</p> +</div> +<div class="paragraph"> +<p><strong>TWD Interrupt</strong></p> +</div> +<div class="paragraph"> +<p>The TWD module provides a single interrupt to signal certain FIFO conditions to the CPU. The control register&#8217;s +<code>TWD_CTRL_IRQ_*</code> bits are used to enabled individual interrupt conditions. Note that all enabled conditions are +logically OR-ed.</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>TWD_CTRL_IRQ_RX_AVAIL</code>: trigger interrupt if at least one data byte is available in the RX FIFO</p> +</li> +<li> +<p><code>TWD_CTRL_IRQ_RX_FULL</code>: trigger interrupt if the RX FIFO is completely full</p> +</li> +<li> +<p><code>TWD_CTRL_IRQ_TX_EMPTY</code>: trigger interrupt if the TX FIFO is empty</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>The interrupt remains active until all enabled interrupt-causing conditions are resolved. +The interrupt can only trigger if the module is actually enabled (<code>TWD_CTRL_EN</code> is set).</p> +</div> +<div class="paragraph"> +<p><strong>TWD Transmissions</strong></p> +</div> +<div class="paragraph"> +<p>Two standard I²C-compatible transaction types are supported: <strong>read</strong> operations and <strong>write</strong> operations. These +two operation types are illustrated in the following figure (note that the transactions are split across two lines +to improve readability).</p> +</div> +<div class="imageblock"> +<div class="content"> +<img src="img/twd_sequences.png" alt="twd sequences"> +</div> +<div class="title">Figure 7. TWD single-byte read and write transaction timing (not to scale)</div> +</div> +<div class="paragraph"> +<p>Any new transaction starts with a <strong>START</strong> condition. Then, the host transmits the 7 bit device address MSB-first +(green signals <code>A6</code> to <code>A0</code>) plus a command bit. The command bit can be either <strong>write</strong> (pulling the SDA line low) +or <strong>read</strong> (leaving the SDA line high). If the transferred address matches the one programmed to to <code>TWD_CTRL_DEV_ADDR</code> +control register bits the TWD module will response with an <strong>ACK</strong> (acknowledge) by pulling the SDA bus line actively +low during the 9th SCL clock pulse. If there is no address match the TWD will not interfere with the bus and move back +to idle state.</p> +</div> +<div class="paragraph"> +<p>For a <strong>write transaction</strong> (upper timing diagram) the host can now transfer an arbitrary number of bytes (blue signals +<code>D7</code> to <code>D0</code>, MSB-first) to the TWD module. Each byte is acknowledged by the TWD by pulling SDA low during the 9th SCL +clock pules (<strong>ACK</strong>). Each received data byte is pushed to the internal RX FIFO. Data will be lost if the FIFO overflows. +The transaction is terminated when the host issues a <strong>STOP</strong> condition.</p> +</div> +<div class="paragraph"> +<p>For a <strong>read transaction</strong> (lower timing diagram) the cost keeps the SDA line at high state while sending the clock +pulse. The TWD will read a byte from the internal TX FIFO and will transmit it MSB-first to the host (blue signals <code>D7</code> +to <code>D0)</code>. During the 9th clock pulse the host has to acknowledged the transfer (<strong>ACK</strong>). If no ACK is received by the +TWD no data is taken from the TX FIFO and the same byte can be transmitted in the next data phase. If the TX FIFO becomes +empty while the host keeps reading data, all-one bytes are transmitted. The transaction is terminated when the host +issues a <strong>STOP</strong> condition.</p> +</div> +<div class="paragraph"> +<p>A <strong>repeated-START</strong> condition can be issued at any time bringing the TWD back to the start of the address/command +transmission phase. The control register&#8217;s <code>TWD_CTRL_BUSY</code> flag remains high while a bus transaction is in progress.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Abort / Termination</div> +An active or even stuck transmission can be terminated at any time by disabling the TWD module. +This will also clear the RX/TX FIFOs. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Tristate Drivers</strong></p> +</div> +<div class="paragraph"> +<p>The TWD module requires two tristate drivers (actually: open-drain drivers - signals can only be actively driven low) for +the SDA and SCL lines, which have to be implemented by the user in the setup&#8217;s top module / IO ring. A generic VHDL example +is shown below (here, <code>sda_io</code> and <code>scl_io</code> are the actual TWD bus lines, which are of type <code>std_logic</code>).</p> +</div> +<div class="listingblock"> +<div class="title">Listing 8. TWD VHDL Tristate Driver Example</div> +<div class="content"> +<pre class="highlight"><code class="language-VHDL" data-lang="VHDL">sda_io &lt;= '0' when (twd_sda_o = '0') else 'Z'; -- drive +scl_io &lt;= '0' when (twd_scl_o = '0') else 'Z'; -- drive +twd_sda_i &lt;= std_ulogic(sda_io); -- sense +twd_scl_i &lt;= std_ulogic(scl_io); -- sense</code></pre> +</div> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 23. TWD register map (<code>struct NEORV32_TWD</code>)</caption> +<colgroup> +<col style="width: 13.3333%;"> +<col style="width: 6.6666%;"> +<col style="width: 26.6666%;"> +<col style="width: 6.6666%;"> +<col style="width: 46.6669%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="18"><p class="tableblock"><code>0xffea0000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="18"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code> <code>TWD_CTRL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TWD enable, reset if cleared</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code> <code>TWD_CTRL_CLR_RX</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Clear RX FIFO, flag auto-clears</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2</code> <code>TWD_CTRL_CLR_TX</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Clear TX FIFO, flag auto-clears</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>3</code> <code>TWD_CTRL_FSEL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Bus sample clock / filter select</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>10:4</code> <code>TWD_CTRL_DEV_ADDR6 : TWD_CTRL_DEV_ADDR0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Device address (7-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>11</code> <code>TWD_CTRL_IRQ_RX_AVAIL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">IRQ if RX FIFO data available</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>12</code> <code>TWD_CTRL_IRQ_RX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">IRQ if RX FIFO full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>13</code> <code>TWD_CTRL_IRQ_TX_EMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">IRQ if TX FIFO empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>14:9</code> -</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>18:15</code> <code>TWD_CTRL_FIFO_MSB : TWD_CTRL_FIFO_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">FIFO depth; log2(<code>IO_TWD_FIFO</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>24:12</code> -</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>25</code> <code>TWD_CTRL_RX_AVAIL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO data available</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>26</code> <code>TWD_CTRL_RX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>27</code> <code>TWD_CTRL_TX_EMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>28</code> <code>TWD_CTRL_TX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>29</code> <code>TWD_CTRL_SENSE_SCL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">current state of the SCL bus line</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30</code> <code>TWD_CTRL_SENSE_SDA</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">current state of the SDA bus line</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code> <code>TWD_CTRL_BUSY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">bus engine is busy (transaction in progress)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>0xffea0004</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>DATA</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:0</code> <code>TWD_DATA_MSB : TWD_DATA_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX/TX data FIFO access</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:8</code> -</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_one_wire_serial_interface_controller_onewire">2.8.19. One-Wire Serial Interface Controller (ONEWIRE)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_onewire.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_onewire.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_onewire.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>onewire_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit 1-wire bus sense input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>onewire_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit 1-wire bus output (pull low only)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_ONEWIRE_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement ONEWIRE interface controller when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_ONEWIRE_FIFO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RTX fifo depth, has to be zero or a power of two, min 1</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 13</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">operation done interrupt (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The NEORV32 ONEWIRE module implements a single-wire interface controller that is compatible to the +Dallas/Maxim 1-Wire protocol, which is an asynchronous half-duplex bus requiring only a single signal wire +(plus ground) for communication.</p> +</div> +<div class="paragraph"> +<p>The bus is based on a single open-drain signal. The controller as well as all devices on the bus can only pull-down +the bus (similar to TWI/I2C). The default high-level is provided by a single pull-up resistor connected to the positive +power supply close to the bus controller. Recommended values are between 1kΩ and 10kΩ depending on the bus +characteristics (wire length, number of devices, etc.).</p> +</div> +<div class="paragraph"> +<p><strong>Tri-State Drivers</strong></p> +</div> +<div class="paragraph"> +<p>The ONEWIRE module requires a tristate driver (actually, just an open-drain driver) for the 1-wire bus line, which has +to be implemented in the top module / IO ring of the design. A generic VHDL example is given below (<code>onewire_io</code> is the +actual 1-wire bus signal, which is of type <code>std_logic</code>; <code>onewire_o</code> and <code>onewire_i</code> are the processor&#8217;s ONEWIRE port signals).</p> +</div> +<div class="listingblock"> +<div class="title">Listing 9. ONEWIRE VHDL Tristate Driver Example</div> +<div class="content"> +<pre class="highlight"><code class="language-VHDL" data-lang="VHDL">onewire_io &lt;= '0' when (onewire_o = '0') else 'Z'; -- drive (low) +onewire_i &lt;= std_ulogic(onewire_io); -- sense</code></pre> +</div> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>The ONEWIRE controller provides two interface registers: <code>CTRL</code> and <code>DCMD.</code> The control register (<code>CTRL</code>) +is used to configure the module and to monitor the current state. The <code>DCMD</code> register, which can optionally +by buffered by a configurable FIFO (<code>IO_ONEWIRE_FIFO</code> generic), is used to read/write data from/to the bus +and to trigger bus operations.</p> +</div> +<div class="paragraph"> +<p>The module is enabled by setting the <code>ONEWIRE_CTRL_EN</code> bit in the control register. If this bit is cleared, the +module is automatically reset, any bus operation is aborted, the bus is brought to high-level (due to the external +pull-up resistor) and the internal FIFO is cleared. The basic timing configuration is programmed via a coarse clock +prescaler (<code>ONEWIRE_CTRL_PRSCx</code> bits) and a fine clock divider (<code>ONEWIRE_CTRL_CLKDIVx</code> bits).</p> +</div> +<div class="paragraph"> +<p>The controller can execute four basic bus operations, which are triggered by writing the according command bits +in the <code>DCMD</code> register (<code>ONEWIRE_DCMD_DATA_*</code> bits) while also writing the actual data bits (<code>ONEWIRE_DCMD_CMD_*</code> +bits).</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p><code>0b00</code> (<code>ONEWIRE_CMD_NOP</code>) - no operation (dummy)</p> +</li> +<li> +<p><code>0b01</code> (<code>ONEWIRE_CMD_BIT</code>) - transfer a single-bit (read-while-write)</p> +</li> +<li> +<p><code>0b10</code> (<code>ONEWIRE_CMD_BYTE</code>) - transfer a full-byte (read-while-write)</p> +</li> +<li> +<p><code>0b11</code> (<code>ONEWIRE_CMD_RESET</code>) - generate reset pulse and check for device presence</p> +</li> +</ol> +</div> +<div class="paragraph"> +<p>Every command (except NOP) will result in a bus operation when dispatched from the data/command FIFO. +Each command (except NOP) will also sample a bus response (a read bit, a read byte or a presence pulse) to a +shadowed receive FIFO that is accessed when reading the <code>DCMD</code> register.</p> +</div> +<div class="paragraph"> +<p>When the single-bit operation (<code>ONEWIRE_CMD_BIT</code>) is executed, the data previously written to <code>DCMD[0]</code> will +be send to the bus and the response is sample to <code>DCMD[7]</code>. Accordingly, a full-byte transmission (<code>ONEWIRE_CMD_BYTE</code>) +will send the byte written to <code>DCMD[7:0]</code> to the bus and will sample the response to <code>DCMD[7:0]</code> (LSB-first). Finally, the +reset command (<code>ONEWIRE_CMD_RESET</code>) will generate a bus reset and will also sample the "presence pulse" from the device(s) +to the <code>DCMD[ONEWIRE_DCMD_PRESENCE]</code>.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Read from Bus</div> +In order to read a single bit from the bus <code>DCMD[0]</code> has to set to <code>1</code> before triggering the bit transmission +operation to allow the accessed device to pull-down the bus. Accordingly, <code>DCMD[7:0]</code> has to be set to <code>0xFF</code> before +triggering the byte transmission operation when the controller shall read a byte from the bus. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>As soon as the current bus operation has completed (and there are no further operations pending in the FIFO) the +<code>ONEWIRE_CTRL_BUSY</code> bit in the control registers clears.</p> +</div> +<div class="paragraph"> +<p><strong>Bus Timing</strong></p> +</div> +<div class="paragraph"> +<p>The control register provides a 2-bit clock prescaler select (<code>ONEWIRE_CTRL_PRSC</code>) and a 8-bit clock divider +(<code>ONEWIRE_CTRL_CLKDIV</code>) for timing configuration. Both are used to define the elementary base time T<sub>base</sub>. +All bus operations are timed using multiples of this elementary base time.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 24. ONEWIRE Clock Prescaler Configurations</caption> +<colgroup> +<col style="width: 50%;"> +<col style="width: 12.5%;"> +<col style="width: 12.5%;"> +<col style="width: 12.5%;"> +<col style="width: 12.5%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"><strong><code>ONEWIRE_CTRL_PRSCx</code></strong></th> +<th class="tableblock halign-center valign-top"><code>0b00</code></th> +<th class="tableblock halign-center valign-top"><code>0b01</code></th> +<th class="tableblock halign-center valign-top"><code>0b10</code></th> +<th class="tableblock halign-center valign-top"><code>0b11</code></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Resulting <code>clock_prescaler</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>Together with the clock divider value (<code>ONEWIRE_CTRL_PRSCx</code> bits = <code>clock_divider</code>) the base time is defined by the +following formula:</p> +</div> +<div class="paragraph"> +<p><em><strong>T<sub>base</sub></strong></em> = (1 / <em>f<sub>main</sub>[Hz]</em>) * <code>clock_prescaler</code> * (<code>clock_divider</code> + 1)</p> +</div> +<div class="paragraph"> +<p>Example:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><em>f<sub>main</sub></em> = 100MHz</p> +</li> +<li> +<p>clock prescaler select = <code>0b01</code> &#8594; <code>clock_prescaler</code> = 4</p> +</li> +<li> +<p>clock divider <code>clock_divider</code> = 249</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><em><strong>T<sub>base</sub></strong></em> = (1 / 100000000Hz) * 4 * (249 + 1) = 10000ns = <strong>10µs</strong></p> +</div> +<div class="paragraph"> +<p>The base time is used to coordinate all bus interactions. Hence, all delays, time slots and points in time are +quantized as multiples of the base time T<sub>base</sub>. The following images show the two basic operations of the ONEWIRE +controller: single-bit (0 or 1) transaction and reset with presence detect. Note that the full-byte operations just repeats +the single-bit operation eight times. The relevant points in time are shown as <em>absolute</em> time points (in multiples of the +time base T<sub>base</sub>) with the falling edge of the bus as reference points.</p> +</div> +<table class="tableblock frame-all grid-none stretch"> +<colgroup> +<col style="width: 50%;"> +<col style="width: 50%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><div class="content"><div class="imageblock text-center"> +<div class="content"> +<img src="img/onewire_data.png" alt="onewire data"> +</div> +</div></div></td> +<td class="tableblock halign-center valign-top"><div class="content"><div class="imageblock text-center"> +<div class="content"> +<img src="img/onewire_reset.png" alt="onewire reset"> +</div> +</div></div></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">Single-bit data transmission (not to scale)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">Reset pulse and presence detect (not to scale)</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 25. Data Transmission Timing</caption> +<colgroup> +<col style="width: 14.2857%;"> +<col style="width: 42.8571%;"> +<col style="width: 21.4285%;"> +<col style="width: 21.4287%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Symbol</th> +<th class="tableblock halign-left valign-top">Description</th> +<th class="tableblock halign-center valign-top">Multiples of T<sub>base</sub></th> +<th class="tableblock halign-center valign-top">Time when T<sub>base</sub> = 10µs</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>Single-bit data transmission</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>t0</code> (a&#8594;b)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Time until end of active low-phase when writing a <code>'1'</code> or when reading</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">10µs</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>t1</code> (a&#8594;c)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Time until controller samples bus state (read operation)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">20µs</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>t2</code> (a&#8594;d)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Time until end of bit time slot (when writing a <code>'0'</code> or when reading)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">7</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">70µs</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>t3</code> (a&#8594;e)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Time until end of inter-slot pause (= total duration of one bit)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">9</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">90µs</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>Reset pulse and presence detect</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>t4</code> (f&#8594;g)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Time until end of active reset pulse</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">48</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">480µs</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>t5</code> (f&#8594;h)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Time until controller samples bus presence</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">55</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">550µs</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>t6</code> (f&#8594;i)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Time until end of presence phase</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">96</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">960µs</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Default Timing Parameters</div> +The "known-good" default values for base time multiples were chosen for stable and reliable bus +operation and not for maximum throughput. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The absolute points in time are hardwired by the VHDL code and cannot be changed during runtime. +However, the timing parameter can be customized (if necessary) by editing the ONEWIRE&#8217;s VHDL source file. +The times t0 to t6 correspond to the previous timing diagrams.</p> +</div> +<div class="listingblock"> +<div class="title">Listing 10. Hardwired timing configuration in <code>neorv32_onewire.vhd</code></div> +<div class="content"> +<pre class="highlight"><code class="language-VHDL" data-lang="VHDL">-- timing configuration (absolute time in multiples of the base tick time t_base) -- +constant t_write_one_c : unsigned(6 downto 0) := to_unsigned( 1, 7); -- t0 +constant t_read_sample_c : unsigned(6 downto 0) := to_unsigned( 2, 7); -- t1 +constant t_slot_end_c : unsigned(6 downto 0) := to_unsigned( 7, 7); -- t2 +constant t_pause_end_c : unsigned(6 downto 0) := to_unsigned( 9, 7); -- t3 +constant t_reset_end_c : unsigned(6 downto 0) := to_unsigned(48, 7); -- t4 +constant t_presence_sample_c : unsigned(6 downto 0) := to_unsigned(55, 7); -- t5 +constant t_presence_end_c : unsigned(6 downto 0) := to_unsigned(96, 7); -- t6</code></pre> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Overdrive Mode</div> +The ONEWIRE controller does not support the overdrive mode natively. However, it can be implemented by reducing +the base time <strong>T<sub>base</sub></strong> (and by eventually changing the hardwired timing configuration in the VHDL source file). +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Interrupt</strong></p> +</div> +<div class="paragraph"> +<p>A single interrupt is provided by the ONEWIRE module to signal "idle" condition to the CPU. Whenever the +controller is idle (again) and the data/command FIFO is empty, the interrupt becomes active.</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 26. ONEWIRE register map (<code>struct NEORV32_ONEWIRE</code>)</caption> +<colgroup> +<col style="width: 20%;"> +<col style="width: 10%;"> +<col style="width: 30%;"> +<col style="width: 10%;"> +<col style="width: 30%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="11"><p class="tableblock"><code>0xfff20000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="11"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code> <code>ONEWIRE_CTRL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">ONEWIRE enable, reset if cleared</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code> <code>ONEWIRE_CTRL_CLEAR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">clear RXT FIFO, auto-clears</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>3:2</code> <code>ONEWIRE_CTRL_PRSC1 : ONEWIRE_CTRL_PRSC0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">2-bit clock prescaler select</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>11:4</code> <code>ONEWIRE_CTRL_CLKDIV7 : ONEWIRE_CTRL_CLKDIV0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">8-bit clock divider value</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>14:12</code> -</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>18:15</code> <code>ONEWIRE_CTRL_FIFO_MSB : ONEWIRE_CTRL_FIFO_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">FIFO depth; log2(<code>IO_ONEWIRE_FIFO</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>27:19</code> -</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>28</code> <code>ONEWIRE_CTRL_TX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>29</code> <code>ONEWIRE_CTRL_RX_AVAIL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RX FIFO data available</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30</code> <code>ONEWIRE_CTRL_SENSE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">current state of the bus line</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code> <code>ONEWIRE_CTRL_BUSY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">operation in progress when set or TX FIFO not empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" rowspan="4"><p class="tableblock"><code>0xfff20004</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="4"><p class="tableblock"><code>DCMD</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:0</code> <code>ONEWIRE_DCMD_DATA_MSB : ONEWIRE_DCMD_DATA_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">receive/transmit data</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>9:8</code> <code>ONEWIRE_DCMD_CMD_HI : ONEWIRE_DCMD_CMD_LO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">operation command LSBs</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>10</code> <code>ONEWIRE_DCMD_PRESENCE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">bus presence detected</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:11</code> -</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_pulse_width_modulation_controller_pwm">2.8.20. Pulse-Width Modulation Controller (PWM)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_pwm.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_pwm.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_pwm.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>pwm_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">PWM output channels (16-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_PWM_NUM_CH</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">number of PWM channels to implement (0..16)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The PWM module implements a pulse-width modulation controller with up to 16 independent channels. Duty cycle and +carrier frequency can be programmed individually for each channel.The total number of implemented channels is +defined by the <code>IO_PWM_NUM_CH</code> generic. The PWM output signal <code>pwm_o</code> has a static size of 16-bit. Channel 0 +corresponds to bit 0, channel 1 to bit 1 and so on. If less than 16 channels are configured, only the LSB-aligned +channel bits are connected while the remaining ones are hardwired to zero.</p> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>Depending on the configured number channels, the PWM module provides 16 configuration registers <code>CHANNEL_CFG[0]</code> to +<code>CHANNEL_CFG[15]</code> - one for each channel. Regardless of the configuration of <code>IO_PWM_NUM_CH</code> all channel registers can +be accessed without raising an exception. However, registers above <code>IO_PWM_NUM_CH-1</code> are read-only and hardwired to +all-zero.</p> +</div> +<div class="paragraph"> +<p>Each configuration provides a 1-bit enable flag to enable/disable the according channel, an 8-bit register for setting +the duty cycle and a 3-bit clock prescaler select as well as a 10-bit clock diver for <em>coarse</em> and <em>fine</em> tuning of the +carrier frequency, respectively.</p> +</div> +<div class="paragraph"> +<p>A channel is enabled by setting the <code>PWM_CFG_EN</code> bit. If this bit is cleared the according PWM output is set to zero. +The duty cycle is programmed via the 8 <code>PWM_CFG_DUTY</code> bits. Based on the value programmed to this bits the duty cycle +the resulting duty cycle of the according channel can be computed by the following formula:</p> +</div> +<div class="paragraph"> +<p><em>Duty Cycle</em>[%] = <code>PWM_CFG_DUTY</code> / 2<sup>8</sup></p> +</div> +<div class="paragraph"> +<p>The PWM period (carrier frequency) is derived from the processor&#8217;s main clock (<em>f<sub>main</sub></em>). The <code>PWM_CFG_PRSC</code> register +bits allow to select one out of eight pre-defined clock prescalers for a coarse clock scaling. The 10 <code>PWM_CFG_CDIV</code> register +bits can be used to apply another fine clock scaling.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 27. PWM prescaler configuration</caption> +<colgroup> +<col style="width: 33.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3336%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"><strong><code>PWM_CFG_PRSC</code></strong></th> +<th class="tableblock halign-center valign-top"><code>0b000</code></th> +<th class="tableblock halign-center valign-top"><code>0b001</code></th> +<th class="tableblock halign-center valign-top"><code>0b010</code></th> +<th class="tableblock halign-center valign-top"><code>0b011</code></th> +<th class="tableblock halign-center valign-top"><code>0b100</code></th> +<th class="tableblock halign-center valign-top"><code>0b101</code></th> +<th class="tableblock halign-center valign-top"><code>0b110</code></th> +<th class="tableblock halign-center valign-top"><code>0b111</code></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Resulting <code>clock_prescaler</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">128</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2048</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4096</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>The resulting PWM carrier frequency is defined by:</p> +</div> +<div class="paragraph"> +<p><em>f<sub>PWM</sub></em>[Hz] = <em>f<sub>main</sub></em>[Hz] / (2<sup>8</sup> * <code>clock_prescaler</code> * (1 + <code>PWM_CFG_CDIV</code>))</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 28. PWM register map (<code>struct NEORV32_PWM</code>)</caption> +<colgroup> +<col style="width: 18.1818%;"> +<col style="width: 9.0909%;"> +<col style="width: 27.2727%;"> +<col style="width: 9.0909%;"> +<col style="width: 36.3637%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="5"><p class="tableblock"><code>0xfff00000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="5"><p class="tableblock"><code>CHANNEL_CFG[0]</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code> - <code>PWM_CFG_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Channel 0: channel enabled when set</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30:28</code> - <code>PWM_CFG_PRSC_MSB:PWM_CFG_PRSC_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Channel 0: 3-bit clock prescaler select</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>27:18</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Channel 0: <em>reserved</em>, hardwired to zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>17:8</code> - <code>PWM_CFG_CDIV_MSB:PWM_CFG_CDIV_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Channel 0: 10-bit clock divider</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:0</code> - <code>PWM_CFG_DUTY_MSB:PWM_CFG_DUTY_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Channel 0: 8-bit duty cycle</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfff00004</code> &#8230;&#8203; <code>0xfff00038</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CHANNEL_CFG[1]</code> &#8230;&#8203; <code>CHANNEL_CFG[14]</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Channels 1 to 14</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" rowspan="5"><p class="tableblock"><code>0xfff0003C</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="5"><p class="tableblock"><code>CHANNEL_CFG[15]</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code> - <code>PWM_CFG_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Channel 15: channel enabled when set</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30:28</code> - <code>PWM_CFG_PRSC_MSB:PWM_CFG_PRSC_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Channel 15: 3-bit clock prescaler select</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>27:18</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Channel 15: <em>reserved</em>, hardwired to zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>17:8</code> - <code>PWM_CFG_CDIV_MSB:PWM_CFG_CDIV_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Channel 15: 10-bit clock divider</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:0</code> - <code>PWM_CFG_DUTY_MSB:PWM_CFG_DUTY_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Channel 15: 8-bit duty cycle</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_true_random_number_generator_trng">2.8.21. True Random-Number Generator (TRNG)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_trng.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_trng.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_trng.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_TRNG_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement TRNG when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_TRNG_FIFO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">data FIFO depth, min 1, has to be a power of two</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The NEORV32 true random number generator provides <em>physically</em> true random numbers. It is based on free-running +ring-oscillators that generate <strong>phase noise</strong> when being sampled by a constant clock. This phase noise is +used as physical entropy source. The TRNG features a platform independent architecture without FPGA-specific +primitives, macros or attributes so it can be synthesized for <em>any</em> FPGA.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">In-Depth Documentation</div> +For more information about the neoTRNG architecture and an analysis of its random quality check out the +neoTRNG repository: <a href="https://github.com/stnolting/neoTRNG" class="bare">https://github.com/stnolting/neoTRNG</a> +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Inferring Latches</div> +The synthesis tool might emit warnings regarding <strong>inferred latches</strong> or <strong>combinatorial loops</strong>. However, this +is not design flaw as this is exactly what we want. ;) +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>The TRNG provides two memory mapped interface register. One control register (<code>CTRL</code>) for configuration and +status check and one data register (<code>DATA</code>) for obtaining the random data. The TRNG is enabled by setting the +control register&#8217;s <code>TRNG_CTRL_EN</code>. As soon as the <code>TRNG_CTRL_AVAIL</code> bit is set a new random data byte is +available and can be obtained from the lowest 8 bits of the <code>DATA</code> register. If this bit is cleared, there +is no valid data available and the reading <code>DATA</code> will return all-zero.</p> +</div> +<div class="paragraph"> +<p>An internal entropy FIFO can be configured using the <code>IO_TRNG_FIFO</code> generic. This FIFO automatically samples +new random data from the TRNG to provide some kind of <em>random data pool</em> for applications which require a +larger number of random data in a short time. The random data FIFO can be cleared at any time either by +disabling the TRNG or by setting the <code>TRNG_CTRL_FIFO_CLR</code> flag. The FIFO depth can be retrieved by software +via the <code>TRNG_CTRL_FIFO_*</code> bits.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Simulation</div> +When simulating the processor the TRNG is automatically set to "simulation mode". In this mode the physical +entropy sources (the ring oscillators) are replaced by a simple <strong>pseudo RNG</strong> based on a LFSR providing only +<strong>deterministic pseudo-random</strong> data. The <code>TRNG_CTRL_SIM_MODE</code> flag of the control register is set if simulation +mode is active. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 29. TRNG register map (<code>struct NEORV32_TRNG</code>)</caption> +<colgroup> +<col style="width: 13.3333%;"> +<col style="width: 6.6666%;"> +<col style="width: 26.6666%;"> +<col style="width: 6.6666%;"> +<col style="width: 46.6669%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="5"><p class="tableblock"><code>0xfffa0000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="5"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code> <code>TRNG_CTRL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TRNG enable</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code> <code>TRNG_CTRL_FIFO_CLR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">flush random data FIFO when set; flag auto-clears</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>5:2</code> <code>TRNG_CTRL_FIFO_MSB : TRNG_CTRL_FIFO_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">FIFO depth, log2(<code>IO_TRNG_FIFO</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>6</code> <code>TRNG_CTRL_SIM_MODE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">simulation mode (PRNG!)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7</code> <code>TRNG_CTRL_AVAIL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">random data available when set</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>0xfffa0004</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>DATA</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7:0</code> <code>TRNG_DATA_MSB : TRNG_DATA_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">random data byte</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:8</code> <em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, read as zero</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_custom_functions_subsystem_cfs">2.8.22. Custom Functions Subsystem (CFS)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_cfs.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_cfs.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_cfs.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cfs_in_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">custom input conduit</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cfs_out_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">custom output conduit</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_CFS_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement CFS when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_CFS_CONFIG</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">custom generic conduit</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_CFS_IN_SIZE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">size of <code>cfs_in_i</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_CFS_OUT_SIZE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">size of <code>cfs_out_o</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">CFS interrupt (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The custom functions subsystem is meant for implementing custom tightly-coupled co-processors or interfaces. +IT provides up to 16384 32-bit memory-mapped read/write registers (<code>REG</code>, see register map below) that can be +accessed by the CPU via normal load/store operations. The actual functionality of these register has to be +defined by the hardware designer. Furthermore, the CFS provides two IO conduits to implement custom on-chip +or off-chip interfaces.</p> +</div> +<div class="paragraph"> +<p>Just like any other externally-connected IP, logic implemented within the custom functions subsystem can operate +<em>independently</em> of the CPU providing true parallel processing capabilities. Potential use cases might include +dedicated hardware accelerators for en-/decryption (AES), signal processing (FFT) or AI applications +(CNNs) as well as custom IO systems like fast memory interfaces (DDR) and mass storage (SDIO), networking (CAN) +or real-time data transport (I2S).</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +If you like to implement <em>custom instructions</em> that are executed right within the CPU&#8217;s ALU +see the <a href="#_zxcfu_isa_extension"><code>Zxcfu</code> ISA Extension</a> and the according <a href="#_custom_functions_unit_cfu">Custom Functions Unit (CFU)</a>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +Take a look at the template CFS VHDL source file (<code>rtl/core/neorv32_cfs.vhd</code>). The file is highly +commented to illustrate all aspects that are relevant for implementing custom CFS-based co-processor designs. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +The CFS can also be used to <em>replicate</em> existing NEORV32 modules - for example to implement several TWI controllers. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>CFS Software Access</strong></p> +</div> +<div class="paragraph"> +<p>The CFS memory-mapped registers can be accessed by software using the provided C-language aliases (see +register map table below). Note that all interface registers are defined as 32-bit words of type <code>uint32_t</code>.</p> +</div> +<div class="listingblock"> +<div class="title">Listing 11. CFS Software Access Example</div> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">// C-code CFS usage example +NEORV32_CFS-&gt;REG[0] = (uint32_t)some_data_array(i); // write to CFS register 0 +int temp = (int)NEORV32_CFS-&gt;REG[20]; // read from CFS register 20</code></pre> +</div> +</div> +<div class="paragraph"> +<p><strong>CFS Interrupt</strong></p> +</div> +<div class="paragraph"> +<p>The CFS provides a single high-level-triggered interrupt request signal mapped to the CPU&#8217;s fast interrupt channel 1.</p> +</div> +<div class="paragraph"> +<p><strong>CFS Configuration Generic</strong></p> +</div> +<div class="paragraph"> +<p>By default, the CFS provides a single 32-bit <code>std_ulogic_vector</code> configuration generic <code>IO_CFS_CONFIG</code> +that is available in the processor&#8217;s top entity. This generic can be used to pass custom configuration options +from the top entity directly down to the CFS. The actual definition of the generic and it&#8217;s usage inside the +CFS is left to the hardware designer.</p> +</div> +<div class="paragraph"> +<p><strong>CFS Custom IOs</strong></p> +</div> +<div class="paragraph"> +<p>By default, the CFS also provides two unidirectional input and output conduits <code>cfs_in_i</code> and <code>cfs_out_o</code>. +These signals are directly propagated to the processor&#8217;s top entity. These conduits can be used to implement +application-specific interfaces like memory or peripheral connections. The actual use case of these signals +has to be defined by the hardware designer.</p> +</div> +<div class="paragraph"> +<p>The size of the input signal conduit <code>cfs_in_i</code> is defined via the top&#8217;s <code>IO_CFS_IN_SIZE</code> configuration +generic (default = 32-bit). The size of the output signal conduit <code>cfs_out_o</code> is defined via the top&#8217;s +<code>IO_CFS_OUT_SIZE</code> configuration generic (default = 32-bit). If the custom function subsystem is not implemented +(<code>IO_CFS_EN</code> = false) the <code>cfs_out_o</code> signal is tied to all-zero.</p> +</div> +<div class="paragraph"> +<p>If the CFU output signals are to be used outside the chip, it is recommended to register these signals.</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 30. CFS register map (<code>struct NEORV32_CFS</code>)</caption> +<colgroup> +<col style="width: 25%;"> +<col style="width: 12.5%;"> +<col style="width: 12.5%;"> +<col style="width: 12.5%;"> +<col style="width: 37.5%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">Bit(s)</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0xffeb0000</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>REG[0]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">(r)/(w)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">custom CFS register 0</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0xffeb0004</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>REG[1]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">(r)/(w)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">custom CFS register 1</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">&#8230;&#8203;</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">(r)/(w)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0xffebfff8</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>REG[16382]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">(r)/(w)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">custom CFS register 16382</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0xffebfffc</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>REG[16383]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">(r)/(w)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">custom CFS register 16383</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_smart_led_interface_neoled">2.8.23. Smart LED Interface (NEOLED)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_neoled.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_neoled.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_neoled.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neoled_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial data output</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_NEOLED_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement NEOLED controller when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_NEOLED_TX_FIFO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO depth, has to be a power of 2, min 1</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 9</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">configurable NEOLED data FIFO interrupt (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The NEOLED module provides a dedicated interface for "smart RGB LEDs" like WS2812, WS2811 or any other compatible +LEDs. These LEDs provide a single-wire interface that uses an asynchronous serial protocol for transmitting color +data. Using the NEOLED module allows CPU-independent operation of an arbitrary number of smart LEDs. A configurable data +buffer (FIFO) allows to utilize block transfer operation without requiring the CPU.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +The NEOLED interface is compatible to the "Adafruit Industries NeoPixel&#8482;" products, which feature +WS2812 (or older WS2811) smart LEDs. Other LEDs might be compatible as well when adjusting the controller&#8217;s programmable +timing configuration. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The interface provides a single 1-bit output <code>neoled_o</code> to drive an arbitrary number of cascaded LEDs. Since the +NEOLED module provides 24-bit and 32-bit operating modes, a mixed setup with RGB LEDs (24-bit color) +and RGBW LEDs (32-bit color including a dedicated white LED chip) is possible.</p> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>The NEOLED modules provides two accessible interface registers: the control register <code>CTRL</code> and the write-only +TX data register <code>DATA</code>. The NEOLED module is globally enabled via the control register&#8217;s +<code>NEOLED_CTRL_EN</code> bit. Clearing this bit will terminate any current operation, clear the TX buffer, reset the module +and set the <code>neoled_o</code> output to zero. The precise timing (e.g. implementing the <strong>WS2812</strong> protocol) and transmission +mode are fully programmable via the <code>CTRL</code> register to provide maximum flexibility.</p> +</div> +<div class="paragraph"> +<p><strong>RGB / RGBW Configuration</strong></p> +</div> +<div class="paragraph"> +<p>NeoPixel&#8482; LEDs are available in two "color" version: LEDs with three chips providing RGB color and LEDs with +four chips providing RGB color plus a dedicated white LED chip (= RGBW). Since the intensity of every +LED chip is defined via an 8-bit value the RGB LEDs require a frame of 24-bit per module and the RGBW +LEDs require a frame of 32-bit per module.</p> +</div> +<div class="paragraph"> +<p>The data transfer quantity of the NEOLED module can be programmed via the <code>NEOLED_MODE_EN</code> control +register bit. If this bit is cleared, the NEOLED interface operates in 24-bit mode and will transmit bits <code>23:0</code> of +the data written to <code>DATA</code> to the LEDs. If <code>NEOLED_MODE_EN</code> is set, the NEOLED interface operates in 32-bit +mode and will transmit bits <code>31:0</code> of the data written to <code>DATA</code> to the LEDs.</p> +</div> +<div class="paragraph"> +<p>The mode bit can be reconfigured before writing a new data word to <code>DATA</code> in order to support an arbitrary setup/mixture +of RGB and RGBW LEDs.</p> +</div> +<div class="paragraph"> +<p><strong>Protocol</strong></p> +</div> +<div class="paragraph"> +<p>The interface of the WS2812 LEDs uses an 800kHz carrier signal. Data is transmitted in a serial manner +starting with LSB-first. The intensity for each R, G &amp; B (&amp; W) LED chip (= color code) is defined via an 8-bit +value. The actual data bits are transferred by modifying the duty cycle of the signal (the timings for the +WS2812 are shown below). A RESET command is "send" by pulling the data line LOW for at least 50μs.</p> +</div> +<div class="imageblock text-left"> +<div class="content"> +<img src="img/neopixel_timing.png" alt="neopixel timing"> +</div> +<div class="title">Figure 8. WS2812 bit-level timing (timing does not scale)</div> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 31. WS2812 interface timing</caption> +<colgroup> +<col style="width: 20%;"> +<col style="width: 20%;"> +<col style="width: 60%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">T<sub>total</sub> (T<sub>carrier</sub>)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1.25μs +/- 300ns</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">period for a single bit</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">T<sub>0H</sub></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0.4μs +/- 150ns</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">high-time for sending a <code>1</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">T<sub>0L</sub></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0.8μs +/- 150ns</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">low-time for sending a <code>1</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">T<sub>1H</sub></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0.85μs +/- 150ns</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">high-time for sending a <code>0</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">T<sub>1L</sub></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0.45μs +/- 150 ns</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">low-time for sending a <code>0</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">RESET</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Above 50μs</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">low-time for sending a RESET command</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Timing Configuration</strong></p> +</div> +<div class="paragraph"> +<p>The basic carrier frequency (800kHz for the WS2812 LEDs) is configured via a 3-bit main clock prescaler +(<code>NEOLED_CTRL_PRSC*</code>, see table below) that scales the main processor clock f<sub>main</sub> and a 5-bit cycle +multiplier <code>NEOLED_CTRL_T_TOT_*</code>.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 32. NEOLED Prescaler Configuration</caption> +<colgroup> +<col style="width: 33.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3336%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"><strong><code>NEOLED_CTRL_PRSCx</code></strong></th> +<th class="tableblock halign-center valign-top"><code>0b000</code></th> +<th class="tableblock halign-center valign-top"><code>0b001</code></th> +<th class="tableblock halign-center valign-top"><code>0b010</code></th> +<th class="tableblock halign-center valign-top"><code>0b011</code></th> +<th class="tableblock halign-center valign-top"><code>0b100</code></th> +<th class="tableblock halign-center valign-top"><code>0b101</code></th> +<th class="tableblock halign-center valign-top"><code>0b110</code></th> +<th class="tableblock halign-center valign-top"><code>0b111</code></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Resulting <code>clock_prescaler</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">128</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2048</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4096</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>The duty-cycles (or more precisely: the high- and low-times for sending either a '1' bit or a '0' bit) are +defined via the 5-bit <code>NEOLED_CTRL_T_ONE_H_*</code> and <code>NEOLED_CTRL_T_ZERO_H_*</code> values, respectively. These programmable +timing constants allow to adapt the interface for a wide variety of smart LED protocol (for example WS2812 vs. +WS2811).</p> +</div> +<div class="paragraph"> +<p><strong>Timing Configuration - Example (WS2812)</strong></p> +</div> +<div class="paragraph"> +<p>Generate the base clock f<sub>TX</sub> for the NEOLED TX engine:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>processor clock f<sub>main</sub> = 100 MHz</p> +</li> +<li> +<p><code>NEOLED_CTRL_PRSCx</code> = <code>0b001</code> = f<sub>main</sub> / 4</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><em><strong>f<sub>TX</sub></strong></em> = <em>f<sub>main</sub>[Hz]</em> / <code>clock_prescaler</code> = 100MHz / 4 = 25MHz</p> +</div> +<div class="paragraph"> +<p><em><strong>T<sub>TX</sub></strong></em> = 1 / <em><strong>f<sub>TX</sub></strong></em> = 40ns</p> +</div> +<div class="paragraph"> +<p>Generate carrier period (T<sub>carrier</sub>) and <strong>high-times</strong> (duty cycle) for sending <code>0</code> (T<sub>0H</sub>) and <code>1</code> (T<sub>1H</sub>) bits:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>NEOLED_CTRL_T_TOT</code> = <code>0b11110</code> (= decimal 30)</p> +</li> +<li> +<p><code>NEOLED_CTRL_T_ZERO_H</code> = <code>0b01010</code> (= decimal 10)</p> +</li> +<li> +<p><code>NEOLED_CTRL_T_ONE_H</code> = <code>0b10100</code> (= decimal 20)</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><em><strong>T<sub>carrier</sub></strong></em> = <em><strong>T<sub>TX</sub></strong></em> * <code>NEOLED_CTRL_T_TOT</code> = 40ns * 30 = 1.4µs</p> +</div> +<div class="paragraph"> +<p><em><strong>T<sub>0H</sub></strong></em> = <em><strong>T<sub>TX</sub></strong></em> * <code>NEOLED_CTRL_T_ZERO_H</code> = 40ns * 10 = 0.4µs</p> +</div> +<div class="paragraph"> +<p><em><strong>T<sub>1H</sub></strong></em> = <em><strong>T<sub>TX</sub></strong></em> * <code>NEOLED_CTRL_T_ONE_H</code> = 40ns * 20 = 0.8µs</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +The NEOLED SW driver library (<code>neorv32_neoled.h</code>) provides a simplified configuration +function that configures all timing parameters for driving WS2812 LEDs based on the processor +clock frequency. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>TX Data FIFO</strong></p> +</div> +<div class="paragraph"> +<p>The interface features a configurable TX data buffer (a FIFO) to allow more CPU-independent operation. The buffer +depth is configured via the <code>IO_NEOLED_TX_FIFO</code> top generic (default = 1 entry). The FIFO size configuration can be +read via the <code>NEOLED_CTRL_BUFS_x</code> control register bits, which result log2(<em>IO_NEOLED_TX_FIFO</em>).</p> +</div> +<div class="paragraph"> +<p>When writing data to the <code>DATA</code> register the data is automatically written to the TX buffer. Whenever +data is available in the buffer the serial transmission engine will take and transmit it to the LEDs. +The data transfer size (<code>NEOLED_MODE_EN</code>) can be modified at any time since this control register bit is also buffered +in the FIFO. This allows an arbitrary mix of RGB and RGBW LEDs in the chain.</p> +</div> +<div class="paragraph"> +<p>Software can check the FIFO fill level via the control register&#8217;s <code>NEOLED_CTRL_TX_EMPTY</code>, <code>NEOLED_CTRL_TX_HALF</code> +and <code>NEOLED_CTRL_TX_FULL</code> flags. The <code>NEOLED_CTRL_TX_BUSY</code> flags provides additional information if the the serial +transmit engine is still busy sending data.</p> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +Please note that the timing configurations (<code>NEOLED_CTRL_PRSCx</code>, <code>NEOLED_CTRL_T_TOT_x</code>, +<code>NEOLED_CTRL_T_ONE_H_x</code> and <code>NEOLED_CTRL_T_ZERO_H_x</code>) are <strong>NOT</strong> stored to the buffer. Changing +these value while the buffer is not empty or the TX engine is still busy will cause data corruption. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Strobe Command ("RESET")</strong></p> +</div> +<div class="paragraph"> +<p>According to the WS2812 specs the data written to the LED&#8217;s shift registers is strobed to the actual PWM driver +registers when the data line is low for 50μs ("RESET" command, see table above). This can be implemented +using busy-wait for at least 50μs. Obviously, this concept wastes a lot of processing power.</p> +</div> +<div class="paragraph"> +<p>To circumvent this, the NEOLED module provides an option to automatically issue an idle time for creating the RESET +command. If the <code>NEOLED_CTRL_STROBE</code> control register bit is set, <em>all</em> data written to the data FIFO (via <code>DATA</code>, +the actually written data is irrelevant) will trigger an idle phase (<code>neoled_o</code> = zero) of 127 periods (= <em><strong>T<sub>carrier</sub></strong></em>). +This idle time will cause the LEDs to strobe the color data into the PWM driver registers.</p> +</div> +<div class="paragraph"> +<p>Since the <code>NEOLED_CTRL_STROBE</code> flag is also buffered in the TX buffer, the RESET command is treated just as another +data word being written to the TX buffer making busy wait concepts obsolete and allowing maximum refresh rates.</p> +</div> +<div class="paragraph"> +<p><strong>NEOLED Interrupt</strong></p> +</div> +<div class="paragraph"> +<p>The NEOLED modules features a single interrupt that triggers based on the current TX buffer fill level. +The interrupt can only become pending if the NEOLED module is enabled. The specific interrupt condition +is configured via the <code>NEOLED_CTRL_IRQ_CONF</code> bit in the unit&#8217;s control register.</p> +</div> +<div class="paragraph"> +<p>If <code>NEOLED_CTRL_IRQ_CONF</code> is set, the module&#8217;s interrupt is generated whenever the TX FIFO is less than half-full. +In this case software can write up to <code>IO_NEOLED_TX_FIFO</code>/2 new data words to <code>DATA</code> without checking the FIFO +status flags. If <code>NEOLED_CTRL_IRQ_CONF</code> is cleared, an interrupt is generated when the TX FIFO is empty.</p> +</div> +<div class="paragraph"> +<p>Once the NEOLED interrupt has fired it remains pending until the actual cause of the interrupt is resolved.</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 33. NEOLED register map (<code>struct NEORV32_NEOLED</code>)</caption> +<colgroup> +<col style="width: 14.2857%;"> +<col style="width: 7.1428%;"> +<col style="width: 35.7142%;"> +<col style="width: 7.1428%;"> +<col style="width: 35.7145%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="13"><p class="tableblock"><code>0xfffd0000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="13"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code> <code>NEOLED_CTRL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">NEOLED enable</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code> <code>NEOLED_CTRL_MODE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">data transfer size; <code>0</code>=24-bit; <code>1</code>=32-bit</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2</code> <code>NEOLED_CTRL_STROBE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>=send normal color data; <code>1</code>=send RESET command on data write access</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>5:3</code> <code>NEOLED_CTRL_PRSC2 : NEOLED_CTRL_PRSC0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3-bit clock prescaler, bit 0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>9:6</code> <code>NEOLED_CTRL_BUFS3 : NEOLED_CTRL_BUFS0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4-bit log2(<em>IO_NEOLED_TX_FIFO</em>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>14:10</code> <code>NEOLED_CTRL_T_TOT_4 : NEOLED_CTRL_T_TOT_0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">5-bit pulse clock ticks per total single-bit period (T<sub>total</sub>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>19:15</code> <code>NEOLED_CTRL_T_ZERO_H_4 : NEOLED_CTRL_T_ZERO_H_0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">5-bit pulse clock ticks per high-time for sending a zero-bit (T<sub>0H</sub>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>24:20</code> <code>NEOLED_CTRL_T_ONE_H_4 : NEOLED_CTRL_T_ONE_H_0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">5-bit pulse clock ticks per high-time for sending a one-bit (T<sub>1H</sub>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>27</code> <code>NEOLED_CTRL_IRQ_CONF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO interrupt configuration: <code>0</code>=IRQ if FIFO is empty, <code>1</code>=IRQ if FIFO is less than half-full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>28</code> <code>NEOLED_CTRL_TX_EMPTY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO is empty</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>29</code> <code>NEOLED_CTRL_TX_HALF</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO is <em>at least</em> half full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30</code> <code>NEOLED_CTRL_TX_FULL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX FIFO is full</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code> <code>NEOLED_CTRL_TX_BUSY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX serial engine is busy when set</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfffd0004</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DATA</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:0</code> / <code>23:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">TX data (32- or 24-bit, depending on <em>NEOLED_CTRL_MODE</em> bit)</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_external_interrupt_controller_xirq">2.8.24. External Interrupt Controller (XIRQ)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_xirq.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_xirq.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_xirq.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xirq_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">External interrupts input (32-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XIRQ_NUM_CH</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of external IRQ channels to implement (0..32)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 8</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">XIRQ (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The external interrupt controller provides a simple mechanism to implement up to 32 platform-level / processor-external +interrupt request signals. The external IRQ requests are prioritized, queued and signaled to the CPU via a +<em>single</em> CPU fast interrupt request channel.</p> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>The XIRQ provides up to 32 external interrupt channels configured via the <code>XIRQ_NUM_CH</code> generic. Each bit in the +<code>xirq_i</code> input signal vector represents one interrupt channel. If less than 32 channels are configured, only the +LSB-aligned channels are used while the remaining ones are left unconnected internally.</p> +</div> +<div class="paragraph"> +<p>The external interrupt controller features four interface registers:</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>external interrupt channel enable (<code>EIE</code>)</p> +</li> +<li> +<p>external interrupt source (<code>ESC</code>)</p> +</li> +<li> +<p>trigger type configuration (<code>TTYP</code>)</p> +</li> +<li> +<p>trigger polarity configuration (<code>TPOL</code>)</p> +</li> +</ol> +</div> +<div class="paragraph"> +<p>The actual interrupt trigger type can be configured individually for each channel using the <code>TTYP</code> and <code>TPOL</code> +registers. <code>TTYP</code> defines the actual trigger type (level-triggered or edge-triggered), while <code>TPOL</code> defines +the trigger&#8217;s polarity (low-level/falling-edge or high-level/rising-edge). The position of each bit in these +registers corresponds the according XIRQ channel.</p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 34. XIRQ Trigger Configuration</caption> +<colgroup> +<col style="width: 28.5714%;"> +<col style="width: 28.5714%;"> +<col style="width: 42.8572%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top"><code>TTYP(i)</code></th> +<th class="tableblock halign-center valign-top"><code>TPOL(i)</code></th> +<th class="tableblock halign-left valign-top">Resulting trigger of <code>xirq_i(i)</code></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">low-level</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>1</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">high-level</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>1</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">falling-edge</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>1</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>1</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">rising-edge</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>Each interrupt channel can be enabled or disabled individually using the <code>EIE</code> register. If the trigger of a +disabled channel fires the interrupt request is entirely ignored.</p> +</div> +<div class="paragraph"> +<p>If the configured trigger of an <em>enabled</em> channels fires, the according interrupt request is buffered internally +and an interrupt request is sent to the CPU. If more than one trigger fires at one a prioritization is used: +the channels are prioritized in a static order, i.e. channel 0 (<code>xirq_i(0)</code>) has the highest priority and channel +31 (<code>xirq_i(31)</code>) has the lowest priority.</p> +</div> +<div class="paragraph"> +<p>The CPU can determine the most prioritized external interrupt request by reading the interrupt source register <code>ESC</code>. +This register provides a 5-bit wide ID (0..31) identifying the currently firing external interrupt source channel as +well as a single bit (the MSB) that +Writing <em>any</em> value to this register will acknowledge and clear the <em>current</em> CPU interrupt (so the XIRQ controller +can issue a new CPU interrupt).</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 35. XIRQ register map (<code>struct NEORV32_XIRQ</code>)</caption> +<colgroup> +<col style="width: 16.6666%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 58.3335%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">Bit(s)</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0xfff30000</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>EIE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">External interrupt enable register (one bit per channel, LSB-aligned)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" rowspan="3"><p class="tableblock"><code>0xfff30004</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="3"><p class="tableblock"><code>ESC</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>31</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/c</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">XIRQ interrupt when set; write any value to this register to acknowledge the current XIRQ interrupt</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>30:5</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>4:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/c</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Interrupt source ID (0..31) of firing IRQ (prioritized!)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0xfff30008</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TTYP</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger type select (<code>0</code> = level trigger, <code>1</code> = edge trigger); each bit corresponds to the according channel number</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0xfff3000c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TPOL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger polarity select (<code>0</code> = low-level/falling-edge, <code>1</code> = high-level/rising-edge); each bit corresponds to the according channel number</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_general_purpose_timer_gptmr">2.8.25. General Purpose Timer (GPTMR)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_gptmr.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_gptmr.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_gptmr.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IO_GPTMR_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement general purpose timer when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast IRQ channel 12</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">timer interrupt (see <a href="#_processor_interrupts">Processor Interrupts</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The general purpose timer module implements a simple yet universal 32-bit timer. It is implemented if the processor&#8217;s +<code>IO_GPTMR_EN</code> top generic is set <code>true</code>. The timer provides a pre-scaled counter register that can trigger an interrupt +when reaching a programmable threshold value.</p> +</div> +<div class="paragraph"> +<p>The GPTMR provides three interface registers : a control register (<code>CTRL</code>), a 32-bit counter register (<code>COUNT</code>) and a +32-bit threshold register (<code>THRES</code>). The timer is globally enabled by setting the <code>GPTMR_CTRL_EN</code> bit in the module&#8217;s +control register. When the timer is enable the <code>COUNT</code> register will start incrementing from zero at a programmable +rate that scales the main processor clock. this pre-scaler is configured via the three <code>GPTMR_CTRL_PRSCx</code> +control register bits:</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 36. GPTMR prescaler configuration</caption> +<colgroup> +<col style="width: 33.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3336%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"><strong><code>GPTMR_CTRL_PRSCx</code></strong></th> +<th class="tableblock halign-center valign-top"><code>0b000</code></th> +<th class="tableblock halign-center valign-top"><code>0b001</code></th> +<th class="tableblock halign-center valign-top"><code>0b010</code></th> +<th class="tableblock halign-center valign-top"><code>0b011</code></th> +<th class="tableblock halign-center valign-top"><code>0b100</code></th> +<th class="tableblock halign-center valign-top"><code>0b101</code></th> +<th class="tableblock halign-center valign-top"><code>0b110</code></th> +<th class="tableblock halign-center valign-top"><code>0b111</code></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Resulting <code>clock_prescaler</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">128</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2048</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4096</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>Whenever the counter register <code>COUNT</code> equals the programmable threshold value <code>THRES</code> the module&#8217;s interrupt +signal becomes pending (indicated by <code>GPTMR_CTRL_IRQ_PND</code> being set). Note that a pending interrupt has to be +cleared manually by writing a <code>1</code> to <code>GPTMR_CTRL_IRQ_CLR</code>.</p> +</div> +<div class="paragraph"> +<p>The control register&#8217;s <code>GPTMR_CTRL_MODE</code> bit defines what will happen when <code>COUNT == THRES</code>.</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>GPTMR_CTRL_MODE = 0</code>: <strong>single-shot mode</strong> - the <code>COUNT</code> register will stop incrementing</p> +</li> +<li> +<p><code>GPTMR_CTRL_MODE = 1</code>: <strong>continuous mode</strong> - the <code>COUNT</code> register is automatically reset and restarts incrementing from zero</p> +</li> +</ul> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Resetting the Counter</div> +Disabling the GPTMR will also clear the <code>COUNT</code> register. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Interrupt</strong></p> +</div> +<div class="paragraph"> +<p>The GPTRM provides a single interrupt line is triggered whenever <code>COUNT</code> equals <code>THRES</code>. Once triggered, the interrupt will +stay pending until explicitly cleared by writing a 1 to <code>GPTMR_CTRL_IRQ_CLR</code>.</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 37. GPTMR register map (<code>struct NEORV32_GPTMR</code>)</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 11.1111%;"> +<col style="width: 22.2222%;"> +<col style="width: 5.5555%;"> +<col style="width: 38.889%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="6"><p class="tableblock"><code>0xfff10000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="6"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code> <code>GPTMR_CTRL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Timer enable flag</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>3:1</code> <code>GPTMR_CTRL_PRSC2 : GPTMR_CTRL_PRSC0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3-bit clock prescaler select</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>4</code> <code>GPTMR_CTRL_MODE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Operation mode (0=single-shot, 1=continuous)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>29:5</code> -</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30</code> <code>GPTMR_CTRL_IRQ_CLR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Write <code>1</code> to clear timer-match interrupt; auto-clears</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code> <code>GPTMR_CTRL_IRQ_PND</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Timer-match interrupt pending</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfff10004</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>THRES</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Threshold value register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfff10008</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>COUNT</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Counter register</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_execute_in_place_module_xip">2.8.26. Execute In Place Module (XIP)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_xip.vhd</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">XIP module</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_cache.vhd</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Generic cache module</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_xip.c</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_xip.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xip_csn_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit chip select, low-active</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xip_clk_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial clock output</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xip_dat_i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial data input</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xip_dat_o</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1-bit serial data output</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XIP_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement XIP module when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XIP_CACHE_EN</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">implement XIP cache when <code>true</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XIP_CACHE_NUM_BLOCKS</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">number of blocks in XIP cache; has to be a power of two</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XIP_CACHE_BLOCK_SIZE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">number of bytes per XIP cache block; has to be a power of two, min 4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">control registers: non-32-bit write accesses are ignored</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">XIP data access: read-only</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The execute in-place (XIP) module allows to execute code (and read constant data) directly from an external SPI flash memory. +The standard serial peripheral interface (SPI) is used as transfer protocol. All bus requests issued by the CPU +are converted transparently into SPI flash access commands. Hence, the external XIP flash behaves like a simple on-chip ROM.</p> +</div> +<div class="paragraph"> +<p>From the CPU side, the modules provides two independent interfaces: one for transparently accessing the XIP flash and another +one for accessing the module&#8217;s control and status registers. The first interface provides the <em>transparent</em> +gateway to the SPI flash, so the CPU can directly fetch and execute instructions and/or read constant data. +Note that this interface is read-only. Any write access will raise a bus error exception. The second interface is +mapped to the processor&#8217;s IO space and allows accesses to the XIP module&#8217;s configuration registers as well as +conducting individual SPI transfers.</p> +</div> +<div class="paragraph"> +<p>The XIP module provides an optional configurable cache to accelerate SPI flash accesses.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">XIP Address Mapping</div> +When XIP mode is enabled the flash is mapped to fixed address space region starting at address +<code>0xE0000000</code> (see section <a href="#_address_space">Address Space</a>) supporting a maximum flash size of 256MB. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">XIP Example Program</div> +An example program is provided in <code>sw/example/demo_xip</code> that illustrate how to program and configure +an external SPI flash to run a program from it. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>SPI Configuration</strong></p> +</div> +<div class="paragraph"> +<p>The XIP module accesses external flash using the standard SPI protocol. The module always sends data MSB-first and +provides all of the standard four clock modes (0..3), which are configured via the <code>XIP_CTRL_CPOL</code> (clock polarity) +and <code>XIP_CTRL_CPHA</code> (clock phase) control register bits, respectively. The flash&#8217;s "read command", which initiates +a read access, is defined by the <code>XIP_CTRL_RD_CMD</code> control register bits. For most SPI flash memories this is <code>0x03</code> +for <em>normal</em> SPI mode.</p> +</div> +<div class="paragraph"> +<p>The SPI clock (<code>xip_clk_o</code>) frequency is programmed by the 3-bit <code>XIP_CTRL_PRSCx</code> clock prescaler for a coarse clock +selection and a 4-bit clock divider <code>XPI_CTRL_CDIVx</code> for a fine clock selection. +The following clock prescalers (<code>XIP_CTRL_PRSCx</code>) are available:</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 38. XIP clock prescaler configuration</caption> +<colgroup> +<col style="width: 33.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 8.3336%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"><strong><code>XIP_CTRL_PRSCx</code></strong></th> +<th class="tableblock halign-center valign-top"><code>0b000</code></th> +<th class="tableblock halign-center valign-top"><code>0b001</code></th> +<th class="tableblock halign-center valign-top"><code>0b010</code></th> +<th class="tableblock halign-center valign-top"><code>0b011</code></th> +<th class="tableblock halign-center valign-top"><code>0b100</code></th> +<th class="tableblock halign-center valign-top"><code>0b101</code></th> +<th class="tableblock halign-center valign-top"><code>0b110</code></th> +<th class="tableblock halign-center valign-top"><code>0b111</code></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Resulting <code>clock_prescaler</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">128</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1024</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">2048</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4096</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>Based on the programmed clock configuration, the actual SPI clock frequency f<sub>SPI</sub> is derived +from the processor&#8217;s main clock f<sub>main</sub> according to the following equation:</p> +</div> +<div class="paragraph"> +<p><em><strong>f<sub>SPI</sub></strong></em> = <em>f<sub>main</sub>[Hz]</em> / (2 * <code>clock_prescaler</code> * (1 + <code>XPI_CTRL_CDIVx</code>))</p> +</div> +<div class="paragraph"> +<p>Hence, the maximum SPI clock is f<sub>main</sub> / 4 and the lowest SPI clock is f<sub>main</sub> / 131072. The SPI clock is always +symmetric having a duty cycle of 50%.</p> +</div> +<div class="paragraph"> +<p><strong>High-Speed Mode</strong></p> +</div> +<div class="paragraph"> +<p>The XIP module provides a high-speed mode to further boost the maximum SPI clock frequency. When enabled via the control +register&#8217;s <code>XIP_CTRL_HIGHSPEED</code> bit the clock prescaler configuration (<code>XIP_CTRL_PRSCx</code> bits) is overridden setting it +to a minimal factor of 1. However, the clock speed can still be fine-tuned using the <code>XPI_CTRL_CDIVx</code> bits.</p> +</div> +<div class="paragraph"> +<p><em><strong>f<sub>SPI</sub></strong></em> = <em>f<sub>main</sub>[Hz]</em> / (2 * 1 * (1 + <code>XPI_CTRL_CDIVx</code>))</p> +</div> +<div class="paragraph"> +<p>Hence, the maximum SPI clock when in high-speed mode is f<sub>main</sub> / 2.</p> +</div> +<div class="paragraph"> +<p><strong>Direct SPI Access</strong></p> +</div> +<div class="paragraph"> +<p>The XIP module allows to initiate <em>direct</em> SPI transactions. This feature can be used to configure the attached SPI +flash or to perform direct read and write accesses to the flash memory. Two data registers <code>DATA_LO</code> and +<code>DATA_HI</code> are provided to send up to 64-bit of SPI data. The <code>DATA_HI</code> register is write-only, +so a total of just 32-bits of receive data is provided. Note that the module handles the chip-select +line (<code>xip_csn_o</code>) by itself so it is not possible to construct larger consecutive transfers.</p> +</div> +<div class="paragraph"> +<p>The actual data transmission size in bytes is defined by the control register&#8217;s <code>XIP_CTRL_SPI_NBYTES</code> bits. +Any configuration from 1 byte to 8 bytes is valid. Other value will result in unpredictable behavior.</p> +</div> +<div class="paragraph"> +<p>Since data is always transferred MSB-first, the data in <code>DATA_HI:DATA_LO</code> also has to be MSB-aligned. Receive data is +available in <code>DATA_LO</code> only since <code>DATA_HI</code> is write-only. Writing to <code>DATA_HI</code> triggers the actual SPI transmission. +The <code>XIP_CTRL_PHY_BUSY</code> control register flag indicates a transmission being in progress.</p> +</div> +<div class="paragraph"> +<p>The chip-select line of the XIP module (<code>xip_csn_o</code>) will only become asserted (enabled, pulled low) if the +<code>XIP_CTRL_SPI_CSEN</code> control register bit is set. If this bit is cleared, <code>xip_csn_o</code> is always disabled +(pulled high).</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +Direct SPI mode is only possible when the module is enabled (setting <code>XIP_CTRL_EN</code>) but <strong>before</strong> the actual +XIP mode is enabled via <code>XIP_CTRL_XIP_EN</code>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +When the XIP mode is not enabled, the XIP module can also be used as additional general purpose SPI controller +with a transfer size of up to 64 bits per transmission. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Using the XIP Mode</strong></p> +</div> +<div class="paragraph"> +<p>The XIP module is globally enabled by setting the <code>XIP_CTRL_EN</code> bit in the device&#8217;s <code>CTRL</code> control register. +Clearing this bit will reset the whole module and will also terminate any pending SPI transfer.</p> +</div> +<div class="paragraph"> +<p>Since there is a wide variety of SPI flash components with different sizes, the XIP module allows to specify +the address width of the flash: the number of address bytes used for addressing flash memory content has to be +configured using the control register&#8217;s <em>XIP_CTRL_XIP_ABYTES</em> bits. These two bits contain the number of SPI +address bytes (<strong>minus one</strong>). For example for a SPI flash with 24-bit addresses these bits have to be set to +<code>0b10</code>.</p> +</div> +<div class="paragraph"> +<p>The transparent XIP accesses are transformed into SPI transmissions with the following format (starting with the MSB):</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>8-bit command: configured by the <code>XIP_CTRL_RD_CMD</code> control register bits ("SPI read command")</p> +</li> +<li> +<p>8 to 32 bits address: defined by the <code>XIP_CTRL_XIP_ABYTES</code> control register bits ("number of address bytes")</p> +</li> +<li> +<p>32-bit data: sending zeros and receiving the according flash word (32-bit)</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>Hence, the maximum XIP transmission size is 72-bit, which has to be configured via the <code>XIP_CTRL_SPI_NBYTES</code> +control register bits. Note that the 72-bit transmission size is only available in XIP mode. The transmission +size of the direct SPI accesses is limited to 64-bit.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +When using four SPI flash address bytes, the most significant 4 bits of the address are always hardwired +to zero allowing a maximum <strong>accessible</strong> flash size of 256MB. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +The XIP module always fetches a full naturally aligned 32-bit word from the SPI flash. Any sub-word data masking +or alignment will be performed by the CPU core logic. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +The XIP mode requires the 4-byte data words in the flash to be ordered in <strong>little-endian</strong> byte order. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>After the SPI properties (including the amount of address bytes <strong>and</strong> the total amount of SPI transfer bytes) +and XIP address mapping are configured, the actual XIP mode can be enabled by setting +the control register&#8217;s <code>XIP_CTRL_XIP_EN</code> bit. This will enable the "transparent SPI access port" of the module and thus, +the <em>transparent</em> conversion of access requests into proper SPI flash transmissions. Hence, any access to the processor&#8217;s +memory-mapped XIP region (<code>0xE0000000</code> to <code>0xEFFFFFFF</code>) will be converted into SPI flash accesses. +Make sure <code>XIP_CTRL_SPI_CSEN</code> is also set so the module can actually select/enable the attached SPI flash. +No more direct SPI accesses via <code>DATA_HI:DATA_LO</code> are possible when the XIP mode is enabled. However, the +XIP mode can be disabled at any time.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +If the XIP module is disabled (<em>XIP_CTRL_EN</em> = <code>0</code>) any accesses to the memory-mapped XIP flash address region +will raise a bus access exception. If the XIP module is enabled (<em>XIP_CTRL_EN</em> = <code>1</code>) but XIP mode is not enabled +yet (<em>XIP_CTRL_XIP_EN</em> = '0') any access to the programmed XIP memory segment will also raise a bus access exception. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +It is highly recommended to enable the <a href="#_processor_internal_instruction_cache_icache">Processor-Internal Instruction Cache (iCACHE)</a> to cover some +of the SPI access latency. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>XIP Cache</strong></p> +</div> +<div class="paragraph"> +<p>Since every single instruction fetch request from the CPU is translated into serial SPI transmissions the access latency is +very high resulting in a low throughput. In order to improve performance, the XIP module provides an optional cache that +allows to buffer recently-accessed data. The cache is implemented as a simple direct-mapped read-only cache with a configurable +cache layout:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>XIP_CACHE_EN</code>: when set to <code>true</code> the CIP cache is implemented</p> +</li> +<li> +<p><code>XIP_CACHE_NUM_BLOCKS</code> defines the number of cache blocks (or lines)</p> +</li> +<li> +<p><code>XIP_CACHE_BLOCK_SIZE</code> defines the size in bytes of each cache block</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>When the cache is implemented, the XIP module operates in <strong>burst mode</strong> utilizing the flash&#8217;s <em>incremental read</em> capabilities. +Thus, several bytes (= <code>XIP_CACHE_BLOCK_SIZE</code>) are read consecutively from the flash using a single read command.</p> +</div> +<div class="paragraph"> +<p>The XIP cache is cleared when the XIP module is disabled (<code>XIP_CTRL_EN = 0</code>), when XIP mode is disabled +(<code>XIP_CTRL_XIP_EN = 0</code>) or when the CPU issues a <code>fence(.i)</code> instruction.</p> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 39. XIP Register Map (<code>struct NEORV32_XIP</code>)</caption> +<colgroup> +<col style="width: 13.3333%;"> +<col style="width: 6.6666%;"> +<col style="width: 26.6666%;"> +<col style="width: 6.6666%;"> +<col style="width: 46.6669%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Bit(s), Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="14"><p class="tableblock"><code>0xffff4000</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="14"><p class="tableblock"><code>CTRL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code> <code>XIP_CTRL_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">XIP module enable</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>3:1</code> <code>XIP_CTRL_PRSC2 : XIP_CTRL_PRSC0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3-bit SPI clock prescaler select</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>4</code> <code>XIP_CTRL_CPOL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SPI clock polarity</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>5</code> <code>XIP_CTRL_CPHA</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SPI clock phase</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>9:6</code> <code>XIP_CTRL_SPI_NBYTES_MSB : XIP_CTRL_SPI_NBYTES_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of bytes in SPI transaction (1..9)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>10</code> <code>XIP_CTRL_XIP_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">XIP mode enable</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>12:11</code> <code>XIP_CTRL_XIP_ABYTES_MSB : XIP_CTRL_XIP_ABYTES_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Number of address bytes for XIP flash (minus 1)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>20:13</code> <code>XIP_CTRL_RD_CMD_MSB : XIP_CTRL_RD_CMD_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Flash read command</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>21</code> <code>XIP_CTRL_SPI_CSEN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Allow SPI chip-select to be actually asserted when set</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>22</code> <code>XIP_CTRL_HIGHSPEED</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">enable SPI high-speed mode (ignoring <code>XIP_CTRL_PRSCx</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>26:23</code> <code>XIP_CTRL_CDIV3 : XIP_CTRL_CDIV0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4-bit clock divider for fine-tuning</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>29:27</code> -</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>30</code> <code>XIP_CTRL_PHY_BUSY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SPI PHY busy when set</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code> <code>XIP_CTRL_XIP_BUSY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">XIP access in progress when set</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xffff4004</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xffff4008</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DATA_LO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Direct SPI access - data register low</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xffff400C</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DATA_HI</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31:0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Direct SPI access - data register high; write access triggers SPI transfer</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_system_configuration_information_memory_sysinfo">2.8.27. System Configuration Information Memory (SYSINFO)</h4> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 30%;"> +<col style="width: 30%;"> +<col style="width: 40%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware source files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_sysinfo.vhd</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Software driver files:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">neorv32_sysinfo.h</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Top entity ports:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration generics:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">*</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">most of the top&#8217;s configuration generics</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU interrupts:</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">none</p></td> +<td class="tableblock halign-left valign-top"></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access restrictions:</p></td> +<td class="tableblock halign-left valign-top" colspan="2"><p class="tableblock">non-32-bit write accesses are ignored</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><strong>Overview</strong></p> +</div> +<div class="paragraph"> +<p>The SYSINFO module allows the application software to determine the setting of most of the <a href="#_processor_top_entity_generics">Processor Top Entity - Generics</a> +that are related to CPU and processor/SoC configuration. This device is always implemented - regardless of the actual hardware +configuration since the NEORV32 software framework requires information from this device for correct operation. +However, advanced users that do not want to use the default NEORV32 software framework can choose to disable the +entire SYSINFO module. This might also be suitable for setups that use the processor just as wrapper for a CPU-only +configuration.</p> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +<div class="title">Disabling the SYSINFO Module</div> +Setting the <code>IO_DISABLE_SYSINFO</code> top entity generic to <code>true</code> will remove the SYSINFO module from the design. +This option is suitable for advanced uses that wish to use a CPU-only setup that still contains the bus infrastructure. +As a result, large parts of the NEORV32 software framework no longer work (e.g. most IO drivers, the RTE and the bootloader). +<strong>Hence, this option is not recommended.</strong> +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Register Map</strong></p> +</div> +<div class="paragraph"> +<p>All registers of this module are read-only except for the <code>CLK</code> register. Upon reset, the <code>CLK</code> registers is initialized +from the <code>CLOCK_FREQUENCY</code> top entity generic. Application software can override this default value in order, for example, +to take into account a dynamic frequency scaling of the processor.</p> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 40. SYSINFO register map (<code>struct NEORV32_SYSINFO</code>)</caption> +<colgroup> +<col style="width: 18.1818%;"> +<col style="width: 9.0909%;"> +<col style="width: 9.0909%;"> +<col style="width: 63.6364%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfffe0000</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CLK</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">clock frequency in Hz (initialized from top&#8217;s <code>CLOCK_FREQUENCY</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfffe0004</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MEM[4]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">internal memory configuration (see <a href="#_sysinfo_memory_configuration">SYSINFO - Memory Configuration</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfffe0008</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SOC</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">specific SoC configuration (see <a href="#_sysinfo_soc_configuration">SYSINFO - SoC Configuration</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfffe000c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CACHE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">cache configuration information (see <a href="#_sysinfo_cache_configuration">SYSINFO - Cache Configuration</a>)</p></td> +</tr> +</tbody> +</table> +<div class="sect4"> +<h5 id="_sysinfo_memory_configuration">SYSINFO - Memory Configuration</h5> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +Bit fields in this register are set to all-zero if the according memory system is not implemented. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 41. SYSINFO <code>MEM</code> Bytes</caption> +<colgroup> +<col style="width: 10%;"> +<col style="width: 20%;"> +<col style="width: 70%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Byte</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_MEM_IMEM</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>log2</em>(internal IMEM size in bytes), via top&#8217;s <code>MEM_INT_IMEM_SIZE</code> generic</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>1</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_MEM_DMEM</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>log2</em>(internal DMEM size in bytes), via top&#8217;s <code>MEM_INT_DMEM_SIZE</code> generic</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>2</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>3</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_MEM_BOOT</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">boot mode configuration, via top&#8217;s <code>BOOT_MODE_SELECT</code> generic (see <a href="#_boot_configuration">Boot Configuration</a>))</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect4"> +<h5 id="_sysinfo_soc_configuration">SYSINFO - SoC Configuration</h5> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 42. SYSINFO <code>SOC</code> Bits</caption> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 33.3333%;"> +<col style="width: 55.5556%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_BOOTLOADER</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if processor-internal bootloader is implemented (via top&#8217;s <code>BOOT_MODE_SELECT</code> generic; see <a href="#_boot_configuration">Boot Configuration</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>1</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_XBUS</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if external Wishbone bus interface is implemented (via top&#8217;s <code>XBUS_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>2</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_MEM_INT_IMEM</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if processor-internal DMEM is implemented (via top&#8217;s <code>MEM_INT_IMEM_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>3</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_MEM_INT_DMEM</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if processor-internal IMEM is implemented (via top&#8217;s <code>MEM_INT_DMEM_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>4</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_OCD</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if on-chip debugger is implemented (via top&#8217;s <code>OCD_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>5</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_ICACHE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if processor-internal instruction cache is implemented (via top&#8217;s <code>ICACHE_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>6</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_DCACHE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if processor-internal data cache is implemented (via top&#8217;s <code>DCACHE_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>7</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, read as zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>8</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_XBUS_CACHE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if external bus interface cache is implemented (via top&#8217;s <code>XBUS_CACHE_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>9</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_XIP</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if XIP module is implemented (via top&#8217;s <code>XIP_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>10</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_XIP_CACHE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if XIP cache is implemented (via top&#8217;s <code>XIP_CACHE_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>11</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_OCD_AUTH</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if on-chip debugger authentication is implemented (via top&#8217;s <code>OCD_AUTHENTICATION</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>12</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IMEM_ROM</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if processor-internal IMEM is implemented as pre-initialized ROM (via top&#8217;s <code>BOOT_MODE_SELECT</code> generic; see <a href="#_boot_configuration">Boot Configuration</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>13</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_TWD</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if TWD is implemented (via top&#8217;s <code>IO_TWD_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>14</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_DMA</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if direct memory access controller is implemented (via top&#8217;s <code>IO_DMA_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>15</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_GPIO</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if GPIO is implemented (via top&#8217;s <code>IO_GPIO_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>16</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_CLINT</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if CLINT is implemented (via top&#8217;s <code>IO_CLINT_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>17</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_UART0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if primary UART0 is implemented (via top&#8217;s <code>IO_UART0_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>18</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_SPI</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if SPI is implemented (via top&#8217;s <code>IO_SPI_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>19</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_TWI</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if TWI is implemented (via top&#8217;s <code>IO_TWI_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>20</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_PWM</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if PWM is implemented (via top&#8217;s <code>IO_PWM_NUM_CH</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>21</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_WDT</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if WDT is implemented (via top&#8217;s <code>IO_WDT_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>22</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_CFS</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if custom functions subsystem is implemented (via top&#8217;s <code>IO_CFS_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>23</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_TRNG</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if TRNG is implemented (via top&#8217;s <code>IO_TRNG_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>24</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_SDI</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if SDI is implemented (via top&#8217;s <code>IO_SDI_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>25</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_UART1</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if secondary UART1 is implemented (via top&#8217;s <code>IO_UART1_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>26</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_NEOLED</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if NEOLED is implemented (via top&#8217;s <code>IO_NEOLED_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>27</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_XIRQ</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if XIRQ is implemented (via top&#8217;s <code>XIRQ_NUM_CH</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>28</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_GPTMR</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if GPTMR is implemented (via top&#8217;s <code>IO_GPTMR_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>29</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_SLINK</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if stream link interface is implemented (via top&#8217;s <code>IO_SLINK_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>30</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_ONEWIRE</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if ONEWIRE interface is implemented (via top&#8217;s <code>IO_ONEWIRE_EN</code> generic)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>31</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_SOC_IO_CRC</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if cyclic redundancy check unit is implemented (via top&#8217;s <code>IO_CRC_EN</code> generic)</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect4"> +<h5 id="_sysinfo_cache_configuration">SYSINFO - Cache Configuration</h5> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +Bit fields in this register are set to all-zero if the according cache is not implemented. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 43. SYSINFO <code>CACHE</code> Bits</caption> +<colgroup> +<col style="width: 4.7619%;"> +<col style="width: 47.619%;"> +<col style="width: 47.6191%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>3:0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_CACHE_INST_BLOCK_SIZE_3 : SYSINFO_CACHE_INST_BLOCK_SIZE_0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>log2</em>(i-cache block size in bytes), via top&#8217;s <code>ICACHE_BLOCK_SIZE</code> generic</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>7:4</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_CACHE_INST_NUM_BLOCKS_3 : SYSINFO_CACHE_INST_NUM_BLOCKS_0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>log2</em>(i-cache number of cache blocks), via top&#8217;s <code>ICACHE_NUM_BLOCKS</code> generic</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>11:8</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_CACHE_DATA_BLOCK_SIZE_3 : SYSINFO_CACHE_DATA_BLOCK_SIZE_0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>log2</em>(d-cache block size in bytes), via top&#8217;s <code>DCACHE_BLOCK_SIZE</code> generic</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>15:12</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_CACHE_DATA_NUM_BLOCKS_3 : SYSINFO_CACHE_DATA_NUM_BLOCKS_0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>log2</em>(d-cache number of cache blocks), via top&#8217;s <code>DCACHE_NUM_BLOCKS</code> generic</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>19:16</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_CACHE_XIP_BLOCK_SIZE_3 : SYSINFO_CACHE_XIP_BLOCK_SIZE_0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>log2</em>(xip-cache block size in bytes), via top&#8217;s <code>XIP_CACHE_BLOCK_SIZE</code> generic</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>23:20</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_CACHE_XIP_NUM_BLOCKS_3 : SYSINFO_CACHE_XIP_NUM_BLOCKS_0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>log2</em>(xip-cache number of cache blocks), via top&#8217;s <code>XIP_CACHE_NUM_BLOCKS</code> generic</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>27:24</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_CACHE_XBUS_BLOCK_SIZE_3 : SYSINFO_CACHE_XBUS_BLOCK_SIZE_0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>log2</em>(xbus-cache block size in bytes), via top&#8217;s <code>XBUS_CACHE_BLOCK_SIZE</code> generic</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>31:28</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SYSINFO_CACHE_XBUS_NUM_BLOCKS_3 : SYSINFO_CACHE_XBUS_NUM_BLOCKS_0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>log2</em>(xbus-cache number of cache blocks), via top&#8217;s <code>XBUS_CACHE_NUM_BLOCKS</code> generic</p></td> +</tr> +</tbody> +</table> +</div> +</div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_neorv32_central_processing_unit_cpu">3. NEORV32 Central Processing Unit (CPU)</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The NEORV32 CPU is an area-optimized RISC-V core implementing the <code>rv32i_zicsr_zifencei</code> base (privileged) ISA and +supporting several additional/optional ISA extensions. The CPU&#8217;s micro architecture is based on a von-Neumann +machine build upon a mixture of multi-cycle and pipelined execution schemes.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +This chapter assumes that the reader is familiar with the official +RISC-V <em>User</em> and <em>Privileged Architecture</em> specifications. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Section Structure</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p><a href="#_risc_v_compatibility">RISC-V Compatibility</a></p> +</li> +<li> +<p><a href="#_cpu_top_entity_signals">CPU Top Entity - Signals</a> and <a href="#_cpu_top_entity_generics">CPU Top Entity - Generics</a></p> +</li> +<li> +<p><a href="#_architecture">Architecture</a> and <a href="#_full_virtualization">Full Virtualization</a></p> +</li> +<li> +<p><a href="#_instruction_sets_and_extensions">Instruction Sets and Extensions</a> and <a href="#_custom_functions_unit_cfu">Custom Functions Unit (CFU)</a></p> +</li> +<li> +<p><a href="#_control_and_status_registers_csrs">Control and Status Registers (CSRs)</a></p> +</li> +<li> +<p><a href="#_traps_exceptions_and_interrupts">Traps, Exceptions and Interrupts</a></p> +</li> +<li> +<p><a href="#_bus_interface">Bus Interface</a></p> +</li> +</ul> +</div> +<div class="sect2"> +<h3 id="_risc_v_compatibility">3.1. RISC-V Compatibility</h3> +<div class="paragraph"> +<p>The NEORV32 CPU passes the tests of the <strong>official RISCOF RISC-V Architecture Test Framework</strong>. This framework is used to check +RISC-V implementations for compatibility to the official RISC-V user/privileged ISA specifications. The NEORV32 port of this +test framework is available in a separate repository at GitHub: <a href="https://github.com/stnolting/neorv32-riscof" class="bare">https://github.com/stnolting/neorv32-riscof</a></p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Unsupported ISA Extensions</div> +Executing instructions or accessing CSRs from yet unsupported ISA extensions will raise an illegal +instruction exception (see section <a href="#_full_virtualization">Full Virtualization</a>). +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Incompatibility Issues and Limitations</strong></p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title"><code>time[h]</code> CSRs (Wall Clock Time)</div> +The NEORV32 does not implement the <code>time[h]</code> registers. Any access to these registers will trap. It is +recommended that the trap handler software provides a means of accessing the the machine timer of the +<a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">No Hardware Support of Misaligned Memory Accesses</div> +The CPU does not support resolving unaligned memory access by the hardware (this is not a +RISC-V-incompatibility issue but an important thing to know!). Any kind of unaligned memory access +will raise an exception to allow a <em>software-based</em> emulation provided by the application. However, unaligned memory +access can be <strong>emulated</strong> using the NEORV32 runtime environment. See section <a href="#_application_context_handling">Application Context Handling</a> +for more information. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_cpu_top_entity_signals">3.2. CPU Top Entity - Signals</h3> +<div class="paragraph"> +<p>The following table shows all interface signals of the CPU top entity <code>rtl/core/neorv32_cpu.vhd</code>. The +type of all signals is <em>std_ulogic</em> or <em>std_ulogic_vector</em>, respectively. The "Dir." column shows the signal +direction as seen from the CPU.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 44. NEORV32 CPU Signal List</caption> +<colgroup> +<col style="width: 25%;"> +<col style="width: 25%;"> +<col style="width: 8.3333%;"> +<col style="width: 41.6667%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Signal</th> +<th class="tableblock halign-center valign-top">Width/Type</th> +<th class="tableblock halign-center valign-top">Dir</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>Global Signals</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>clk_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Global clock line, all registers triggering on rising edge.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rstn_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Global reset, low-active.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sleep_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU is in <a href="#_sleep_mode">Sleep Mode</a> when set.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>debug_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU is in <a href="#_cpu_debug_mode">debug mode</a> when set.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>Interrupts (<a href="#_traps_exceptions_and_interrupts">Traps, Exceptions and Interrupts</a>)</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>msi_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RISC-V machine software interrupt.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>mei_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RISC-V machine external interrupt.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>mti_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RISC-V machine timer interrupt.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>firq_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Custom fast interrupt request signals.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>dbi_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Request CPU to halt and enter debug mode (RISC-V <a href="#_on_chip_debugger_ocd">On-Chip Debugger (OCD)</a>).</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>Instruction <a href="#_bus_interface">Bus Interface</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ibus_req_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>bus_req_t</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Instruction fetch bus request.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ibus_rsp_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>bus_rsp_t</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Instruction fetch bus response.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>Data <a href="#_bus_interface">Bus Interface</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>dbus_req_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>bus_req_t</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Data access (load/store) bus request.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>dbus_rsp_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>bus_rsp_t</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Data access (load/store) bus response.</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Bus Interface Protocol</div> +See section <a href="#_bus_interface">Bus Interface</a> for the instruction fetch and data access interface protocol and the +according interface types (<code>bus_req_t</code> and <code>bus_rsp_t</code>). +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_cpu_top_entity_generics">3.3. CPU Top Entity - Generics</h3> +<div class="paragraph"> +<p>Most of the CPU configuration generics are a subset of the actual Processor configuration generics +(see section <a href="#_processor_top_entity_generics">Processor Top Entity - Generics</a>). and are not listed here. However, the CPU provides +some <em>specific</em> generics that are used to configure the CPU for the NEORV32 processor setup. These generics +are assigned by the processor setup only and are not available for user defined configuration. +The specific generics are listed below.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Table Abbreviations</div> +The generic type "suv(x:y)" represents a <code>std_ulogic_vector(x downto y)</code>. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 45. NEORV32 CPU-Exclusive Generic List</caption> +<colgroup> +<col style="width: 28.5714%;"> +<col style="width: 14.2857%;"> +<col style="width: 57.1429%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Name</th> +<th class="tableblock halign-center valign-top">Type</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>HART_ID</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">natural</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Value for the <a href="#_mhartid"><strong><code>mhartid</code></strong></a> CSR.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>VENDOR_ID</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">suv(31:0)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Value for the <a href="#_mvendorid"><strong><code>mvendorid</code></strong></a> CSR.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOT_ADDR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">suv(31:0)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU reset address. See section <a href="#_address_space">Address Space</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DEBUG_PARK_ADDR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">suv(31:0)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Park loop" entry address for the <a href="#_on_chip_debugger_ocd">On-Chip Debugger (OCD)</a>, has to be 4-byte aligned.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DEBUG_EXC_ADDR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">suv(31:0)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Exception" entry address for the <a href="#_on_chip_debugger_ocd">On-Chip Debugger (OCD)</a>, has to be 4-byte aligned.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Sdext</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement RISC-V-compatible "debug" CPU operation mode required for the <a href="#_on_chip_debugger_ocd">On-Chip Debugger (OCD)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Sdtrig</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement RISC-V-compatible trigger module. See section <a href="#_on_chip_debugger_ocd">On-Chip Debugger (OCD)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RISCV_ISA_Smpmp</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">boolean</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Implement RISC-V-compatible physical memory protection (PMP). See section <a href="#_smpmp_isa_extension"><code>Smpmp</code> ISA Extension</a>.</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Tuning Option Generics</div> +Additional generics that are related to certain <em>tuning options</em> are listed in section <a href="#_cpu_tuning_options">CPU Tuning Options</a>. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_architecture">3.4. Architecture</h3> +<div class="imageblock text-center"> +<div class="content"> +<img src="img/neorv32_cpu.png" alt="neorv32 cpu"> +</div> +</div> +<div class="paragraph"> +<p>The CPU implements a pipelined multi-cycle architecture: each instruction is executed as a series of consecutive +micro-operations. In order to increase performance, the CPU&#8217;s front-end (instruction fetch) and back-end +(instruction execution) are de-couples via a FIFO (the instruction prefetch buffer. Thus, the front-end can already +fetch new instructions while the back-end is still processing the previously-fetched instructions.</p> +</div> +<div class="paragraph"> +<p>Basically, the CPU&#8217;s micro architecture is somewhere between a classical pipelined architecture, where each stage +requires exactly one processing cycle (if not stalled) and a classical multi-cycle architecture, which executes +every single instruction (<em>including</em> fetch) in a series of consecutive micro-operations. The combination of these +two design paradigms allows an increased instruction execution in contrast to a pure multi-cycle approach (due to +overlapping operation of fetch and execute) at a reduced hardware footprint (due to the multi-cycle concept).</p> +</div> +<div class="paragraph"> +<p>As a Von-Neumann machine, the CPU provides independent interfaces for instruction fetch and data access. However, +these two bus interfaces are merged into a single processor-internal bus via a prioritizing bus switch (data accesses +have higher priority). Hence, <em>all</em> memory addresses including peripheral devices are mapped to a single unified 32-bit +<a href="#_address_space">Address Space</a>.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Linear/In-Order Execution Only</div> +The CPU does not perform any speculative/out-of-order operations at all. Hence, it is not vulnerable to security issues +caused by speculative execution (like Spectre or Meltdown). +</td> +</tr> +</table> +</div> +<div class="sect3"> +<h4 id="_cpu_register_file">3.4.1. CPU Register File</h4> +<div class="paragraph"> +<p>The data register file contains the general purpose architecture registers <code>x0</code> to <code>x31</code>. For the <code>rv32e</code> ISA only the lower +16 registers are implemented. Register zero (<code>x0</code>/<code>zero</code>) always read as zero and any write access to it has no effect. +Up to four individual synchronous read ports allow to fetch up to 4 register operands at once. The write and read accesses +are mutually exclusive as they happen in separate cycles. Hence, there is no need to consider things like "read-during-write" +behavior.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Memory Tuning Options</div> +The physical implementation of the register file&#8217;s memory core can be tuned for certain design goals like area or throughput. +See section <a href="#_cpu_tuning_options">CPU Tuning Options</a> for more information. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Implementation of the <code>zero</code> Register within FPGA Block RAM</div> +Register <code>zero</code> is also mapped to a <em>physical memory location</em> within the register file&#8217;s block RAM. By this, there is no need +to add a further multiplexer to "insert" zero if reading from register <code>zero</code> reducing logic requirements and shortening the +critical path. However, this also requires that the physical storage bits of register <code>zero</code> are explicitly initialized (set +to zero) by the hardware. This is done transparently by the CPU control requiring no additional processing overhead. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Block RAM Ports</div> +The default register file configuration uses two access ports: a read-only port for reading register <code>rs2</code> (second source operand) +and a read/write port for reading register <code>rs1</code> (first source operand) and for writing processing results to register <code>rd</code> +(destination register). Hence, a simple dual-port RAM can be used to implement the entire register file. From a functional point +of view, read and write accesses to the register file do never occur in the same clock cycle, so no bypass logic is required at all. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_cpu_arithmetic_logic_unit">3.4.2. CPU Arithmetic Logic Unit</h4> +<div class="paragraph"> +<p>The arithmetic/logic unit (ALU) is used for actual data processing as well as generating memory and branch addresses. +All "simple" <a href="#_i_isa_extension"><code>I</code> ISA Extension</a> computational instructions (like <code>add</code> and <code>or</code>) are implemented as plain combinatorial logic +requiring only a single cycle to complete. More sophisticated instructions like shift operations or multiplications are processed +by so-called "ALU co-processors".</p> +</div> +<div class="paragraph"> +<p>The co-processors are implemented as iterative units that require several cycles to complete processing. Besides the base ISA&#8217;s +shift instructions, the co-processors are used to implement all further processing-based ISA extensions (e.g. <a href="#_m_isa_extension"><code>M</code> ISA Extension</a> +and <a href="#_b_isa_extension"><code>B</code> ISA Extension</a>).</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Multi-Cycle Execution Monitor</div> +The CPU control will raise an illegal instruction exception if a multi-cycle functional unit (like the <a href="#_custom_functions_unit_cfu">Custom Functions Unit (CFU)</a>) +does not complete processing in a bound amount of time (configured via the package&#8217;s <code>monitor_mc_tmo_c</code> constant; default = 512 clock cycles). +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_cpu_bus_unit">3.4.3. CPU Bus Unit</h4> +<div class="paragraph"> +<p>The bus unit takes care of handling data memory accesses via load and store instructions. It handles data adjustment when accessing +sub-word data quantities (16-bit or 8-bit) and performs sign-extension for singed load operations. The bus unit also includes the optional +<a href="#_smpmp_isa_extension"><code>Smpmp</code> ISA Extension</a> that performs permission checks for all data and instruction accesses.</p> +</div> +<div class="paragraph"> +<p>A list of the bus interface signals and a detailed description of the protocol can be found in section <a href="#_bus_interface">Bus Interface</a>. +All bus interface signals are driven/buffered by registers; so even a complex SoC interconnection bus network will not +effect maximal operation frequency.</p> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +<div class="title">Unaligned Accesses</div> +The CPU does not support a hardware-based handling of unaligned memory accesses! Any unaligned access will raise a bus load/store unaligned +address exception. The exception handler can be used to <em>emulate</em> unaligned memory accesses in software. +See the NEORV32 Runtime Environment&#8217;s <a href="#_application_context_handling">Application Context Handling</a> section for more information. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_cpu_control_unit">3.4.4. CPU Control Unit</h4> +<div class="paragraph"> +<p>The CPU control unit is responsible for generating all the control signals for the different CPU modules. +The control unit is split into a "front-end" and a "back-end".</p> +</div> +<div class="paragraph"> +<p><strong>Front-End</strong></p> +</div> +<div class="paragraph"> +<p>The front-end is responsible for fetching instructions in chunks of 32-bits. This can be a single aligned 32-bit instruction, +two aligned 16-bit instructions or a mixture of those. The instructions including control and exception information are stored +to a FIFO queue - the instruction prefetch buffer (IPB). This FIFO has a depth of two entries by default but can be customized +via the <code>ipb_depth_c</code> VHDL package constant.</p> +</div> +<div class="paragraph"> +<p>The FIFO allows the front-end to do "speculative" instruction fetches, as it keeps fetching the next consecutive instruction +all the time. This also allows to decouple front-end (instruction fetch) and back-end (instruction execution) so both modules +can operate in parallel to increase performance. However, all potential side effects that are caused by this "speculative" +instruction fetch are already handled by the CPU front-end ensuring a defined execution stage while preventing security +side attacks.</p> +</div> +<div class="paragraph"> +<p><strong>Back-End</strong></p> +</div> +<div class="paragraph"> +<p>Instruction data from the instruction prefetch buffer is decompressed (if the <code>C</code> ISA extension is enabled) and sent to the +CPU back-end for actual execution. Execution is conducted by a state-machine that controls all of the CPU modules. The back-end also +includes the <a href="#_control_and_status_registers_csrs">Control and Status Registers (CSRs)</a> as well as the trap controller.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_cpu_tuning_options">3.4.5. CPU Tuning Options</h4> +<div class="paragraph"> +<p>The top module provides several tuning options to optimize the CPU for a specific goal. +Note that these configuration options have no impact on the actual functionality (e.g. ISA compatibility).</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Software Tuning Options Discovery</div> +Software can check for configured tuning options via specific flags in the <a href="#_mxisa"><strong><code>mxisa</code></strong></a> CSR. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_cpu_clock_gating_en" class="discrete"><strong><code>CPU_CLOCK_GATING_EN</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Clock gating</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Default</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code>, disabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">When <strong>enabled</strong> the CPU&#8217;s primary clock is switched off when the CPU enters <a href="#_sleep_mode">Sleep Mode</a>. See <a href="#_cpu_clock_gating">CPU Clock Gating</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">When <strong>disabled</strong> the CPU clock system is implemented as single always-on clock domain.</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_cpu_fast_mul_en" class="discrete"><strong><code>CPU_FAST_MUL_EN</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Fast multiplication</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Default</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code>, disabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">When <strong>enabled</strong> the <code>M</code>/<code>Zmmul</code> extension&#8217;s multiplier is implemented as "plain multiplication" allowing the +synthesis tool to infer DSP blocks / multiplication primitives. Multiplication operations only require a few cycles due to the +DSP-internal register stages. The execution time is time-independent of the provided operands.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">When <strong>disabled</strong> the <code>M</code>/<code>Zmmul</code> extension&#8217;s multiplier is implemented as bit-serial multiplier that computes one +result bit in every cycle. Multiplication operations only requires at least 32 cycles but the entire execution time is still +time-independent of the provided operands.</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_cpu_fast_shift_en" class="discrete"><strong><code>CPU_FAST_SHIFT_EN</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Fast bit shifting</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Default</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code>, disabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">When <strong>enabled</strong> the ALU&#8217;s shifter unit is implemented as full-parallel barrel shifter that is capable +of shifting a data word by an arbitrary number of positions within a single cycle. Hence, the execution time of any base-ISA +shift operation is independent of the provided operands. Note that the barrel shifter requires a lot of hardware resources and +might also increase the core&#8217;s critical path.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">When <strong>disabled</strong> the ALU&#8217;s shifter unit is implemented as bit-serial shifter that can shift the input data +only by one position per cycle. Hence, several cycles might be required to complete any base-ISA shift-related operations. +Therefore, the execution time of the serial approach is <strong>not</strong> time-independent of the provided operands. However, the serial +approach requires only a few hardware resources and does not impact the critical path.</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_cpu_rf_hw_rst_en" class="discrete"><strong><code>CPU_RF_HW_RST_EN</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Register file hardware reset</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Default</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code>, disabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">When <strong>enabled</strong> the CPU register file is implemented using single flip flops that provide a full hardware reset. +The register file is reset to all-zero after each hardware reset. Note that this options requires a lot of flip flops and LUTs to +build the register file. However, timing might be optimized as there is no need to route to far blockRAM resources.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">When <strong>disabled</strong> the CPU register file is implemented in a way to allow synthesis to infer memory primitives +like blockRAM. Note that these primitives do not provide any kind of hardware reset. Hence, the data content is undefined after reset.</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_sleep_mode">3.4.6. Sleep Mode</h4> +<div class="paragraph"> +<p>The NEORV32 CPU provides a single sleep mode that can be entered to power-down the core reducing +dynamic power consumption. Sleep mode is entered by executing the RISC-V <code>wfi</code> ("wait for interrupt") instruction.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Execution Details</div> +The <code>wfi</code> instruction will raise an illegal instruction exception when executed in user-mode +if <code>TW</code> in <a href="#_mstatus"><strong><code>mstatus</code></strong></a> is set. When executed in debug-mode or during single-stepping <code>wfi</code> will behave as +simple <code>nop</code> without entering sleep mode. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>After executing the <code>wfi</code> instruction the CPU&#8217;s <code>sleep_o</code> signal (<a href="#_cpu_top_entity_signals">CPU Top Entity - Signals</a>) will become set +as soon as the CPU has fully halted:</p> +</div> +<div class="paragraph"> +<div class="title">There is no enabled interrupt being pending.</div> +<p>CPU-external modules like memories, timers and peripheral interfaces are not affected by this. Furthermore, the CPU will +continue to buffer/enqueue incoming interrupts. The CPU will leave sleep mode as soon as any <em>enabled</em> interrupt (via <a href="#_mie"><strong><code>mie</code></strong></a>) +source becomes <em>pending</em> or if a debug session is started.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_cpu_clock_gating">3.4.7. CPU Clock Gating</h4> +<div class="paragraph"> +<p>The single clock domain of the CPU core can be split into an always-on clock domain and a switchable clock domain. +The switchable clock domain can be deactivated to further reduce reduce dynamic power consumption. CPU-external modules +like timers, interfaces and memories are not affected by the clock gating.</p> +</div> +<div class="paragraph"> +<p>The splitting into two clock domain is enabled by the <code>CPU_CLOCK_GATING_EN</code> generic (<a href="#_processor_top_entity_generics">Processor Top Entity - Generics</a> / +<a href="#_cpu_tuning_options">CPU Tuning Options</a>). When enabled, a generic clock switching gate is added to decouple the switchable clock from +the always-on clock domain. Whenever the CPU enters <a href="#_sleep_mode">Sleep Mode</a> the switchable clock domain is shut down.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Clock Switch Hardware</div> +By default, a generic clock switch is used (<code>rtl/core/neorv32_clockgate.vhd</code>). Especially for FPGA setups it is highly +recommended to replace this default module by a technology-specific primitive or macro wrapper to improve synthesis results +(clock skew, global clock tree usage, etc.). +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_full_virtualization">3.4.8. Full Virtualization</h4> +<div class="paragraph"> +<p>Just like the RISC-V ISA, the NEORV32 aims to provide <em>maximum virtualization</em> capabilities on CPU and SoC level to +allow a high standard of <strong>execution safety</strong>. The CPU supports <strong>all</strong> traps specified by the official RISC-V +specifications. Thus, the CPU provides defined hardware fall-backs via traps for any expected and unexpected situations +(e.g. executing a malformed or not supported instruction or accessing a non-allocated memory address). For any kind +of trap the core is always in a defined and fully synchronized state throughout the whole system (i.e. there are no +out-of-order operations that might have to be reverted). This allows a defined and predictable execution behavior +at any time improving overall execution safety.</p> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_bus_interface">3.5. Bus Interface</h3> +<div class="paragraph"> +<p>The NEORV32 CPU provides separated instruction fetch and data access interfaces making it a <strong>Harvard Architecture</strong>: +the instruction fetch interface (<code>i_bus_*</code> signals) is used for fetching instructions and the data access interface +(<code>d_bus_*</code> signals) is used to access data via load and store operations. Each of these interfaces can access an address +space of up to 2<sup>32</sup> bytes (4GB).</p> +</div> +<div class="paragraph"> +<p>The bus interface uses two custom interface types: <code>bus_req_t</code> is used to propagate the bus access <strong>requests</strong>. These +signals are driven by the <em>accessing</em> device (i.e. the CPU core). <code>bus_rsp_t</code> is used to return the bus <strong>response</strong> and +is driven by the <em>accessed</em> device or bus system (i.e. a processor-internal memory or IO device).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 46. Bus Interface - Request Bus (<code>bus_req_t</code>)</caption> +<colgroup> +<col style="width: 12.5%;"> +<col style="width: 12.5%;"> +<col style="width: 75%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Signal</th> +<th class="tableblock halign-center valign-top">Width</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>addr</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access address (byte addressing)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>data</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Write data</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>ben</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Byte-enable for each byte in <code>data</code></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>stb</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Request trigger ("strobe", single-shot)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>rw</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access direction (<code>0</code> = read, <code>1</code> = write)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>src</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Access source (<code>0</code> = instruction fetch, <code>1</code> = load/store)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>priv</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set if privileged (M-mode) access</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>rvso</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set if current access is a reservation-set operation (<code>lr</code> or <code>sc</code> instruction, <a href="#_zalrsc_isa_extension"><code>Zalrsc</code> ISA Extension</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>fence</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Data/instruction fence operation; valid without <code>stb</code> being set</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 47. Bus Interface - Response Bus (<code>bus_rsp_t</code>)</caption> +<colgroup> +<col style="width: 12.5%;"> +<col style="width: 12.5%;"> +<col style="width: 75%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Signal</th> +<th class="tableblock halign-center valign-top">Width</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>data</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Read data (single-shot)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>ack</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Transfer acknowledge / success (single-shot)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>err</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Transfer error / fail (single-shot)</p></td> +</tr> +</tbody> +</table> +<div class="sect3"> +<h4 id="_bus_interface_protocol">3.5.1. Bus Interface Protocol</h4> +<div class="paragraph"> +<p>Transactions are triggered entirely by the request bus. A new bus request is initiated by setting the <em>strobe</em> +signal <code>stb</code> high for exactly one cycle. All remaining signals of the bus are set together with <code>stb</code> and will +remain unchanged until the transaction is completed.</p> +</div> +<div class="paragraph"> +<p>The transaction is completed when the accessed device returns a response via the response interface: +<code>ack</code> is high for exactly one cycle if the transaction was completed successfully. <code>err</code> is high for exactly +one cycle if the transaction failed to complete. These two signals are mutually exclusive. In case of a read +access the read data is returned together with the <code>ack</code> signal. Otherwise, the return data signal is +kept at all-zero allowing wired-or interconnection of all response buses.</p> +</div> +<div class="paragraph"> +<p>The figure below shows three exemplary bus accesses:</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>A read access to address <code>A_addr</code> returning <code>rdata</code> after several cycles (slow response; <code>ACK</code> arrives after several cycles).</p> +</li> +<li> +<p>A write access to address <code>B_addr</code> writing <code>wdata</code> (fastest response; <code>ACK</code> arrives right in the next cycle).</p> +</li> +<li> +<p>A failing read access to address <code>C_addr</code> (slow response; <code>ERR</code> arrives after several cycles).</p> +</li> +</ol> +</div> +<div class="imageblock"> +<div class="content"> +<img src="img/bus_interface.png" alt="700"> +</div> +<div class="title">Figure 9. Three Exemplary Bus Transactions</div> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Adding Register Stages</div> +Arbitrary pipeline stages can be added to the request and response buses at any point to relax timing (at the cost of +additional latency). However, <em>all</em> bus signals (request and response) need to be registered. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_atomic_accesses">3.5.2. Atomic Accesses</h4> +<div class="paragraph"> +<p>The load-reservate (<code>lr.w</code>) and store-conditional (<code>sc.w</code>) instructions from the <a href="#_zalrsc_isa_extension"><code>Zalrsc</code> ISA Extension</a> execute as standard +load/store bus transactions but with the <code>rvso</code> ("reservation set operation") signal being set. It is the task of the +<a href="#_reservation_set_controller">Reservation Set Controller</a> to handle these LR/SC bus transactions accordingly. Note that these reservation set operations +are intended for processor-internal usage only (i.e. the reservation state is not available for processor-external modules yet).</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Reservation Set Controller</div> +See section <a href="#_address_space">Address Space</a> / <a href="#_reservation_set_controller">Reservation Set Controller</a> for more information. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The figure below shows three exemplary bus accesses (1 to 3 from left to right). The <code>req</code> signal record represents +the CPU-side of the bus interface. For easier understanding the current state of the reservation set is added as <code>rvs_valid</code> signal.</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>A load-reservate (LR) instruction using <code>addr</code> as address. This instruction returns the loaded data <code>rdata</code> via <code>rsp.data</code> +and also registers a reservation for the address <code>addr</code> (<code>rvs_valid</code> becomes set).</p> +</li> +<li> +<p>A store-conditional (SC) instruction attempts to write <code>wdata1</code> to address <code>addr</code>. This SC operation <strong>succeeds</strong>, so +<code>wdata1</code> is actually written to address <code>addr</code>. The successful operation is indicated by a <strong>0</strong> being returned via +<code>rsp.data</code> together with <code>ack</code>. As the LR/SC is completed the registered reservation is invalidated (<code>rvs_valid</code> becomes cleared).</p> +</li> +<li> +<p>Another store-conditional (SC) instruction attempts to write <code>wdata2</code> to address <code>addr</code>. As the reservation set is already +invalidated (<code>rvs_valid</code> is <code>0</code>) the store access fails, so <code>wdata2</code> is <strong>not</strong> written to address <code>addr</code> at all. The failed +operation is indicated by a <strong>1</strong> being returned via <code>rsp.data</code> together with <code>ack</code>.</p> +</li> +</ol> +</div> +<div class="imageblock"> +<div class="content"> +<img src="img/bus_interface_atomic.png" alt="700"> +</div> +<div class="title">Figure 10. Three Exemplary LR/SC Bus Transactions</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Store-Conditional Status</div> +The "normal" load data mechanism is used to return success/failure of the <code>sc.w</code> instruction to the CPU (via the LSB of <code>rsp.data</code>). +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Cache Coherency</div> +Atomic operations <strong>always bypass</strong> the CPU caches using direct/uncached accesses. Care must be taken +to maintain data cache coherency (e.g. by using the <code>fence</code> instruction). +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_instruction_sets_and_extensions">3.6. Instruction Sets and Extensions</h3> +<div class="paragraph"> +<p>The NEORV32 CPU provides several optional RISC-V-compliant and custom/user-defined ISA extensions. +The extensions can be enabled/configured via the according <a href="#_processor_top_entity_generics">Processor Top Entity - Generics</a>. +This chapter gives a brief overview of all available ISA extensions.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 48. NEORV32 Instruction Set Extensions</caption> +<colgroup> +<col style="width: 20%;"> +<col style="width: 50%;"> +<col style="width: 30%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Name</th> +<th class="tableblock halign-left valign-top">Description</th> +<th class="tableblock halign-left valign-top"><a href="#_processor_top_entity_generics">Enabled by Generic</a></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_b_isa_extension"><code>B</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Bit manipulation instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>Implicitly</em> enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_c_isa_extension"><code>C</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Compressed (16-bit) instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_C</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_e_isa_extension"><code>E</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Embedded CPU extension (reduced register file size)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_E</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_i_isa_extension"><code>I</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Integer base ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enabled if <code>RISCV_ISA_E</code> is <strong>not</strong> enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_m_isa_extension"><code>M</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Integer multiplication and division instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_M</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_u_isa_extension"><code>U</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Less-privileged <em>user</em> mode extension</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_U</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_x_isa_extension"><code>X</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Platform-specific / NEORV32-specific extension</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Always enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zalrsc_isa_extension"><code>Zalrsc</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Atomic reservation-set instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zalrsc</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zba_isa_extension"><code>Zba</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Shifted-add bit manipulation instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zba</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zbb_isa_extension"><code>Zbb</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Basic bit manipulation instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zbb</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zbkb_isa_extension"><code>Zbkb</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Scalar cryptographic bit manipulation instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zbkb</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zbkc_isa_extension"><code>Zbkc</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Scalar cryptographic carry-less multiplication instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zbkc</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zbkx_isa_extension"><code>Zbkx</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Scalar cryptographic crossbar permutation instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zbkx</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zbs_isa_extension"><code>Zbs</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Single-bit bit manipulation instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zbs</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zfinx_isa_extension"><code>Zfinx</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Floating-point instructions using integer registers</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zfinx</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zifencei_isa_extension"><code>Zifencei</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Instruction stream synchronization instruction</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Always enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zicntr_isa_extension"><code>Zicntr</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Base counters extension</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zicntr</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zicond_isa_extension"><code>Zicond</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Integer conditional operations</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zicond</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zicsr_isa_extension"><code>Zicsr</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Control and status register access instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Always enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zihpm_isa_extension"><code>Zihpm</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hardware performance monitors extension</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zihpm</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zkn_isa_extension"><code>Zkn</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Scalar cryptographic NIST algorithm suite</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>Implicitly</em> enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zknd_isa_extension"><code>Zknd</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Scalar cryptographic NIST AES decryption instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zknd</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zkne_isa_extension"><code>Zkne</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Scalar cryptographic NIST AES encryption instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zkne</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zknh_isa_extension"><code>Zknh</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Scalar cryptographic NIST hash function instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zknh</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zkt_isa_extension"><code>Zkt</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Data independent execution time (of cryptographic operations)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>Implicitly</em> enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zks_isa_extension"><code>Zks</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Scalar cryptographic ShangMi algorithm suite</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>Implicitly</em> enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zksed_isa_extension"><code>Zksed</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Scalar cryptographic ShangMi block cypher instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zksed</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zksh_isa_extension"><code>Zksh</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Scalar cryptographic ShangMi hash instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zksh</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zmmul_isa_extension"><code>Zmmul</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Integer multiplication-only instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zmmul</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zxcfu_isa_extension"><code>Zcfu</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Custom / user-defined instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zxcfu</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_smpmp_isa_extension"><code>Smpmp</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Physical memory protection (PMP) extension</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>RISCV_ISA_Smpmp</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_sdext_isa_extension"><code>Sdext</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">External debug support extension</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>OCD_EN</code></a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_sdtrig_isa_extension"><code>Sdtrig</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger module extension</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_processor_top_entity_generics"><code>OCD_EN</code></a></p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">RISC-V ISA Specification</div> +For more information regarding the RISC-V ISA extensions please refer to the "RISC-V Instruction Set Manual - Volume +I: Unprivileged ISA" and "The RISC-V Instruction Set Manual Volume II: Privileged Architecture". A copy of these +documents can be found in the projects <code>docs/references</code> folder. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Discovering ISA Extensions</div> +Software can discover available ISA extensions via the <a href="#_misa"><strong><code>misa</code></strong></a> and <a href="#_mxisa"><strong><code>mxisa</code></strong></a> CSRs or by executing an instruction +and checking for an illegal instruction exception (i.e. <a href="#_full_virtualization">Full Virtualization</a>). +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Instruction Cycles</div> +This chapter shows the CPI values (cycles per instruction) for each individual instruction/type. Note that +values reflect <em>optimal conditions</em> (i.e. no additional memory delay, no cache misses, no pipeline waits, etc.). +To benchmark a certain processor configuration for its setup-specific CPI value please refer to the +<code>sw/example/performance_tests</code> test programs. +</td> +</tr> +</table> +</div> +<div class="sect3"> +<h4 id="_b_isa_extension">3.6.1. <code>B</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>B</code> ISA extension adds instructions for bit-manipulation operations. +This ISA extension cannot be enabled by a specific generic. Instead, it is enabled if a specific set of +bit-manipulation sub-extensions are enabled.</p> +</div> +<div class="paragraph"> +<p>The <code>B</code> extension is shorthand for the following set of other extensions:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><a href="#_zba_isa_extension"><code>Zba</code> ISA Extension</a> - Address-generation / shifted-add instructions.</p> +</li> +<li> +<p><a href="#_zbb_isa_extension"><code>Zbb</code> ISA Extension</a> - Basic bit manipulation instructions.</p> +</li> +<li> +<p><a href="#_zbs_isa_extension"><code>Zbs</code> ISA Extension</a> - Single-bit operations.</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>A processor configuration which implements <code>B</code> must implement all of the above extensions.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_c_isa_extension">3.6.2. <code>C</code> ISA Extension</h4> +<div class="paragraph"> +<p>The "compressed" ISA extension provides 16-bit encodings of commonly used instructions to reduce code space size.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 49. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ALU</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>c.addi4spn</code> <code>c.nop</code> <code>c.add[i]</code> <code>c.li</code> <code>c.addi16sp</code> <code>c.lui</code> <code>c.and[i]</code> <code>c.sub</code> <code>c.xor</code> <code>c.or</code> <code>c.mv</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ALU</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>c.srli</code> <code>c.srai</code> <code>c.slli</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3 + 1..32; <code>CPU_FAST_SHIFT_EN</code>: 4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Branches</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>c.beqz</code> <code>c.bnez</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">taken: 6; not taken: 3</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Jumps / calls</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>c.jal[r]</code> <code>c.j</code> <code>c.jr</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Memory access</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>c.lw</code> <code>c.sw</code> <code>c.lwsp</code> <code>c.swsp</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">System</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>c.break</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_e_isa_extension">3.6.3. <code>E</code> ISA Extension</h4> +<div class="paragraph"> +<p>The "embedded" ISA extensions reduces the size of the general purpose register file from 32 entries to 16 entries to +shrink hardware size. It provides the same instructions as the the base <code>I</code> ISA extensions.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Alternative MABI</div> +Due to the reduced register file size an alternate toolchain ABI (<code>ilp32e*</code>) is required. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_i_isa_extension">3.6.4. <code>I</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>I</code> ISA extensions is the base RISC-V integer ISA that is always enabled.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 50. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ALU</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>add[i]</code> <code>slt[i]</code> <code>slt[i]u</code> <code>xor[i]</code> <code>or[i]</code> <code>and[i]</code> <code>sub</code> <code>lui</code> <code>auipc</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">No-operation</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">&#8220;nop&#8221;</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ALU shifts</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sll[i]</code> <code>srl[i]</code> <code>sra[i]</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3 + 1..32; <code>CPU_FAST_SHIFT_EN</code>: 4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Branches</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>beq</code> <code>bne</code> <code>blt</code> <code>bge</code> <code>bltu</code> <code>bgeu</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">taken: 6; not taken: 3</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Jump/call</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>jal[r]</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Load/store</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>lb</code> <code>lh</code> <code>lw</code> <code>lbu</code> <code>lhu</code> <code>sb</code> <code>sh</code> <code>sw</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">System</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ecall</code> <code>ebreak</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Data fence</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>fence</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">System</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>wfi</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">System</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>mret</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Illegal inst.</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title"><code>fence</code> Instruction</div> +The <code>fence</code> instruction word&#8217;s <em>predecessor</em> and <em>successor</em> bits (used for memory ordering) are not evaluated +by the hardware at all. For the NEORV32 the <code>fence</code> instruction behaves exactly like the <code>fence.i</code> instruction +(see <a href="#_zifencei_isa_extension"><code>Zifencei</code> ISA Extension</a>). However, software should still use distinct <code>fence</code> and <code>fence.i</code> to provide +platform-compatibility and to indicate the actual intention of the according fence instruction(s). +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title"><code>wfi</code> Instruction</div> +The <code>wfi</code> instruction is used to enter <a href="#_sleep_mode">Sleep Mode</a>. Executing the <code>wfi</code> instruction in user-mode +will raise an illegal instruction exception if the <code>TW</code> bit of <a href="#_mstatus"><strong><code>mstatus</code></strong></a> is set. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Shifter Tuning Options</div> +The physical implementation of the bit-shifter can be tuned for certain design goals like area or throughput. +See section <a href="#_cpu_tuning_options">CPU Tuning Options</a> for more information. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_m_isa_extension">3.6.5. <code>M</code> ISA Extension</h4> +<div class="paragraph"> +<p>Hardware-accelerated integer multiplication and division operations are available via the RISC-V <code>M</code> ISA extension. +This ISA extension is implemented as multi-cycle ALU co-process (<code>rtl/core/neorv32_cpu_cp_muldiv.vhd</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 51. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Multiplication</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>mul</code> <code>mulh</code> <code>mulhsu</code> <code>mulhu</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">36; <code>CPU_FAST_MUL_EN</code>: 4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Division</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>div</code> <code>divu</code> <code>rem</code> <code>remu</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">36</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Multiplication Tuning Options</div> +The physical implementation of the multiplier can be tuned for certain design goals like area or throughput. +See section <a href="#_cpu_tuning_options">CPU Tuning Options</a> for more information. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_u_isa_extension">3.6.6. <code>U</code> ISA Extension</h4> +<div class="paragraph"> +<p>In addition to the highest-privileged machine-mode, the user-mode ISA extensions adds a second <strong>less-privileged</strong> +operation mode. Code executed in user-mode has reduced CSR access rights. Furthermore, user-mode accesses to the address space +(like peripheral/IO devices) can be constrained via the physical memory protection. +Any kind of privilege rights violation will raise an exception to allow <a href="#_full_virtualization">Full Virtualization</a>.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_x_isa_extension">3.6.7. <code>X</code> ISA Extension</h4> +<div class="paragraph"> +<p>The NEORV32-specific ISA extensions <code>X</code> is always enabled. The most important points of the NEORV32-specific extensions are: +* The CPU provides 16 <em>fast interrupt</em> interrupts (<code>FIRQ</code>), which are controlled via custom bits in the <a href="#_mie"><strong><code>mie</code></strong></a> +and <a href="#_mip"><strong><code>mip</code></strong></a> CSRs. These extensions are mapped to CSR bits, that are available for custom use according to the +RISC-V specs. Also, custom trap codes for <a href="#_mcause"><strong><code>mcause</code></strong></a> are implemented. +* All undefined/unimplemented/malformed/illegal instructions do raise an illegal instruction exception (see <a href="#_full_virtualization">Full Virtualization</a>). +* There are <a href="#_neorv32_specific_csrs">NEORV32-Specific CSRs</a>.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_zalrsc_isa_extension">3.6.8. <code>Zalrsc</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zalrsc</code> ISA extension is a sub-extension of the RISC-V <em>atomic memory access</em> (<code>A</code>) ISA extension and includes +instructions for reservation-set operations (load-reservate <code>lr</code> and store-conditional <code>sc</code>) only. +It is enabled by the top&#8217;s <a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zalrsc</code></a> generic.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">AMO / <code>A</code> Emulation</div> +The atomic memory access / read-modify-write operations of the <code>A</code> ISA extension can be emulated using the +LR and SC operations (quote from the RISC-V spec.: "<em>Any AMO can be emulated by an LR/SC pair.</em>"). +The NEORV32 <a href="#_core_libraries">Core Libraries</a> provide an emulation wrapper for emulating AMO/read-modify-write instructions that is +based on LR/SC pairs. A demo/program can be found in <code>sw/example/atomic_test</code>. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 52. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Load-reservate word</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>lr.w</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Store-conditional word</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sc.w</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title"><code>aq</code> and <code>rl</code> Bits</div> +The instruction word&#8217;s <code>aq</code> and <code>lr</code> memory ordering bits are not evaluated by the hardware at all. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Atomic Memory Access on Hardware Level</div> +More information regarding the atomic memory accesses and the according reservation +sets can be found in section <a href="#_reservation_set_controller">Reservation Set Controller</a>. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_zifencei_isa_extension">3.6.9. <code>Zifencei</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zifencei</code> CPU extension allows manual synchronization of the instruction stream. This extension is always enabled.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">NEORV32 Fence Instructions</div> +The NEORV32 treats both fence instructions (<code>fence</code> = data fence, <code>fence.i</code> = instruction fence) in exactly the same way. +Both instructions cause a flush of the CPU&#8217;s instruction prefetch buffer and also send a fence request via the system +bus (see <a href="#_bus_interface">Bus Interface</a>). This system bus fence operation will, for example, clear/flush all downstream caches. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 53. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Instruction fence</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>fence.i</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zfinx_isa_extension">3.6.10. <code>Zfinx</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zfinx</code> floating-point extension is an <em>alternative</em> of the standard <code>F</code> floating-point ISA extension. +It also uses the integer register file <code>x</code> to store and operate on floating-point data +instead of a dedicated floating-point register file. Thus, the <code>Zfinx</code> extension requires +less hardware resources and features faster context changes. This also implies that there are NO dedicated <code>f</code> +register file-related load/store or move instructions. The <code>Zfinx</code> extension&#8217;S floating-point unit is controlled +via dedicated <a href="#_floating_point_csrs">Floating-Point CSRs</a>. +This ISA extension is implemented as multi-cycle ALU co-process (<code>rtl/core/neorv32_cpu_cp_fpu.vhd</code>).</p> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +<div class="title">Fused / Multiply-Add Instructions</div> +Fused multiply-add instructions <code>f[n]m[add/sub].s</code> are not supported. A special GCC switch is used to prevent the +compiler from emitting contracted/fused floating-point operations (see <a href="#_default_compiler_flags">Default Compiler Flags</a>). +</td> +</tr> +</table> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +<div class="title">Division and Squarer Root Instructions</div> +Division <code>fdiv.s</code> and square root <code>fsqrt.s</code> instructions are not supported yet. +</td> +</tr> +</table> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +<div class="title">Subnormal Number</div> +Subnormal numbers ("de-normalized" numbers, i.e. exponent = 0) are not supported by the NEORV32 FPU. +Subnormal numbers are <em>flushed to zero</em> setting them to +/- 0 before being processed by <strong>any</strong> FPU operation. +If a computational instruction generates a subnormal result it is also flushed to zero during normalization. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 54. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Artihmetic</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>fadd.s</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">110</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Artihmetic</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>fsub.s</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">112</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Artihmetic</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>fmul.s</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">22</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Compare</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>fmin.s</code> <code>fmax.s</code> <code>feq.s</code> <code>flt.s</code> <code>fle.s</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">13</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Conversion</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>fcvt.w.s</code> <code>fcvt.wu.s</code> <code>fcvt.s.w</code> <code>fcvt.s.wu</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">48</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Misc</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>fsgnj.s</code> <code>fsgnjn.s</code> <code>fsgnjx.s</code> <code>fclass.s</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">12</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zicntr_isa_extension">3.6.11. <code>Zicntr</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zicntr</code> ISA extension adds the basic <a href="#_cycleh"><strong><code>cycle[h]</code></strong></a>, <a href="#_mcycleh"><strong><code>mcycle[h]</code></strong></a>, <a href="#_instreth"><strong><code>instret[h]</code></strong></a> and <a href="#_minstreth"><strong><code>minstret[h]</code></strong></a> +counter CSRs. Section <a href="#_machine_counter_and_timer_csrs">(Machine) Counter and Timer CSRs</a> shows a list of all <code>Zicntr</code>-related CSRs.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Time CSRs</div> +The user-mode <code>time[h]</code> CSRs are <strong>not implemented</strong>. Any access will trap allowing the trap handler to +retrieve system time from the <a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Mandatory Extension</div> +This extensions is stated as <em>mandatory</em> by the RISC-V spec. However, area-constrained setups may remove +support for these counters. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Constrained Access</div> +User-level access to the counter CSRs can be constrained by the <a href="#_mcounteren"><strong><code>mcounteren</code></strong></a> CSR. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_zicond_isa_extension">3.6.12. <code>Zicond</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zicond</code> ISA extension adds integer conditional move primitives that allow to implement branch-less +control flows. It is enabled by the top&#8217;s <a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zicond</code></a> generic. +This ISA extension is implemented as multi-cycle ALU co-processor (<code>rtl/core/neorv32_cpu_cp_cond.vhd</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 55. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Conditional</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>czero.eqz</code> <code>czero.nez</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zicsr_isa_extension">3.6.13. <code>Zicsr</code> ISA Extension</h4> +<div class="paragraph"> +<p>This ISA extensions provides instructions for accessing the <a href="#_control_and_status_registers_csrs">Control and Status Registers (CSRs)</a> as well as further +privileged-architecture extensions. This extension is mandatory and cannot be disabled. Hence, there is no generic +for enabling/disabling this ISA extension.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Side-Effects if Destination is Zero-Register</div> +If <code>rd=x0</code> for the <code>csrrw[i]</code> instructions there will be no actual read access to the according CSR. +However, access privileges are still enforced so these instruction variants <em>do</em> cause side-effects +(the RISC-V spec. state that these combinations "shall" not cause any side-effects). +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 56. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">System</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>csrrw[i]</code> <code>csrrs[i]</code> <code>csrrc[i]</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zihpm_isa_extension">3.6.14. <code>Zihpm</code> ISA Extension</h4> +<div class="paragraph"> +<p>In additions to the base counters the NEORV32 CPU provides up to 13 hardware performance monitors (HPM 3..15), +which can be used to benchmark applications. Each HPM consists of an N-bit wide counter (split in a high-word 32-bit +CSR and a low-word 32-bit CSR), where N is defined via the top&#8217;s <code>HPM_CNT_WIDTH</code> generic and a corresponding event +configuration CSR.</p> +</div> +<div class="paragraph"> +<p>The event configuration CSR defines the architectural events that lead to an increment of the associated HPM counter. +See section <a href="#_hardware_performance_monitors_hpm_csrs">Hardware Performance Monitors (HPM) CSRs</a> for a list of all HPM-related CSRs and event configurations.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Machine-Mode HPMs Only</div> +Note that only the machine-mode hardware performance counter CSR are available (<code>mhpmcounter*[h]</code>). +Accessing any user-mode HPM CSR (<code>hpmcounter*[h]</code>) will raise an illegal instruction exception. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Increment Inhibit</div> +The event-driven increment of the HPMs can be deactivated individually via the <a href="#_mcountinhibit"><strong><code>mcountinhibit</code></strong></a> CSR. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_zba_isa_extension">3.6.15. <code>Zba</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zba</code> sub-extension is part of the <em>RISC-V bit manipulation</em> ISA specification (<a href="#_b_isa_extension"><code>B</code> ISA Extension</a>) +and adds shifted-add / address-generation instructions. It is enabled by the top&#8217;s +<a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zba</code></a> generic. This ISA extension is implemented as multi-cycle +ALU co-processor (<code>rtl/core/neorv32_cpu_cp_bitmanip.vhd</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 57. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Shifted-add</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sh1add</code> <code>sh2add</code> <code>sh3add</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zbb_isa_extension">3.6.16. <code>Zbb</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zbb</code> sub-extension is part of the <em>RISC-V bit manipulation</em> ISA specification (<a href="#_b_isa_extension"><code>B</code> ISA Extension</a>) +and adds the basic bit manipulation instructions. It is enabled by the top&#8217;s <a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zbb</code></a> +generic. This ISA extension is implemented as multi-cycle ALU co-processor (<code>rtl/core/neorv32_cpu_cp_bitmanip.vhd</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 58. Instructions and Timing</caption> +<colgroup> +<col style="width: 35.7142%;"> +<col style="width: 28.5714%;"> +<col style="width: 35.7144%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Logic with negate</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>andn</code> <code>orn</code> <code>xnor</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Count leading/trailing zeros</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>clz</code> <code>ctz</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">6 + 1..32; <code>CPU_FAST_SHIFT_EN</code>: 4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Count population</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cpop</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">6 + 32; <code>CPU_FAST_SHIFT_EN</code>: 4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Integer maximum/minimum</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>min[u]</code> <code>max[u]</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Sign/zero extension</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sext.b</code> <code>sext.h</code> <code>zext</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Bitwise rotation</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rol</code> <code>ror[i]</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">6 + <em>shift_amount</em>; <code>CPU_FAST_SHIFT_EN</code>: 4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">OR-combine</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>orc.b</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Byte-reverse</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rev8</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">shifter Tuning Options</div> +The physical implementation of the bit-shifter can be tuned for certain design goals like area or throughput. +See section <a href="#_cpu_tuning_options">CPU Tuning Options</a> for more information. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_zbs_isa_extension">3.6.17. <code>Zbs</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zbs</code> sub-extension is part of the <em>RISC-V bit manipulation</em> ISA specification (<a href="#_b_isa_extension"><code>B</code> ISA Extension</a>) +and adds single-bit operations. It is enabled by the top&#8217;s <a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zbs</code></a> generic. +This ISA extension is implemented as multi-cycle ALU co-processor (<code>rtl/core/neorv32_cpu_cp_bitmanip.vhd</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 59. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Single-bit</th> +<th class="tableblock halign-left valign-top"><code>sbset[i]</code> <code>sbclr[i]</code> <code>sbinv[i]</code> <code>sbext[i]</code></th> +<th class="tableblock halign-left valign-top">4</th> +</tr> +</thead> +</table> +</div> +<div class="sect3"> +<h4 id="_zbkb_isa_extension">3.6.18. <code>Zbkb</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zbkb</code> sub-extension is part of the <em>RISC-V scalar cryptography</em> ISA specification and extends the <em>RISC-V bit manipulation</em> +ISA extension with additional instructions. It is enabled by the top&#8217;s <a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zbkb</code></a> generic. +Note that enabling this extension will also enable the <code>Zbb</code> basic bit-manipulation ISA extension (which is extended by <code>Zknb</code>). +This ISA extension is implemented as multi-cycle ALU co-processor (<code>rtl/core/neorv32_cpu_cp_bitmanip.vhd</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 60. Instructions and Timing (in addition to <code>Zbb</code>)</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Packing</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>pack</code> <code>packh</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Interleaving</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>zip</code> <code>unzip</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Byte-wise bit reversal</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>brev8</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zbkc_isa_extension">3.6.19. <code>Zbkc</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zbkc</code> sub-extension is part of the <em>RISC-V scalar cryptography</em> ISA extension and adds carry-less multiplication instruction. +ISA extension with additional instructions. It is enabled by the top&#8217;s <a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zbkc</code></a> generic. +This ISA extension is implemented as multi-cycle ALU co-processor (<code>rtl/core/neorv32_cpu_cp_bitmanip.vhd</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 61. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Carry-less multiply</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>clmul</code> <code>clmulh</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">6 + 32</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zbkx_isa_extension">3.6.20. <code>Zbkx</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zbkx</code> sub-extension is part of the <em>RISC-V scalar cryptography</em> ISA specification and adds crossbar permutation instructions. +It is enabled by the top&#8217;s <a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zbkx</code></a> generic. +This ISA extension is implemented as multi-cycle ALU co-processor (<code>rtl/core/neorv32_cpu_cp_crypto.vhd</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 62. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Crossbar permutation</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xperm8</code> <code>xperm4</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zkn_isa_extension">3.6.21. <code>Zkn</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zkn</code> ISA extension is part of the <em>RISC-V scalar cryptography</em> ISA specification and defines the "NIST algorithm suite". +This ISA extension cannot be enabled by a specific generic. Instead, it is enabled if a specific set of cryptography-related +sub-extensions is enabled.</p> +</div> +<div class="paragraph"> +<p>The <code>Zkn</code> extension is shorthand for the following set of other extensions:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><a href="#_zbkb_isa_extension"><code>Zbkb</code> ISA Extension</a> - Bit manipulation instructions for cryptography.</p> +</li> +<li> +<p><a href="#_zbkc_isa_extension"><code>Zbkc</code> ISA Extension</a> - Carry-less multiply instructions.</p> +</li> +<li> +<p><a href="#_zbkx_isa_extension"><code>Zbkx</code> ISA Extension</a> - Cross-bar permutation instructions.</p> +</li> +<li> +<p><a href="#_zkne_isa_extension"><code>Zkne</code> ISA Extension</a> - AES encryption instructions.</p> +</li> +<li> +<p><a href="#_zknd_isa_extension"><code>Zknd</code> ISA Extension</a> - AES decryption instructions.</p> +</li> +<li> +<p><a href="#_zknh_isa_extension"><code>Zknh</code> ISA Extension</a> - SHA2 hash function instructions.</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>A processor configuration which implements <code>Zkn</code> must implement all of the above extensions.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_zknd_isa_extension">3.6.22. <code>Zknd</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zknd</code> sub-extension is part of the <em>RISC-V scalar cryptography</em> ISA specification and adds NIST AES decryption instructions. +It is enabled by the top&#8217;s <a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zknd</code></a> generic. +This ISA extension is implemented as multi-cycle ALU co-processor (<code>rtl/core/neorv32_cpu_cp_crypto.vhd</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 63. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">AES decryption</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>aes32dsi</code> <code>aes32dsmi</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zkne_isa_extension">3.6.23. <code>Zkne</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zkne</code> sub-extension is part of the <em>RISC-V scalar cryptography</em> ISA specification and adds NIST AES encryption instructions. +It is enabled by the top&#8217;s <a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zkne</code></a> generic. +This ISA extension is implemented as multi-cycle ALU co-processor (<code>rtl/core/neorv32_cpu_cp_crypto.vhd</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 64. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">AES decryption</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>aes32esi</code> <code>aes32esmi</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zknh_isa_extension">3.6.24. <code>Zknh</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zknh</code> sub-extension is part of the <em>RISC-V scalar cryptography</em> ISA specification and adds NIST hash function instructions. +It is enabled by the top&#8217;s <a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zknh</code></a> generic. +This ISA extension is implemented as multi-cycle ALU co-processor (<code>rtl/core/neorv32_cpu_cp_crypto.vhd</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 65. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">sha256</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sha256sig0</code> <code>sha256sig1</code> <code>sha256sum0</code> <code>sha256sum1</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">sha512</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sha512sig0h</code> <code>sha512sig0l</code> <code>sha512sig1h</code> <code>sha512sig1l</code> <code>sha512sum0r</code> <code>sha512sum1r</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zks_isa_extension">3.6.25. <code>Zks</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zks</code> ISA extension is part of the <em>RISC-V scalar cryptography</em> ISA specification and defines the "ShangMi algorithm suite". +This ISA extension cannot be enabled by a specific generic. Instead, it is enabled if a specific set of cryptography-related +sub-extensions is enabled.</p> +</div> +<div class="paragraph"> +<p>The <code>Zks</code> extension is shorthand for the following set of other extensions:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><a href="#_zbkb_isa_extension"><code>Zbkb</code> ISA Extension</a> - Bit manipulation instructions for cryptography.</p> +</li> +<li> +<p><a href="#_zbkc_isa_extension"><code>Zbkc</code> ISA Extension</a> - Carry-less multiply instructions.</p> +</li> +<li> +<p><a href="#_zbkx_isa_extension"><code>Zbkx</code> ISA Extension</a> - Cross-bar permutation instructions.</p> +</li> +<li> +<p><a href="#_zksed_isa_extension"><code>Zksed</code> ISA Extension</a> - SM4 block cipher instructions.</p> +</li> +<li> +<p><a href="#_zksh_isa_extension"><code>Zksh</code> ISA Extension</a> - SM3 hash function instructions.</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>A processor configuration which implements <code>Zks</code> must implement all of the above extensions.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_zksed_isa_extension">3.6.26. <code>Zksed</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zksed</code> sub-extension is part of the <em>RISC-V scalar cryptography</em> ISA specification and adds ShangMi block cypher +and key schedule instructions. It is enabled by the top&#8217;s <a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zksed</code></a> generic. +This ISA extension is implemented as multi-cycle ALU co-processor (<code>rtl/core/neorv32_cpu_cp_crypto.vhd</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 66. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Block cyphers</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sm4ed</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Key schedule</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sm4ks</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zksh_isa_extension">3.6.27. <code>Zksh</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zksh</code> sub-extension is part of the <em>RISC-V scalar cryptography</em> ISA specification and adds ShangMi hash function instructions. +It is enabled by the top&#8217;s <a href="#_processor_top_entity_generics"><code>RISCV_ISA_Zksh</code></a> generic. +This ISA extension is implemented as multi-cycle ALU co-processor (<code>rtl/core/neorv32_cpu_cp_crypto.vhd</code>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 67. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hash</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sm3p0</code> <code>sm3p1</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zkt_isa_extension">3.6.28. <code>Zkt</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zkt</code> sub-extension is part of the <em>RISC-V scalar cryptography</em> ISA specification and guarantees data independent execution +times of cryptographic and cryptography-related instructions. The ISA extension cannot be enabled by a specific generic. +Instead, it is enabled implicitly by certain CPU configurations.</p> +</div> +<div class="paragraph"> +<p>The RISC-V <code>Zkt</code> specifications provides a list of instructions that are included within this specification. +However, not all instructions are required to be implemented. Rather, every one of these instructions that the +core does implement must adhere to the requirements of <code>Zkt</code>.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 68. <code>Zkt</code> instruction listing</caption> +<colgroup> +<col style="width: 10%;"> +<col style="width: 60%;"> +<col style="width: 30%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Parent extension</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Data independent execution time?</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>RVI</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>lui</code> <code>auipc</code> <code>add[i]</code> <code>slt[i][u]</code> <code>xor[i]</code> <code>or[i]</code> <code>and[i]</code> <code>sub</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sll[i]</code> <code>srl[i]</code> <code>sra[i]</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">yes if <code>CPU_FAST_SHIFT_EN</code> enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RVM</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>mul[h]</code> <code>mulh[s]u</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>RVC</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>c.nop</code> <code>c.addi</code> <code>c.lui</code> <code>c.andi</code> <code>c.sub</code> <code>c.xor</code> <code>c.and</code> <code>c.mv</code> <code>c.add</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>c.srli</code> <code>c.srai</code> <code>c.slli</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">yes if <code>CPU_FAST_SHIFT_EN</code> enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>RVK</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>aes32ds[m]i</code> <code>aes32es[m]i</code> <code>sha256sig*</code> <code>sha512sig*</code> <code>sha512sum*</code> <code>sm3p0</code> <code>sm3p1</code> <code>sm4ed</code> <code>sm4ks</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>RVB</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xperm4</code> <code>xperm8</code> <code>andn</code> <code>orn</code> <code>xnor</code> <code>pack[h]</code> <code>brev8</code> <code>rev8</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">yes</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ror[i]</code> <code>rol</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">yes if <code>CPU_FAST_SHIFT_EN</code> enabled</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_zmmul_isa_extension">3.6.29. <code>Zmmul</code> - ISA Extension</h4> +<div class="paragraph"> +<p>This is a sub-extension of the <a href="#_m_isa_extension"><code>M</code> ISA Extension</a> ISA extension. It implements only the multiplication operations +of the <code>M</code> extensions and is intended for size-constrained setups that require hardware-based +integer multiplications but not hardware-based divisions, which will be computed entirely in software. +Note that the <a href="#_zmmul_isa_extension"><code>Zmmul</code> - ISA Extension</a> and <a href="#_m_isa_extension"><code>M</code> ISA Extension</a> are mutually exclusive.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_zxcfu_isa_extension">3.6.30. <code>Zxcfu</code> ISA Extension</h4> +<div class="paragraph"> +<p>The <code>Zxcfu</code> presents a NEORV32-specific ISA extension. It adds the <a href="#_custom_functions_unit_cfu">Custom Functions Unit (CFU)</a> to +the CPU core, which allows to add custom RISC-V instructions to the processor core. +For detailed information regarding the CFU, its hardware and the according software interface +see section <a href="#_custom_functions_unit_cfu">Custom Functions Unit (CFU)</a>.</p> +</div> +<div class="paragraph"> +<p>Software can utilize the custom instructions by using <em>intrinsics</em>, which are basically inline assembly functions that +behave like regular C functions but that evaluate to a single custom instruction word (no calling overhead at all).</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">CFU Execution Time</div> +The actual CFU execution time depends on the logic being implemented. The CPU architecture requires a minimal execution +time of 3 cycles (purely combinatorial CFU operation) and automatically terminates execution after 512 cycles if the CFU +does not complete operation within this time window. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 69. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 55.5555%;"> +<col style="width: 22.2223%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Custom instructions</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Instruction words with <code>custom-0</code> or <code>custom-1</code> opcode</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">3 &#8230;&#8203; 3+512</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_smpmp_isa_extension">3.6.31. <code>Smpmp</code> ISA Extension</h4> +<div class="paragraph"> +<p>The NEORV32 physical memory protection (PMP) provides an elementary memory protection mechanism that can be used +to configure read/write(execute permission of arbitrary memory regions. In general, the PMP can <strong>grant permissions +to user mode</strong>, which by default has none, and can <strong>revoke permissions from M-mode</strong>, which by default has full +permissions. The NEORV32 PMP is fully compatible to the RISC-V Privileged Architecture Specifications and is +configured via several CSRs (<a href="#_machine_physical_memory_protection_csrs">Machine Physical Memory Protection CSRs</a>). Several <a href="#_processor_top_entity_generics">Processor Top Entity - Generics</a> +are provided to adjust the CPU&#8217;s PMP capabilities according to the application requirements (pre-synthesis):</p> +</div> +<div class="olist arabic"> +<ol class="arabic"> +<li> +<p><code>PMP_NUM_REGIONS</code> defines the number of implemented PMP regions (0..16); setting this generic to zero will +result in absolutely no PMP logic being implemented</p> +</li> +<li> +<p><code>PMP_MIN_GRANULARITY</code> defines the minimal granularity of each region (has to be a power of 2, minimal +granularity = 4 bytes); note that a smaller granularity will lead to wider comparators and thus, to higher area footprint +and longer critical path</p> +</li> +<li> +<p><code>PMP_TOR_MODE_EN</code> controls the implementation of the top-of-region (TOR) mode (default = true); disabling this mode +will reduce area footprint</p> +</li> +<li> +<p><code>PMP_NAP_MODE_EN</code> controls the implementation of the naturally-aligned-power-of-two (NA4 and NAPOT) modes (default = +true); disabling this mode will reduce area footprint and critical path length</p> +</li> +</ol> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">PMP Permissions when in Debug Mode</div> +When in debug-mode all PMP rules are bypassed/ignored granting the debugger maximum access permissions. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">PMP Time-Multiplex</div> +Instructions are executed in a multi-cycle manner. Hence, data access (load/store) and instruction fetch cannot occur +at the same time. Therefore, the PMP hardware uses only a single set of comparators for memory access permissions checks +that are switched in an iterative, time-multiplex style reducing hardware footprint by approx. 50% while maintaining +full security features and RISC-V compatibility. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">PMP Memory Accesses</div> +Load/store accesses for which there are insufficient access permission do not trigger any memory/bus accesses at all. +In contrast, instruction accesses for which there are insufficient access permission nevertheless lead to a memory/bus +access (causing potential side effects on the memory side=. However, the fetched instruction will be discarded and the +corresponding exception will still be triggered precisely. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_sdext_isa_extension">3.6.32. <code>Sdext</code> ISA Extension</h4> +<div class="paragraph"> +<p>This ISA extension enables the RISC-V-compatible "external debug support" by implementing +the CPU "debug mode", which is required for the on-chip debugger. +See section <a href="#_on_chip_debugger_ocd">On-Chip Debugger (OCD)</a> / <a href="#_cpu_debug_mode">CPU Debug Mode</a> for more information.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 70. Instructions and Timing</caption> +<colgroup> +<col style="width: 22.2222%;"> +<col style="width: 44.4444%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Class</th> +<th class="tableblock halign-left valign-top">Instructions</th> +<th class="tableblock halign-left valign-top">Execution cycles</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">System</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>dret</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_sdtrig_isa_extension">3.6.33. <code>Sdtrig</code> ISA Extension</h4> +<div class="paragraph"> +<p>This ISA extension implements the RISC-V-compatible "trigger module". +See section <a href="#_on_chip_debugger_ocd">On-Chip Debugger (OCD)</a> / <a href="#_trigger_module">Trigger Module</a> for more information.</p> +</div> +<div style="page-break-after: always;"></div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_custom_functions_unit_cfu">3.7. Custom Functions Unit (CFU)</h3> +<div class="paragraph"> +<p>The Custom Functions Unit (CFU) is the central part of the NEORV32-specific <a href="#_zxcfu_isa_extension"><code>Zxcfu</code> ISA Extension</a> and +represents the actual hardware module that can be used to implement <strong>custom RISC-V instructions</strong>.</p> +</div> +<div class="paragraph"> +<p>The CFU is intended for operations that are inefficient in terms of performance, latency, energy consumption or +program memory requirements when implemented entirely in software. Some potential application fields and exemplary +use-cases might include:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><strong>AI:</strong> sub-word / vertical vector/SIMD operations like processing all four sub-bytes of a 32-bit data word individually</p> +</li> +<li> +<p><strong>Cryptographic:</strong> bit substitution and permutation</p> +</li> +<li> +<p><strong>Communication:</strong> data conversions like binary to gray-code</p> +</li> +<li> +<p><strong>Arithmetic:</strong> BCD (binary-coded decimal) operations; multiply-add operations; shift-and-add algorithms like CORDIC or BKM</p> +</li> +<li> +<p><strong>Image processing:</strong> look-up-tables for color space transformations</p> +</li> +<li> +<p>implementing instructions from <strong>other RISC-V ISA extensions</strong> that are not yet supported by NEORV32</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>The NEORV32 CFU supports two different instruction formats (R3-type and R4-type; see <a href="#_cfu_instruction_formats">CFU Instruction Formats</a>) and also +allows to implement up to 4 CFU-internal custom control and status registers (see <a href="#_cfu_control_and_status_registers_cfu_csrs">CFU Control and Status Registers (CFU-CSRs)</a>).</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">CFU Complexity</div> +The CFU is not intended for complex and <strong>CPU-independent</strong> functional units that implement complete accelerators +(like block-based AES encryption). These kind of accelerators should be implemented as memory-mapped co-processor via the +<a href="#_custom_functions_subsystem_cfs">Custom Functions Subsystem (CFS)</a> to allow CPU-independent operation. A comparative survey of all NEORV32-specific +hardware extension/customization options is provided in the user guide section +<a href="https://stnolting.github.io/neorv32/ug/#_adding_custom_hardware_modules">Adding Custom Hardware Modules</a>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Default CFU Hardware Example</div> +The default CFU module (<code>rtl/core/neorv32_cpu_cp_cfu.vhd</code>) implements the <em>Extended Tiny Encryption Algorithm (XTEA)</em> +as "real world" application example. +</td> +</tr> +</table> +</div> +<div class="sect3"> +<h4 id="_cfu_instruction_formats">3.7.1. CFU Instruction Formats</h4> +<div class="paragraph"> +<p>The custom instructions executed by the CFU utilize a specific opcode space in the <code>rv32</code> 32-bit instruction +encoding space that has been explicitly reserved for user-defined extensions by the RISC-V specifications ("Guaranteed +Non-Standard Encoding Space"). The NEORV32 CFU uses the <code>custom-0</code> and <code>custom-1</code> opcodes to identify the instruction +implemented by the CFU and to differentiate between the predefined instruction formats.</p> +</div> +<div class="paragraph"> +<p>The NEORV32 CFU utilizes these two opcodes to support user-defined <strong>R3-type</strong> instructions (2 source registers, +1 destination register) and <strong>R4-type</strong> instructions (3 source registers, 1 destination register). Both instruction +formats are compliant to the RISC-V specification.</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>custom-0</code>: <code>0001011</code> RISC-V standard, used for NEORV32 <a href="#_cfu_r3_type_instructions">CFU R3-Type Instructions</a> (3x register addresses)</p> +</li> +<li> +<p><code>custom-1</code>: <code>0101011</code> RISC-V standard, used for NEORV32 <a href="#_cfu_r4_type_instructions">CFU R4-Type Instructions</a> (4x register addresses)</p> +</li> +</ul> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +The provided instructions formats are <em>predefined</em> to allow an easy integration framework. +However, system designers are free to ignore these and use their own instruction types and formats. +</td> +</tr> +</table> +</div> +<div class="sect4"> +<h5 id="_cfu_r3_type_instructions">CFU R3-Type Instructions</h5> +<div class="paragraph"> +<p>The R3-type CFU instructions operate on two source registers <code>rs1</code> and <code>rs2</code> and return the processing result to +the destination register <code>rd</code>. The actual operation can be defined by using the <code>funct7</code> and <code>funct3</code> bit fields. +These immediates can also be used to pass additional data to the CFU like offsets, look-up-tables addresses or +shift-amounts. However, the actual functionality is entirely user-defined. Note that all immediate values are +always compile-time-static.</p> +</div> +<div class="paragraph"> +<p>Example operation: <code>rd &#8656; rs1 xnor rs2</code> (bit-wise logical XNOR)</p> +</div> +<div class="imageblock text-left"> +<div class="content"> +<img src="img/cfu_r3type_instruction.png" alt="cfu r3type instruction"> +</div> +<div class="title">Figure 11. CFU R3-type instruction format</div> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>funct7</code>: 7-bit immediate (immediate data or function select)</p> +</li> +<li> +<p><code>rs2</code>: address of second source register (providing 32-bit source data)</p> +</li> +<li> +<p><code>rs1</code>: address of first source register (providing 32-bit source data)</p> +</li> +<li> +<p><code>funct3</code>: 3-bit immediate (immediate data or function select)</p> +</li> +<li> +<p><code>rd</code>: address of destination register (32-bit processing result)</p> +</li> +<li> +<p><code>opcode</code>: <code>0001011</code> (RISC-V <code>custom-0</code> opcode)</p> +</li> +</ul> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Instruction encoding space</div> +By using the <code>funct7</code> and <code>funct3</code> bit fields entirely for selecting the actual operation a total of 1024 custom +R3-type instructions can be implemented (7-bit + 3-bit = 10 bit &#8594; 1024 different values). +</td> +</tr> +</table> +</div> +</div> +<div class="sect4"> +<h5 id="_cfu_r4_type_instructions">CFU R4-Type Instructions</h5> +<div class="paragraph"> +<p>The R4-type CFU instructions operate on three source registers <code>rs1</code>, <code>rs2</code> and <code>rs2</code> and return the processing +result to the destination register <code>rd</code>. The actual operation can be defined by using the <code>funct3</code> bit field. +Alternatively, this immediate can also be used to pass additional data to the CFU like offsets, look-up-tables +addresses or shift-amounts. However, the actual functionality is entirely user-defined. Note that all immediate +values are always compile-time-static.</p> +</div> +<div class="paragraph"> +<p>Example operation: <code>rd &#8656; (rs1 * rs2 + rs3)[31:0]</code> (multiply-and-accumulate; "MAC")</p> +</div> +<div class="imageblock text-left"> +<div class="content"> +<img src="img/cfu_r4type_instruction.png" alt="cfu r4type instruction"> +</div> +<div class="title">Figure 12. CFU R4-type instruction format</div> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>rs3</code>: address of third source register (providing 32-bit source data)</p> +</li> +<li> +<p><code>rs2</code>: address of second source register (providing 32-bit source data)</p> +</li> +<li> +<p><code>rs1</code>: address of first source register (providing 32-bit source data)</p> +</li> +<li> +<p><code>funct3</code>: 3-bit immediate (immediate data or function select)</p> +</li> +<li> +<p><code>rd</code>: address of destination register (32-bit processing result)</p> +</li> +<li> +<p><code>opcode</code>: <code>0101011</code> (RISC-V <code>custom-1</code> opcode)</p> +</li> +<li> +<p>⚠️ bits [26:25] of the R4-type instruction word are unused. However, these bits are ignored +by CPU&#8217;s instruction decoder and can be retrieved via the CFU&#8217;s <code>funct7_i(6 downto 5)</code> signal.</p> +</li> +</ul> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Instruction encoding space</div> +By using the <code>funct3</code> bit field entirely for selecting the actual operation a total of 8 custom R4-type +instructions can be implemented (3-bit &#8594; 8 different values). +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Re-purposing R4-type instructions as additional R3-type instructions</div> +Advanced user can use the custom-1 opcode to implement additional R3-type instructions instead of the +predefined r4-type instructions. +</td> +</tr> +</table> +</div> +</div> +</div> +<div class="sect3"> +<h4 id="_using_custom_instructions_in_software">3.7.2. Using Custom Instructions in Software</h4> +<div class="paragraph"> +<p>The custom instructions provided by the CFU can be used in plain C code by using <strong>intrinsics</strong>. Intrinsics +behave like "normal" C functions but under the hood they are a set of macros that hide the complexity of inline +assembly, which is used to construct the custom 32-bit instruction words. Using intrinsics removes the need to +modify the compiler, built-in libraries or the assembler when using custom instructions. Each intrinsic will be +compiled into a single 32-bit instruction word without any overhead providing maximum code efficiency.</p> +</div> +<div class="paragraph"> +<p>The NEORV32 software framework provides two pre-defined prototypes for custom instructions, which are defined in +<code>sw/lib/include/neorv32_cpu_cfu.h</code>:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 12. CFU instruction prototypes</div> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">uint32_t neorv32_cfu_r3_instr(funct7, funct3, rs1, rs2); // R3-type instructions +uint32_t neorv32_cfu_r4_instr(funct3, rs1, rs2, rs3); // R4-type instructions</code></pre> +</div> +</div> +<div class="paragraph"> +<p>The intrinsic functions always return a 32-bit value of type <code>uint32_t</code> (the processing result), which can be +discarded if not needed. Each intrinsic function requires several arguments depending on the instruction type/format:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>funct7</code> - 7-bit immediate (R3-type)</p> +</li> +<li> +<p><code>funct3</code> - 3-bit immediate (R3-type, R4-type)</p> +</li> +<li> +<p><code>rs1</code> - source operand 1, 32-bit (R3-type, R4-type)</p> +</li> +<li> +<p><code>rs2</code> - source operand 2, 32-bit (R3-type, R4-type)</p> +</li> +<li> +<p><code>rs3</code> - source operand 3, 32-bit (R4-type)</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>The <code>funct3</code> and <code>funct7</code> bit-fields are used to pass 3-bit or 7-bit literals to the CFU. The <code>rs1</code>, <code>rs2</code> and +<code>rs3</code> arguments pass the actual data to the CFU via register addresses. These register arguments can be populated +with variables or literals; the compiler will add the required code to move the data into a register before +passing it to the CFU. The following examples shows how to pass arguments:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 13. CFU instruction usage example</div> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">uint32_t tmp = some_function(); +... +uint32_t res = neorv32_cfu_r3_instr(0b0000000, 0b101, tmp, 123); +uint32_t foo = neorv32_cfu_r4_instr(0b011, tmp, res, (uint32_t)some_array[i]); +neorv32_cfu_r3_instr(0b0100100, 0b001, tmp, foo); // discard result</code></pre> +</div> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">CFU Example Program</div> +There is an example program for the CFU, which shows how to use the <em>default</em> CFU hardware module. +This example program is located in <code>sw/example/demo_cfu</code>. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_cfu_control_and_status_registers_cfu_csrs">3.7.3. CFU Control and Status Registers (CFU-CSRs)</h4> +<div class="paragraph"> +<p>The CPU provides up to four control and status registers (<a href="#_cfureg"><code>cfureg*</code></a>) to be used within the CFU. +These CSRs are mapped to the "custom user-mode read/write" CSR address space, which is explicitly reserved for +platform-specific application by the RISC-V spec. For example, these CSRs can be used to pass additional operands +to the CFU, to obtain additional results, to check processing status or to configure operation modes.</p> +</div> +<div class="listingblock"> +<div class="title">Listing 14. CFU CSR Access Example</div> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">neorv32_cpu_csr_write(CSR_CFUREG0, 0xabcdabcd); // write data to CFU CSR 0 +uint32_t tmp = neorv32_cpu_csr_read(CSR_CFUREG3); // read data from CFU CSR 3</code></pre> +</div> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Additional CFU-internal CSRs</div> +If more than four CFU-internal CSRs are required the designer can implement an "indirect access mechanism" based +on just two of the default CSRs: one CSR is used to configure the index while the other is used as alias to exchange +data with the indexed CFU-internal CSR - this concept is similar to the RISC-V Indirect CSR Access Extension +Specification (<code>Smcsrind</code>). +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Security Considerations</div> +The CFU CSRs are mapped to the user-mode CSR space so software running at <em>any privilege level</em> can access these +CSRs. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_custom_instructions_hardware">3.7.4. Custom Instructions Hardware</h4> +<div class="paragraph"> +<p>The actual functionality of the CFU&#8217;s custom instructions is defined by the user-defined logic inside the CFU +hardware module (<code>rtl/core/neorv32_cpu_cp_cfu.vhd</code>). This file is highly commented to explain the interface and +to illustrate hardware design considerations.</p> +</div> +<div class="paragraph"> +<p>CFU operations can be entirely combinatorial (like bit-reversal) so the result is available at the end of the +current clock cycle. However, operations can also take several clock cycles to complete (like multiplications) +and may also include internal states and memories.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">CFU Hardware Resource Requirements</div> +Enabling the CFU and actually implementing R4-type instructions (or more precisely, using the third register +source <code>rs3</code>) will add an additional read port to the core&#8217;s register file increasing resource requirements +of the register file by 50%. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">CFU Execution Time</div> +The CFU has to complete computation within a <strong>bound time window</strong> (default = 512 clock cycles). Otherwise, +the CFU operation is terminated by the CPU execution logic and an illegal instruction exception is raised. See section +<a href="#_cpu_arithmetic_logic_unit">CPU Arithmetic Logic Unit</a> for more information. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">CFU Exception</div> +The CFU can intentionally raise an illegal instruction exception by not asserting the <code>done</code> at all causing an +execution timeout. For example this can be used to signal invalid configurations/operations to the runtime +environment. See the documentation in the CFU&#8217;s VHDL source file for more information. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_control_and_status_registers_csrs">3.8. Control and Status Registers (CSRs)</h3> +<div class="paragraph"> +<p>The following table shows a summary of all available NEORV32 CSRs. The address field defines the CSR address for +the CSR access instructions. The "Name [ASM]" column provides the CSR name aliases that can be used in (inline) assembly. +The "Name [C]" column lists the name aliases that are defined by the NEORV32 core library. These can be used in plain C code. +The "Access" column shows the minimal required privilege mode required for accessing the according CSR (<code>M</code> = machine-mode, +<code>U</code> = user-mode, <code>D</code> = debug-mode) and the read/write capabilities (<code>RW</code> = read-write, <code>RO</code> = read-only)</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Unused, Reserved, Unimplemented and Disabled CSRs</div> +All CSRs and CSR bits that are not listed in the table below are <em>unimplemented</em> and are <em>hardwired to zero</em>. Additionally, +CSRs that are unavailable ("disabled") because the according ISA extension is not enabled are also considered <em>unimplemented</em> +and are also hardwired to zero. Any access to such a CSR will raise an illegal instruction exception. All writable CSRs provide +<strong>WARL</strong> behavior (write all values; read only legal values). Application software should always read back a CSR after writing +to check if the targeted bits can actually be modified. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-all stretch"> +<caption class="title">Table 71. NEORV32 Control and Status Registers (CSRs)</caption> +<colgroup> +<col style="width: 8.6956%;"> +<col style="width: 17.3913%;"> +<col style="width: 21.7391%;"> +<col style="width: 4.3478%;"> +<col style="width: 47.8262%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Address</th> +<th class="tableblock halign-left valign-top">Name [ASM]</th> +<th class="tableblock halign-left valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">Access</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_floating_point_csrs">Floating-Point CSRs</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x001</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_fflags"><strong><code>fflags</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_FFLAGS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">URW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Floating-point accrued exceptions</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x002</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_frm"><strong><code>frm</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_FRM</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">URW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Floating-point dynamic rounding mode</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x003</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_fcsr"><strong><code>fcsr</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_FCSR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">URW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Floating-point control and status</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_machine_trap_setup_csrs">Machine Trap Setup CSRs</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x300</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mstatus"><strong><code>mstatus</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MSTATUS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine status register - low word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x301</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_misa"><strong><code>misa</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MISA</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine CPU ISA and extensions</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x304</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mie"><strong><code>mie</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MIE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine interrupt enable register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x305</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mtvec"><strong><code>mtvec</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MTVEC</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine trap-handler base address for ALL traps</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x306</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mcounteren"><strong><code>mcounteren</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MCOUNTEREN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine counter-enable register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x310</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mstatush"><strong><code>mstatush</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MSTATUSH</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine status register - high word</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_machine_configuration_csrs">Machine Configuration CSRs</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x30a</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_menvcfg"><strong><code>menvcfg</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MENVCFG</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine environment configuration register - low word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x31a</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_menvcfgh"><strong><code>menvcfgh</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MENVCFGH</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine environment configuration register - high word</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_machine_counter_setup_csrs">Machine Counter Setup CSRs</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x320</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mcountinhibit"><strong><code>mcountinhibit</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MCOUNTINHIBIT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine counter-inhibit register</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_machine_trap_handling_csrs">Machine Trap Handling CSRs</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x340</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mscratch"><strong><code>mscratch</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MSCRATCH</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine scratch register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x341</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mepc"><strong><code>mepc</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MEPC</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine exception program counter</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x342</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mcause"><strong><code>mcause</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MCAUSE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine trap cause</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x343</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mtval"><strong><code>mtval</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MTVAL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine trap value</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x344</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mip"><strong><code>mip</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MIP</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine interrupt pending register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x34a</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mtinst"><strong><code>mtinst</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MTINST</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine trap instruction</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_machine_physical_memory_protection_csrs">Machine Physical Memory Protection CSRs</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x3a0 .. 0x303</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_pmpcfg"><code>pmpcfg0</code></a> .. <a href="#_pmpcfg"><code>pmpcfg3</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_PMPCFG0</code> .. <code>CSR_PMPCFG3</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Physical memory protection configuration registers</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x3b0 .. 0x3bf</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_pmpaddr"><code>pmpaddr0</code></a> .. <a href="#_pmpaddr"><code>pmpaddr15</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_PMPADDR0</code> .. <code>CSR_PMPADDR15</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Physical memory protection address registers</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_trigger_module_csrs">Trigger Module CSRs</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x7a0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_tselect"><strong><code>tselect</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_TSELECT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger select register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x7a1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_tdata1"><strong><code>tdata1</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_TDATA1</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger data register 1</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x7a2</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_tdata2"><strong><code>tdata2</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_TDATA2</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger data register 2</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x7a4</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_tinfo"><strong><code>tinfo</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_TINFO</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger information register</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_cpu_debug_mode_csrs">CPU Debug Mode CSRs</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x7b0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_dcsr"><strong><code>dcsr</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">DRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Debug control and status register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x7b1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_dpc"><strong><code>dpc</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">DRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Debug program counter</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x7b2</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_dscratch0"><strong><code>dscratch0</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">DRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Debug scratch register 0</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_custom_functions_unit_cfu_csrs">Custom Functions Unit (CFU) CSRs</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x800 .. 0x803</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_cfureg"><code>cfureg0</code></a> .. <a href="#_cfureg"><code>cfureg3</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_CFUCREG0</code> .. <code>CSR_CFUCREG3</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">URW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Custom CFU registers 0 to 3</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_machine_counter_and_timer_csrs">(Machine) Counter and Timer CSRs</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xb00</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mcycleh"><code>mcycle</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MCYCLE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine cycle counter low word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xb02</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_minstreth"><code>minstret</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MINSTRET</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine instruction-retired counter low word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xb80</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mcycleh"><code>mcycleh</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MCYCLEH</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine cycle counter high word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xb82</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_minstreth"><code>minstreth</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MINSTRETH</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine instruction-retired counter high word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xc00</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_cycleh"><code>cycle</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_CYCLE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">URO</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Cycle counter low word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xc02</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_instreth"><code>instret</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_INSTRET</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">URO</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Instruction-retired counter low word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xc80</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_cycleh"><code>cycleh</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_CYCLEH</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">URO</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Cycle counter high word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xc82</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_instreth"><code>instreth</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_INSTRETH</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">URO</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Instruction-retired counter high word</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_hardware_performance_monitors_hpm_csrs">Hardware Performance Monitors (HPM) CSRs</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x323 .. 0x32f</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mhpmevent"><code>mhpmevent3</code></a> .. <a href="#_mhpmevent"><code>mhpmevent15</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MHPMEVENT3</code> .. <code>CSR_MHPMEVENT15</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine performance-monitoring event select for counter 3..15</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xb03 .. 0xb0f</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mhpmcounterh"><code>mhpmcounter3</code></a> .. <a href="#_mhpmcounterh"><code>mhpmcounter15</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MHPMCOUNTER3</code> .. <code>CSR_MHPMCOUNTER15</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine performance-monitoring counter 3..15 low word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xb83 .. 0xb8f</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mhpmcounterh"><code>mhpmcounter3h</code></a> .. <a href="#_mhpmcounterh"><code>mhpmcounter15h</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MHPMCOUNTER3H</code> .. <code>CSR_MHPMCOUNTER15H</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRW</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine performance-monitoring counter 3..15 high word</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_machine_information_csrs">Machine Information CSRs</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xf11</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mvendorid"><strong><code>mvendorid</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MVENDORID</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRO</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine vendor ID</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xf12</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_marchid"><strong><code>marchid</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MARCHID</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRO</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine architecture ID</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xf13</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mimpid"><strong><code>mimpid</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MIMPID</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRO</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine implementation ID / version</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xf14</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mhartid"><strong><code>mhartid</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MHARTID</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRO</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine hardware thread ID</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xf15</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mconfigptr"><strong><code>mconfigptr</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MCONFIGPTR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRO</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine configuration pointer register</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="5"><p class="tableblock"><strong><a href="#_neorv32_specific_csrs">NEORV32-Specific CSRs</a></strong></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0xfc0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_mxisa"><strong><code>mxisa</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MXISA</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">MRO</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">NEORV32-specific "eXtended" machine CPU ISA and extensions</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +<div class="sect3"> +<h4 id="_floating_point_csrs">3.8.1. Floating-Point CSRs</h4> +<h5 id="_fflags" class="discrete"><strong><code>fflags</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Floating-point accrued exceptions</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x001</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Zfinx</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">FPU status flags.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 72. <code>fflags</code> CSR bits</caption> +<colgroup> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 83.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>NX</strong>: inexact</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>UF</strong>: underflow</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OF</strong>: overflow</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">3</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>DZ</strong>: division by zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>NV</strong>: invalid operation</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_frm" class="discrete"><strong><code>frm</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Floating-point dynamic rounding mode</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x002</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Zfinx</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>frm</code> CSR is used to configure the rounding mode of the FPU.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 73. <code>frm</code> CSR bits</caption> +<colgroup> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 83.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">2:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Rounding mode</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_fcsr" class="discrete"><strong><code>fcsr</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Floating-point control and status register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x003</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Zfinx</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>fcsr</code> provides combined access to the <a href="#_fflags"><strong><code>fflags</code></strong></a> and <a href="#_frm"><strong><code>frm</code></strong></a> flags.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 74. <code>fcsr</code> CSR bits</caption> +<colgroup> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 83.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">4:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Accrued exception flags (<a href="#_fflags"><strong><code>fflags</code></strong></a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">7:5</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Rounding mode (<a href="#_frm"><strong><code>frm</code></strong></a>)</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_machine_trap_setup_csrs">3.8.2. Machine Trap Setup CSRs</h4> +<h5 id="_mstatus" class="discrete"><strong><code>mstatus</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine status register - low word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x300</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00001800</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>mstatus</code> CSR is used to configure general machine environment parameters.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 75. <code>mstatus</code> CSR bits</caption> +<colgroup> +<col style="width: 7.1428%;"> +<col style="width: 21.4285%;"> +<col style="width: 7.1428%;"> +<col style="width: 64.2859%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">3</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MSTATUS_MIE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>MIE</strong>: Machine-mode interrupt enable flag</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">7</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MSTATUS_MPIE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>MPIE</strong>: Previous machine-mode interrupt enable flag state</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">12:11</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MSTATUS_MPP_H</code> : <code>CSR_MSTATUS_MPP_L</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>MPP</strong>: Previous machine privilege mode, <code>11</code> = machine-mode "M", <code>00</code> = user-mode "U"; other values will fall-back to machine-mode</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">17</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MSTATUS_MPRV</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>MPRV</strong>: Effective privilege mode for load/stores; use <code>MPP</code> as effective privilege mode when set; hardwired to zero if user-mode not implemented</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">21</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MSTATUS_TW</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>TW</strong>: Trap on execution of <code>wfi</code> instruction in user mode when set; hardwired to zero if user-mode not implemented</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +If the core is in user-mode, machine-mode interrupts are globally <strong>enabled</strong> even if <code>mstatus.mie</code> is cleared: +"Interrupts for higher-privilege modes, y&gt;x, are always globally enabled regardless of the setting of the global yIE +bit for the higher-privilege mode." - RISC-V ISA Spec. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_misa" class="discrete"><strong><code>misa</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA and extensions</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x301</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DEFINED</code>, according to enabled ISA extensions</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>misa</code> CSR provides information regarding the availability of basic RISC-V ISa extensions.</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +The NEORV32 <code>misa</code> CSR is read-only. Hence, active CPU extensions are entirely defined by pre-synthesis configurations +and cannot be switched on/off during runtime. For compatibility reasons any write access to this CSR is simply ignored and +will <em>not</em> cause an illegal instruction exception. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 76. <code>misa</code> CSR bits</caption> +<colgroup> +<col style="width: 7.1428%;"> +<col style="width: 21.4285%;"> +<col style="width: 7.1428%;"> +<col style="width: 64.2859%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MISA_B_EXT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>B</strong>: CPU extension (bit-manipulation) available, set when <a href="#_b_isa_extension"><code>B</code> ISA Extension</a> enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MISA_C_EXT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>C</strong>: CPU extension (compressed instruction) available, set when <a href="#_c_isa_extension"><code>C</code> ISA Extension</a> enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MISA_E_EXT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>E</strong>: CPU extension (embedded) available, set when <a href="#_e_isa_extension"><code>E</code> ISA Extension</a> enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MISA_I_EXT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>I</strong>: CPU base ISA, cleared when <a href="#_e_isa_extension"><code>E</code> ISA Extension</a> enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">12</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MISA_M_EXT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M</strong>: CPU extension (mul/div) available, set when <a href="#_m_isa_extension"><code>M</code> ISA Extension</a> enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">20</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MISA_U_EXT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>U</strong>: CPU extension (user mode) available, set when <a href="#_u_isa_extension"><code>U</code> ISA Extension</a> enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">23</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MISA_X_EXT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>X</strong>: bit is always set to indicate non-standard / NEORV32-specific extensions</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:30</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MISA_MXL_HI_EXT</code> : <code>CSR_MISA_MXL_LO_EXT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>MXL</strong>: 32-bit architecture indicator (always <code>01</code>)</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +Machine-mode software can discover available <code>Z*</code> <em>sub-extensions</em> (like <code>Zicsr</code> or <code>Zfinx</code>) by checking the NEORV32-specific +<a href="#_mxisa"><strong><code>mxisa</code></strong></a> CSR. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mie" class="discrete"><strong><code>mie</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine interrupt-enable register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x304</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>mie</code> CSR is used to enable/disable individual interrupt sources.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 77. <code>mie</code> CSR bits</caption> +<colgroup> +<col style="width: 7.1428%;"> +<col style="width: 21.4285%;"> +<col style="width: 7.1428%;"> +<col style="width: 64.2859%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">3</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MIE_MSIE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>MSIE</strong>: Machine <em>software</em> interrupt enable (from <a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">7</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MIE_MTIE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>MTIE</strong>: Machine <em>timer</em> interrupt enable (from <a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">11</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MIE_MEIE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>MEIE</strong>: Machine <em>external</em> interrupt enable</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MIE_FIRQ15E</code> : <code>CSR_MIE_FIRQ0E</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Fast interrupt channel 15..0 enable</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mtvec" class="discrete"><strong><code>mtvec</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine trap-handler base address</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x305</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>mtvec</code> CSR holds the trap vector configuration.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 78. <code>mtvec</code> CSR bits</caption> +<colgroup> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 83.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">1:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>MODE</strong>: mode configuration, <code>00</code> = DIRECT, <code>01</code> = VECTORED; other encodings are <em>reserved</em>.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>BASE</strong>: in DIRECT mode = 4-byte-aligned base address of trap base handler, <em>all</em> traps jump to <code>pc = BASE</code>; +in VECTORED mode = 128-byte-aligned base address of trap vector table, interrupts cause a jump to <code>pc = BASE + 4 * mcause</code> +and exceptions a jump to <code>pc = BASE</code>.</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Interrupt Latency</div> +The vectored <code>mtvec</code> mode is useful for reducing the time between interrupt request (IRQ) and servicing it (ISR). +As software does not need to determine the interrupt cause the reduction in latency can be 5 to 10 times and as low as <em>26</em> cycles. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mcounteren" class="discrete"><strong><code>mcounteren</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine counter enable</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x306</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Zicntr</code> &amp; <code>U</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>mcounteren</code> CSR is used to constrain user-mode access to the CPU&#8217;s counter CSRs.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 79. <code>mcounteren</code> CSR bits</caption> +<colgroup> +<col style="width: 10%;"> +<col style="width: 10%;"> +<col style="width: 80%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [C]</th> +<th class="tableblock halign-left valign-top">R/W</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">Function</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CSR_MCOUNTEREN_CY</code></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>CY</strong>: User-mode is allowed to read <a href="#_cycleh"><strong><code>cycle[h]</code></strong></a> CSRs when set</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>TM</strong>: not implemented, hardwired to zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MCOUNTEREN_IR</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">r/w</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>IR</strong>: User-mode is allowed to read <a href="#_instreth"><strong><code>instret[h]</code></strong></a> CSRs when set</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:3</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mstatush" class="discrete"><strong><code>mstatush</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine status register - high word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x310</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The features of this CSR are not implemented yet. The register is read-only and always returns zero.</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_machine_trap_handling_csrs">3.8.3. Machine Trap Handling CSRs</h4> +<h5 id="_mscratch" class="discrete"><strong><code>mscratch</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Scratch register for machine trap handlers</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x340</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>mscratch</code> is a general-purpose machine-mode scratch register.</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mepc" class="discrete"><strong><code>mepc</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine exception program counter</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x341</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOT_ADDR</code> (CPU boot address, see <a href="#_cpu_top_entity_generics">CPU Top Entity - Generics</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>mepc</code> CSR provides the instruction address where execution has stopped/failed when +an interrupt is triggered / an exception is raised. See section <a href="#_traps_exceptions_and_interrupts">Traps, Exceptions and Interrupts</a> for a list of all legal values. +The <code>mret</code> instruction will return to the address stored in <code>mepc</code> by automatically moving <code>mepc</code> to the program counter.</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<code>mepc[0]</code> is hardwired to zero. If IALIGN = 32 (i.e. <a href="#_c_isa_extension"><code>C</code> ISA Extension</a> is disabled) then <code>mepc[1]</code> is also hardwired to zero. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mcause" class="discrete"><strong><code>mcause</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine trap cause</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x342</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>mcause</code> CSRs shows the exact cause of a trap. See section <a href="#_traps_exceptions_and_interrupts">Traps, Exceptions and Interrupts</a> for a list of all legal values.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 80. <code>mcause</code> CSR bits</caption> +<colgroup> +<col style="width: 8.3333%;"> +<col style="width: 8.3333%;"> +<col style="width: 83.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">4:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Exception code</strong>: see <a href="#_neorv32_trap_listing">NEORV32 Trap Listing</a></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Interrupt</strong>: <code>1</code> if the trap is caused by an interrupt (<code>0</code> if the trap is caused by an exception)</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mtval" class="discrete"><strong><code>mtval</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine trap value</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x343</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>mtval</code> CSR provides additional information why a trap was entered. See section <a href="#_traps_exceptions_and_interrupts">Traps, Exceptions and Interrupts</a> for more information.</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Read-Only</div> +Note that the NEORV32 <code>mtval</code> CSR is updated by the hardware only and cannot be written from software. +However, any write-access will be ignored and will not cause an exception to maintain RISC-V compatibility. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mip" class="discrete"><strong><code>mip</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine interrupt pending</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x344</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>mip</code> CSR shows currently <em>pending</em> machine-mode interrupt requests. Any write access to this register is ignored.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 81. <code>mip</code> CSR bits</caption> +<colgroup> +<col style="width: 7.1428%;"> +<col style="width: 21.4285%;"> +<col style="width: 7.1428%;"> +<col style="width: 64.2859%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">3</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MIP_MSIP</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>MSIP</strong>: Machine <em>software</em> interrupt pending, triggered by <code>msi_i</code> top port (see <a href="#_cpu_top_entity_signals">CPU Top Entity - Signals</a>); <em>cleared by source-specific mechanism</em></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">7</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MIP_MTIP</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>MTIP</strong>: Machine <em>timer</em> interrupt pending, triggered by <code>mei_i</code> top port (see <a href="#_cpu_top_entity_signals">CPU Top Entity - Signals</a>)or by the processor-internal &lt;&lt;(from <a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a>)&gt;&gt;; <em>cleared by source-specific mechanism</em></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">11</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MIP_MEIP</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>MEIP</strong>: Machine <em>external</em> interrupt pending, triggered by <code>mti_i</code> top port (see <a href="#_cpu_top_entity_signals">CPU Top Entity - Signals</a>) or by the processor-internal &lt;&lt;(from <a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a>)&gt;&gt;; <em>cleared by source-specific mechanism</em></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MIP_FIRQ15P</code> : <code>CSR_MIP_FIRQ0P</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>FIRQxP</strong>: Fast interrupt channel 15..0 pending, see <a href="#_neorv32_specific_fast_interrupt_requests">NEORV32-Specific Fast Interrupt Requests</a>; <em>cleared by source-specific mechanism</em></p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">FIRQ Channel Mapping</div> +See section <a href="#_neorv32_specific_fast_interrupt_requests">NEORV32-Specific Fast Interrupt Requests</a> for the mapping of the FIRQ channels and the according +interrupt-triggering processor module. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mtinst" class="discrete"><strong><code>mtinst</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine trap instruction</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x34a</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>mtinst</code> CSR provides additional information why a trap was entered. See section <a href="#_traps_exceptions_and_interrupts">Traps, Exceptions and Interrupts</a> for more information.</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Read-Only</div> +Note that the NEORV32 <code>mtinst</code> CSR is updated by the hardware only and cannot be written from software. +However, any write-access will be ignored and will not cause an exception to maintain RISC-V compatibility. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Instruction Transformation</div> +The RISC-V priv. spec. suggests that the instruction word written to <code>mtinst</code> by the hardware should be "transformed". +However, the NEORV32 <code>mtinst</code> CSR uses a simplified transformation scheme: if the trap-causing instruction is a +standard 32-bit instruction, <code>mtinst</code> contains the exact instruction word that caused the trap. If the trap-causing +instruction is a compressed instruction, <code>mtinst</code> contains the de-compressed 32-bit equivalent with bit 1 being cleared +while all remaining bits represent the pre-decoded 32-bit instruction equivalent. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_machine_configuration_csrs">3.8.4. Machine Configuration CSRs</h4> +<h5 id="_menvcfg" class="discrete"><strong><code>menvcfg</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine environment configuration register - low word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x30a</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>U</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Currently, the features of this CSR are not supported. Hence, the entire register is hardwired to all-zero.</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_menvcfgh" class="discrete"><strong><code>menvcfgh</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine environment configuration register - high word</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x31a</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>U</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Currently, the features of this CSR are not supported. Hence, the entire register is hardwired to all-zero.</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_machine_physical_memory_protection_csrs">3.8.5. Machine Physical Memory Protection CSRs</h4> +<div class="paragraph"> +<p>The physical memory protection system is configured via the <code>PMP_NUM_REGIONS</code> and <code>PMP_MIN_GRANULARITY</code> top entity +generics. <code>PMP_NUM_REGIONS</code> defines the total number of implemented regions. Note that the maximum number of regions +is constrained to 16. If trying to access a PMP-related CSR beyond <code>PMP_NUM_REGIONS</code> <strong>no illegal instruction exception</strong> +is triggered. The according CSRs are read-only (writes are ignored) and always return zero. +See section <a href="#_smpmp_isa_extension"><code>Smpmp</code> ISA Extension</a> for more information.</p> +</div> +<h5 id="_pmpcfg" class="discrete"><strong><code>pmpcfg</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Physical memory protection region configuration registers</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3a0</code> (<code>pmpcfg0</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3a1</code> (<code>pmpcfg1</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3a2</code> (<code>pmpcfg2</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3a3</code> (<code>pmpcfg3</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Smpmp</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration of physical memory protection regions. Each region provides an individual 8-bit array in these CSRs.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 82. <code>pmpcfg*</code> CSR Bits</caption> +<colgroup> +<col style="width: 6.6666%;"> +<col style="width: 13.3333%;"> +<col style="width: 6.6666%;"> +<col style="width: 73.3335%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Function</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>PMPCFG_R</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>R</strong>: Read permission</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>PMPCFG_W</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>W</strong>: Write permission</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>PMPCFG_X</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>X</strong>: Execute permission</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">4:3</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>PMPCFG_A_MSB</code> : <code>PMPCFG_A_LSB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>A</strong>: Mode configuration (<code>00</code> = OFF, <code>01</code> = TOR, <code>10</code> = NA4, <code>11</code> = NAPOT)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">7</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>PMPCFG_L</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>L</strong>: Lock bit, prevents further write accesses, also enforces access rights in machine-mode, can only be cleared by CPU reset</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Implemented Modes</div> +In order to reduce the CPU size certain PMP modes (<code>A</code> bits) can be excluded from synthesis. +Use the <code>PMP_TOR_MODE_EN</code> and <code>PMP_NAP_MODE_EN</code> <a href="#_processor_top_entity_generics">Processor Top Entity - Generics</a> to control +implementation of the according modes. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_pmpaddr" class="discrete"><strong><code>pmpaddr</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Physical memory protection region address registers</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3b0</code> (<code>pmpaddr1</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3b1</code> (<code>pmpaddr2</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3b2</code> (<code>pmpaddr3</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3b3</code> (<code>pmpaddr4</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3b4</code> (<code>pmpaddr5</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3b5</code> (<code>pmpaddr6</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3b6</code> (<code>pmpaddr6</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3b7</code> (<code>pmpaddr7</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3b8</code> (<code>pmpaddr8</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3b9</code> (<code>pmpaddr9</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3ba</code> (<code>pmpaddr10</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3bb</code> (<code>pmpaddr11</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3bc</code> (<code>pmpaddr12</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3bd</code> (<code>pmpaddr13</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3be</code> (<code>pmpaddr14</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x3bf</code> (<code>pmpaddr15</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Smpmp</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Region address/boundaries configuration.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 83. <code>pmpaddr*</code> CSR Bits</caption> +<colgroup> +<col style="width: 6.6666%;"> +<col style="width: 13.3333%;"> +<col style="width: 6.6666%;"> +<col style="width: 73.3335%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-center valign-top">Description</th> +<th class="tableblock halign-left valign-top">31:30</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">r-w</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">address bits <code>33 downto 32</code>´, hardwired to zero</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">29:0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">r/w</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_custom_functions_unit_cfu_csrs">3.8.6. Custom Functions Unit (CFU) CSRs</h4> +<h5 id="_cfureg" class="discrete"><strong><code>cfureg</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Custom (user-defined) CFU CSRs</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x800</code> (<code>cfureg0</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x801</code> (<code>cfureg1</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x802</code> (<code>cfureg2</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x803</code> (<code>cfureg3</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Zxcfu</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">User-defined CSRs to be used within the <a href="#_custom_functions_unit_cfu">Custom Functions Unit (CFU)</a>.</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_machine_counter_and_timer_csrs">3.8.7. (Machine) Counter and Timer CSRs</h4> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title"><code>time[h]</code> CSRs (Wall Clock Time)</div> +The NEORV32 does not implement the user-mode <code>time[h]</code> registers. Any access to these registers will trap. +It is recommended that the trap handler software provides a means of accessing the machine timer oft the +<a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Instruction Retired Counter Increment</div> +The <code>[m]instret[h]</code> counter always increments when a instruction enters the pipeline&#8217;s execute stage no matter +if this instruction is actually going to retire or if it causes an exception. +</td> +</tr> +</table> +</div> +<h5 id="_cycleh" class="discrete"><strong><code>cycle[h]</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Cycle counter</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xc00</code> (<code>cycle</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xc80</code> (<code>cycleh</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Zicntr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>cycle[h]</code> CSRs are user-mode shadow copies of the according <a href="#_mcycleh"><strong><code>mcycle[h]</code></strong></a> CSRs. The user-mode +counter are read-only. Any write access will raise an illegal instruction exception.</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_instreth" class="discrete"><strong><code>instret[h]</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Instructions-retired counter</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xc02</code> (<code>instret</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xc82</code> (<code>instreth</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Zicntr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>instret[h]</code> CSRs are user-mode shadow copies of the according <a href="#_minstreth"><strong><code>minstret[h]</code></strong></a> CSRs. The user-mode +counter are read-only. Any write access will raise an illegal instruction exception.</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mcycleh" class="discrete"><strong><code>mcycle[h]</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine cycle counter</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb00</code> (<code>mcycle</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb80</code> (<code>mcycleh</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Zicntr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">If not halted via the <a href="#_mcountinhibit"><strong><code>mcountinhibit</code></strong></a> CSR the <code>cycle[h]</code> CSRs will increment with every active CPU clock +cycle (CPU not in sleep mode). These registers are read/write only for machine-mode software.</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_minstreth" class="discrete"><strong><code>minstret[h]</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine instructions-retired counter</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb02</code> (<code>minstret</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb82</code> (<code>minstreth</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Zicntr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">If not halted via the <a href="#_mcountinhibit"><strong><code>mcountinhibit</code></strong></a> CSR the <code>minstret[h]</code> CSRs will increment with every retired instruction. +These registers are read/write only for machine-mode software</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Instruction Retiring</div> +Note that <strong>all</strong> executed instruction do increment the <code>[m]instret</code>[h] counters even if they do not retire +(e.g. if the instruction causes an exception). +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_hardware_performance_monitors_hpm_csrs">3.8.8. Hardware Performance Monitors (HPM) CSRs</h4> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Machine-Mode HPMs Only</div> +Note that only the machine-mode hardware performance counter CSR are available (<code>mhpmcounter*[h]</code>). +Accessing any user-mode HPM CSR (<code>hpmcounter*[h]</code>) will raise an illegal instruction exception. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The actual number of implemented hardware performance monitors is configured via the <code>HPM_NUM_CNTS</code> top entity generic, +Note that always all 13 HPM counter and configuration registers (<code>mhpmcounter*[h]</code>) are implemented, but +only the actually configured ones are implemented as "real" physical registers - the remaining ones will be hardwired to zero. +If trying to access an HPM-related CSR beyond <code>HPM_NUM_CNTS</code> <strong>no illegal instruction exception is +triggered</strong>. These CSRs are read-only, writes are ignored and reads always return zero.</p> +</div> +<div class="paragraph"> +<p>The total counter width of the HPMs can be configured before synthesis via the <code>HPM_CNT_WIDTH</code> generic (0..64-bit). +If <code>HPM_NUM_CNTS</code> is less than 64, all remaining MSB-aligned bits are hardwired to zero.</p> +</div> +<h5 id="_mhpmevent" class="discrete"><strong><code>mhpmevent</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine hardware performance monitor event select</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x233</code> (<code>mhpmevent3</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x234</code> (<code>mhpmevent4</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x235</code> (<code>mhpmevent5</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x236</code> (<code>mhpmevent6</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x237</code> (<code>mhpmevent7</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x238</code> (<code>mhpmevent8</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x239</code> (<code>mhpmevent9</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x23a</code> (<code>mhpmevent10</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x23b</code> (<code>mhpmevent11</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x23c</code> (<code>mhpmevent12</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x23d</code> (<code>mhpmevent13</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x23e</code> (<code>mhpmevent14</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x23f</code> (<code>mhpmevent15</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Zihpm</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The value in these CSRs define the architectural events that cause an increment of the according <code>mhpmcounter*[h]</code> counter(s). +All available events are listed in the table below. If more than one event is selected, the according counter will increment if <em>any</em> of +the enabled events is observed (logical OR). Note that the counter will only increment by 1 step per clock +cycle even if more than one trigger event is observed.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 84. <code>mhpmevent*</code> CSR Bits</caption> +<colgroup> +<col style="width: 7.1428%;"> +<col style="width: 21.4285%;"> +<col style="width: 7.1428%;"> +<col style="width: 64.2859%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Event Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>RISC-V-compatible</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>HPMCNT_EVENT_CY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">active clock cycle (CPU not in <a href="#_sleep_mode">Sleep Mode</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>HPMCNT_EVENT_TM</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>not implemented</em>, hardwired to zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>HPMCNT_EVENT_IR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">any executed instruction (16-bit/compressed or 32-bit/uncompressed)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock"><strong>NEORV32-specific</strong></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">3</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>HPMCNT_EVENT_COMPR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">any executed 16-bit/compressed (<a href="#_c_isa_extension"><code>C</code> ISA Extension</a>) instruction</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>HPMCNT_EVENT_WAIT_DIS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">instruction dispatch wait cycle (wait for instruction prefetch-buffer refill (<a href="#_cpu_control_unit">CPU Control Unit</a> IPB); +caused by a fence instruction, a control flow transfer or a instruction fetch bus wait cycle)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">5</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>HPMCNT_EVENT_WAIT_ALU</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">any delay/wait cycle caused by a <em>multi-cycle</em> <a href="#_cpu_arithmetic_logic_unit">CPU Arithmetic Logic Unit</a> operation</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">6</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>HPMCNT_EVENT_BRANCH</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">any executed branch instruction (unconditional, conditional-taken or conditional-not-taken)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">7</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>HPMCNT_EVENT_BRANCHED</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">any control transfer operation (unconditional jump, taken conditional branch or trap entry/exit)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>HPMCNT_EVENT_LOAD</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">any executed load operation (including atomic memory operations, <a href="#_zalrsc_isa_extension"><code>Zalrsc</code> ISA Extension</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">9</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>HPMCNT_EVENT_STORE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">any executed store operation (including atomic memory operations, <a href="#_zalrsc_isa_extension"><code>Zalrsc</code> ISA Extension</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">10</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>HPMCNT_EVENT_WAIT_LSU</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">any memory/bus/cache/etc. delay/wait cycle while executing any load or store operation (caused by a data bus wait cycle))</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">11</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>HPMCNT_EVENT_TRAP</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">starting processing of any trap (<a href="#_traps_exceptions_and_interrupts">Traps, Exceptions and Interrupts</a>)</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Instruction Retiring ("Retired == Executed")</div> +The CPU HPM/counter logic treats all executed instruction as "retired" even if they raise an exception, +cause an interrupt, trigger a privilege mode change or were not meant to retire (i.e. claimed by the RISC-V spec.). +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mhpmcounterh" class="discrete"><strong><code>mhpmcounter[h]</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine hardware performance monitor (HPM) counter</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb03</code>, <code>0xb83</code> (<code>mhpmcounter3</code>, <code>mhpmcounter3h</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb04</code>, <code>0xb84</code> (<code>mhpmcounter4</code>, <code>mhpmcounter4h</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb05</code>, <code>0xb85</code> (<code>mhpmcounter5</code>, <code>mhpmcounter5h</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb06</code>, <code>0xb86</code> (<code>mhpmcounter6</code>, <code>mhpmcounter6h</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb07</code>, <code>0xb87</code> (<code>mhpmcounter7</code>, <code>mhpmcounter7h</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb08</code>, <code>0xb88</code> (<code>mhpmcounter8</code>, <code>mhpmcounter8h</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb09</code>, <code>0xb89</code> (<code>mhpmcounter9</code>, <code>mhpmcounter9h</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb0a</code>, <code>0xb8a</code> (<code>mhpmcounter10</code>, <code>mhpmcounter10h</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb0b</code>, <code>0xb8b</code> (<code>mhpmcounter11</code>, <code>mhpmcounter11h</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb0c</code>, <code>0xb8c</code> (<code>mhpmcounter12</code>, <code>mhpmcounter12h</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb0d</code>, <code>0xb8d</code> (<code>mhpmcounter13</code>, <code>mhpmcounter13h</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb0e</code>, <code>0xb8e</code> (<code>mhpmcounter14</code>, <code>mhpmcounter14h</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xb0f</code>, <code>0xb8f</code> (<code>mhpmcounter15</code>, <code>mhpmcounter15h</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Zihpm</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">If not halted via the <a href="#_mcountinhibit"><strong><code>mcountinhibit</code></strong></a> CSR the HPM counter CSR(s) increment whenever the +configured event from the according <a href="#_mhpmevent"><strong><code>mhpmevent</code></strong></a> CSR occurs. The counter registers are read/write for machine mode +and are not accessible for lower-privileged software.</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_machine_counter_setup_csrs">3.8.9. Machine Counter Setup CSRs</h4> +<h5 id="_mcountinhibit" class="discrete"><strong><code>mcountinhibit</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine counter-inhibit register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x320</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set bit to halt the according counter CSR.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 85. <code>mcountinhibit</code> CSR Bits</caption> +<colgroup> +<col style="width: 7.1428%;"> +<col style="width: 21.4285%;"> +<col style="width: 7.1428%;"> +<col style="width: 64.2859%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MCOUNTINHIBIT_IR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>IR</strong>: Set to <code>1</code> to halt <code>[m]instret[h]</code>; hardwired to zero if <code>Zicntr</code> ISA extension is disabled</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>TM</strong>: Hardwired to zero as <code>time[h]</code> CSRs are not implemented</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MCOUNTINHIBIT_CY</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CY</strong>: Set to <code>1</code> to halt <code>[m]cycle[h]</code>; hardwired to zero if <code>Zicntr</code> ISA extension is disabled</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">15:3</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MCOUNTINHIBIT_HPM3</code> : <code>CSR_MCOUNTINHIBIT_HPM15</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>HPMx</strong>: Set to <code>1</code> to halt <code>[m]hpmcount*[h]</code>; hardwired to zero if <code>Zihpm</code> ISA extension is disabled</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_machine_information_csrs">3.8.10. Machine Information CSRs</h4> +<h5 id="_mvendorid" class="discrete"><strong><code>mvendorid</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine vendor ID</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xf11</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DEFINED</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Vendor ID (JEDEC identifier, lowest 11 bits), assigned via the <code>JEDEC_ID</code> top generic (<a href="#_processor_top_entity_generics">Processor Top Entity - Generics</a>).</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_marchid" class="discrete"><strong><code>marchid</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine architecture ID</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xf12</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000013</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>marchid</code> CSR is read-only and provides the NEORV32 official RISC-V open-source architecture ID +(decimal: 19, 32-bit hexadecimal: 0x00000013).</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mimpid" class="discrete"><strong><code>mimpid</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine implementation ID</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xf13</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DEFINED</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>mimpid</code> CSR is read-only and provides the version of the +NEORV32 as BCD-coded number (example: <code>mimpid = 0x01020312</code> → 01.02.03.12 → version 1.2.3.12).</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mhartid" class="discrete"><strong><code>mhartid</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine hardware thread ID</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xf14</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DEFINED</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>mhartid</code> CSR is read-only and provides the core&#8217;s hart ID which is hardwired to zero.</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p><br></p> +</div> +<h5 id="_mconfigptr" class="discrete"><strong><code>mconfigptr</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine configuration pointer register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xf15</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The features of this CSR are not implemented yet. The register is read-only and always returns zero.</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect3"> +<h4 id="_neorv32_specific_csrs">3.8.11. NEORV32-Specific CSRs</h4> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +All NEORV32-specific CSRs are mapped to addresses that are explicitly reserved for custom <strong>Machine-Mode, read-only</strong> CSRs +(assured by the RISC-V privileged specifications). Hence, these CSRs can only be accessed when in machine-mode. Any access +outside of machine-mode will raise an illegal instruction exception. +</td> +</tr> +</table> +</div> +<h5 id="_mxisa" class="discrete"><strong><code>mxisa</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Machine extended ISA and extensions register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0xfc0</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DEFINED</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>X</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>mxisa</code> CSRs is a NEORV32-specific read-only CSR that helps machine-mode software to +discover ISA sub-extensions and CPU configuration options</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 86. <code>mxisa</code> CSR Bits</caption> +<colgroup> +<col style="width: 10%;"> +<col style="width: 30%;"> +<col style="width: 10%;"> +<col style="width: 50%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [C]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZICSR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zicsr_isa_extension"><code>Zicsr</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZIFENCEI</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zifencei_isa_extension"><code>Zifencei</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZMMUL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zmmul_isa_extension"><code>Zmmul</code> - ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">3</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZXCFU</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zxcfu_isa_extension"><code>Zxcfu</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZKT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zkt_isa_extension"><code>Zkt</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">5</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZFINX</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zfinx_isa_extension"><code>Zfinx</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">6</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZICOND</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zicond_isa_extension"><code>Zicond</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">7</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZICNTR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zicntr_isa_extension"><code>Zicntr</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_SMPMP</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_smpmp_isa_extension"><code>Smpmp</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">9</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZIHPM</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zihpm_isa_extension"><code>Zihpm</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">10</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_SDEXT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_sdext_isa_extension"><code>Sdext</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">11</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_SDTRIG</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_sdtrig_isa_extension"><code>Sdtrig</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">12</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZBKX</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zbkx_isa_extension"><code>Zbkx</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">13</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZKND</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zknd_isa_extension"><code>Zknd</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">14</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZKNE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zkne_isa_extension"><code>Zkne</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">15</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZKNH</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zknh_isa_extension"><code>Zknh</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZBKB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zbkb_isa_extension"><code>Zbkb</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">17</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZBKC</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zbkc_isa_extension"><code>Zbkc</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">18</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZKN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zkn_isa_extension"><code>Zkn</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">19</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZKSH</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zksh_isa_extension"><code>Zksh</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">20</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZKSED</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zksed_isa_extension"><code>Zksed</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">21</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZKS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zks_isa_extension"><code>Zks</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">22</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZBA</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zba_isa_extension"><code>Zba</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">23</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZBB</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zbb_isa_extension"><code>Zbb</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">24</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZBS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zbs_isa_extension"><code>Zbs</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">25</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_ZALRSC</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_zalrsc_isa_extension"><code>Zalrsc</code> ISA Extension</a> available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">28:26</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, hardwired to zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">27</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_CLKGATE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">sleep-mode clock gating implemented when set (<code>CPU_CLOCK_GATING_EN</code>), see &lt;&lt;_cpu_tuning_options&gt;</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">28</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_RFHWRST</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">full hardware reset of register file available when set (<code>CPU_RF_HW_RST_EN</code>), see <a href="#_cpu_tuning_options">CPU Tuning Options</a></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">29</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_FASTMUL</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast multiplication available when set (<code>CPU_FAST_MUL_EN</code>), see &lt;&lt;_cpu_tuning_options&gt;</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">30</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_FASTSHIFT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast shifts available when set (<code>CPU_FAST_SHIFT_EN</code>), see &lt;&lt;_cpu_tuning_options&gt;</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CSR_MXISA_IS_SIM</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if CPU is being <strong>simulated</strong> (⚠️ not guaranteed)</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_traps_exceptions_and_interrupts">3.9. Traps, Exceptions and Interrupts</h3> +<div class="paragraph"> +<p>In this document the following terminology is used (derived from the RISC-V trace specification +available at <a href="https://github.com/riscv-non-isa/riscv-trace-spec" class="bare">https://github.com/riscv-non-isa/riscv-trace-spec</a>):</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><strong>exception</strong>: an unusual condition occurring at run time associated (i.e. <em>synchronous</em>) with an instruction in a RISC-V hart</p> +</li> +<li> +<p><strong>interrupt</strong>: an external <em>asynchronous</em> event that may cause a RISC-V hart to experience an unexpected transfer of control</p> +</li> +<li> +<p><strong>trap</strong>: the transfer of control to a trap handler caused by either an <em>exception</em> or an <em>interrupt</em></p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>Whenever an exception or interrupt is triggered, the CPU switches to machine-mode (if not already in machine-mode) +and continues operation at the address being stored in the <a href="#_mtvec"><strong><code>mtvec</code></strong></a> CSR. The cause of the the trap can be determined via the +<a href="#_mcause"><strong><code>mcause</code></strong></a> CSR. A list of all implemented <code>mcause</code> values and the according description can be found below in section +<a href="#_neorv32_trap_listing">NEORV32 Trap Listing</a>. The address that reflects the current program counter when a trap was taken is stored to +<a href="#_mepc"><strong><code>mepc</code></strong></a> CSR. Additional information regarding the cause of the trap can be retrieved from the <a href="#_mtval"><strong><code>mtval</code></strong></a> and <a href="#_mtinst"><strong><code>mtinst</code></strong></a> CSRs.</p> +</div> +<div class="paragraph"> +<p>The traps are prioritized. If several <em>exceptions</em> occur at once only the one with highest priority is triggered +while all remaining exceptions are ignored and discarded. If several <em>interrupts</em> trigger at once, the one with highest priority +is serviced first while the remaining ones stay <em>pending</em>. After completing the interrupt handler the interrupt with +the second highest priority will get serviced and so on until no further interrupts are pending.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Interrupts when in User-Mode</div> +If the core is currently operating in less privileged user-mode, interrupts are globally enabled +even if <a href="#_mstatus"><strong><code>mstatus</code></strong></a>.mie is cleared. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Interrupt Signal Requirements - Standard RISC-V Interrupts</div> +All interrupt request signals are <strong>high-active</strong>. Once triggered, a interrupt request line should stay high +until it is explicitly acknowledged by a source-specific mechanism (for example by writing to a specific memory-mapped register). +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Instruction Atomicity and Forward-Progress</div> +All instructions execute as atomic operations - interrupts can only trigger <em>between</em> consecutive instructions. +Additionally, if there is a permanent interrupt request, exactly one instruction from the interrupted program will be executed before +another interrupt handler can start. This allows program progress even if there are permanent interrupt requests. +</td> +</tr> +</table> +</div> +<div class="sect3"> +<h4 id="_memory_access_exceptions">3.9.1. Memory Access Exceptions</h4> +<div class="paragraph"> +<p>If a load operation causes any exception, the instruction&#8217;s destination register is <strong>not written</strong> at all. Furthermore, +exceptions caused by a misaligned memory address a physical memory protection fault do not trigger a memory access request at all.</p> +</div> +<div class="paragraph"> +<p>For 32-bit-only instructions (= no <code>C</code> extension) the misaligned instruction exception is raised if bit 1 of the fetch +address is set (i.e. not on a 32-bit boundary). If the <code>C</code> extension is implemented there will <strong>never</strong> be a misaligned +instruction exception at all.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_custom_fast_interrupt_request_lines">3.9.2. Custom Fast Interrupt Request Lines</h4> +<div class="paragraph"> +<p>As a custom extension, the NEORV32 CPU features 16 fast interrupt request (FIRQ) lines via the <code>firq_i</code> CPU top +entity signals. These interrupts have custom configuration and status flags in the <a href="#_mie"><strong><code>mie</code></strong></a> and <a href="#_mip"><strong><code>mip</code></strong></a> CSRs and also +provide custom trap codes in <a href="#_mcause"><strong><code>mcause</code></strong></a>. These FIRQs are reserved for NEORV32 processor-internal usage only.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_neorv32_trap_listing">3.9.3. NEORV32 Trap Listing</h4> +<div class="paragraph"> +<p>The following tables show all traps that are currently supported by the NEORV32 CPU. It also shows the prioritization +and the CSR side-effects.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">FIRQ Mapping</div> +See section <a href="#_neorv32_specific_fast_interrupt_requests">NEORV32-Specific Fast Interrupt Requests</a> for the mapping of the FIRQ channels to the according hardware modules. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Table Annotations</strong></p> +</div> +<div class="paragraph"> +<p>The "Prio." column shows the priority of each trap with the highest priority being 1. The "RTE Trap ID" aliases are +defined by the NEORV32 core library (the runtime environment <em>RTE</em>) and can be used in plain C code when interacting +with the pre-defined RTE function. The <a href="#_mcause"><strong><code>mcause</code></strong></a>, <a href="#_mepc"><strong><code>mepc</code></strong></a>, <a href="#_mtval"><strong><code>mtval</code></strong></a> and <a href="#_mtinst"><strong><code>mtinst</code></strong></a> columns show the value being +written to the according CSRs when a trap is triggered:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><strong>I-PC</strong> - address of intercepted instruction (instruction has <em>not</em> been executed yet)</p> +</li> +<li> +<p><strong>PC</strong> - address of instruction that caused the trap (instruction has been executed)</p> +</li> +<li> +<p><strong>ADR</strong> - bad data memory access address that caused the trap</p> +</li> +<li> +<p><strong>INS</strong> - the transformed/decompressed instruction word that caused the trap</p> +</li> +<li> +<p><strong>0</strong> - zero</p> +</li> +</ul> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 87. NEORV32 Trap Listing</caption> +<colgroup> +<col style="width: 3.4482%;"> +<col style="width: 13.7931%;"> +<col style="width: 27.5862%;"> +<col style="width: 34.4827%;"> +<col style="width: 6.8965%;"> +<col style="width: 6.8965%;"> +<col style="width: 6.8968%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Prio.</th> +<th class="tableblock halign-left valign-top"><code>mcause</code></th> +<th class="tableblock halign-left valign-top">RTE Trap ID</th> +<th class="tableblock halign-left valign-top">Cause</th> +<th class="tableblock halign-left valign-top"><code>mepc</code></th> +<th class="tableblock halign-left valign-top"><code>mtval</code></th> +<th class="tableblock halign-left valign-top"><code>mtinst</code></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top" colspan="7"><p class="tableblock"><strong>Exceptions</strong> (<em>synchronous</em> to instruction execution)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000001</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_I_ACCESS</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">instruction access fault</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">INS</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000002</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_I_ILLEGAL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">illegal instruction</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">INS</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_I_MISALIGNED</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">instruction address misaligned</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">INS</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x0000000b</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_MENV_CALL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">environment call from M-mode</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">INS</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000008</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_UENV_CALL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">environment call from U-mode</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">INS</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000003</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_BREAKPOINT</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">software breakpoint / trigger firing</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">INS</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">7</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000006</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_S_MISALIGNED</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">store address misaligned</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">ADR</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">INS</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000004</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_L_MISALIGNED</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">load address misaligned</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">ADR</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">INS</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">9</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000007</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_S_ACCESS</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">store access fault</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">ADR</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">INS</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">10</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000005</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_L_ACCESS</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">load access fault</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">ADR</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">INS</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="7"><p class="tableblock"><strong>Interrupts</strong> (<em>asynchronous</em> to instruction execution)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">11</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x80000010</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_0</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">12</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x80000011</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_1</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">13</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x80000012</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_2</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 2</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">14</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x80000013</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_3</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 3</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">15</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x80000014</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_4</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 4</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">16</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x80000015</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_5</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 5</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">17</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x80000016</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_6</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 6</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">18</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x80000017</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_7</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 7</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">19</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x80000018</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_8</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 8</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">20</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x80000019</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_9</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 9</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">21</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x8000001a</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_10</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 10</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">22</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x8000001b</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_11</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 11</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">23</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x8000001c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_12</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 12</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">24</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x8000001d</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_13</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 13</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">25</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x8000001e</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_14</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 14</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">26</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x8000001f</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_15</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fast interrupt request channel 15</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">27</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x8000000b</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_MEI</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">machine external interrupt (MEI)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">28</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x80000003</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_MSI</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">machine software interrupt (MSI)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">29</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x80000007</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_MTI</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">machine timer interrupt (MTI)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">I-PC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 88. NEORV32 Trap Description</caption> +<colgroup> +<col style="width: 30%;"> +<col style="width: 70%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Trap ID [C]</th> +<th class="tableblock halign-left valign-top">Triggered when &#8230;&#8203;</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_I_ACCESS</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">bus timeout, bus access error or <a href="#_smpmp_isa_extension">PMP</a> rule violation during instruction fetch</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_I_ILLEGAL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">trying to execute an invalid instruction word (malformed or not supported) or on a privilege violation</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_I_MISALIGNED</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">fetching a 32-bit instruction word that is not 32-bit-aligned (see note below)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_MENV_CALL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">executing <code>ecall</code> instruction in machine-mode</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_UENV_CALL</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">executing <code>ecall</code> instruction in user-mode</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_BREAKPOINT</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">executing <code>ebreak</code> instruction or if <a href="#_trigger_module">Trigger Module</a> fires</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_S_MISALIGNED</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">storing data to an address that is not naturally aligned to the data size (half/word)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_L_MISALIGNED</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">loading data from an address that is not naturally aligned to the data size (half/word)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_L_ACCESS</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">bus timeout, bus access error or <a href="#_smpmp_isa_extension">PMP</a> rule violation during load data operation</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_S_ACCESS</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">bus timeout, bus access error or <a href="#_smpmp_isa_extension">PMP</a> rule violation during store data operation</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_FIRQ_*</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">caused by interrupt-condition of <strong>processor-internal modules</strong>, see <a href="#_neorv32_specific_fast_interrupt_requests">NEORV32-Specific Fast Interrupt Requests</a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_MEI</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">machine external interrupt (via dedicated <a href="#_processor_top_entity_signals">Processor Top Entity - Signals</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_MSI</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">machine software interrupt (internal <a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a> or via dedicated <a href="#_processor_top_entity_signals">Processor Top Entity - Signals</a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TRAP_CODE_MTI</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">machine timer interrupt (internal <a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a> or via dedicated <a href="#_processor_top_entity_signals">Processor Top Entity - Signals</a>)</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +<div class="title">Resumable Exceptions</div> +Note that not all exceptions are resumable. For example, the "instruction access fault" exception or the "instruction +address misaligned" exception are not resumable in most cases. These exception might indicate a fatal memory hardware failure. +</td> +</tr> +</table> +</div> +</div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_software_framework">4. Software Framework</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The NEORV32 project comes with a complete software ecosystem called the "software framework" which +is based on the C-language RISC-V GCC port and consists of the following parts:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><a href="#_compiler_toolchain">Compiler Toolchain</a></p> +</li> +<li> +<p><a href="#_core_libraries">Core Libraries</a></p> +</li> +<li> +<p><a href="#_system_view_description_file_svd">System View Description File (SVD)</a></p> +</li> +<li> +<p><a href="#_application_makefile">Application Makefile</a></p> +</li> +<li> +<p><a href="#_default_compiler_flags">Default Compiler Flags</a></p> +</li> +<li> +<p><a href="#_linker_script">Linker Script</a></p> +</li> +<li> +<p><a href="#_c_standard_library">C Standard Library</a></p> +</li> +<li> +<p><a href="#_start_up_code_crt0">Start-Up Code (crt0)</a></p> +</li> +<li> +<p><a href="#_executable_image_formats">Executable Image Formats</a></p> +</li> +<li> +<p><a href="#_neorv32_runtime_environment">NEORV32 Runtime Environment</a></p> +</li> +<li> +<p><a href="#_bootloader">Bootloader</a></p> +</li> +</ul> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Software Documentation</div> +All core libraries and example programs are documented "in-code" using <strong>Doxygen</strong>. +The documentation is automatically built and deployed to GitHub pages and is available online +at <a href="https://stnolting.github.io/neorv32/sw/files.html" class="bare">https://stnolting.github.io/neorv32/sw/files.html</a>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Example Programs</div> +A collection of annotated example programs illustrating how to use certain CPU functions +and peripheral/IO modules can be found in <code>sw/example</code>. +</td> +</tr> +</table> +</div> +<div class="sect2"> +<h3 id="_compiler_toolchain">4.1. Compiler Toolchain</h3> +<div class="paragraph"> +<p>The toolchain for this project is based on the free and open RISC-V GCC-port. You can find the compiler sources and +build instructions in the official RISC-V GNU toolchain GitHub repository: <a href="https://github.com/riscv/riscv-gnutoolchain" class="bare">https://github.com/riscv/riscv-gnutoolchain</a>.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Toolchain Installation</div> +More information regarding the toolchain (building from scratch or downloading prebuilt ones) can be found in the +user guide section <a href="https://stnolting.github.io/neorv32/ug/#_software_toolchain_setup">Software Toolchain Setup</a>. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_core_libraries">4.2. Core Libraries</h3> +<div class="paragraph"> +<p>The NEORV32 project provides a set of pre-defined C libraries that allow an easy integration of the processor/CPU features +(also called "HAL" - <em>hardware abstraction layer</em>). All driver and runtime-related files are located in +<code>sw/lib</code>. These library files are automatically included and linked by adding the following include statement:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">#include &lt;neorv32.h&gt; // NEORV32 HAL, core and runtime libraries</code></pre> +</div> +</div> +<div class="paragraph"> +<p>The NEORV32 HAL consists of the following files.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 89. NEORV32 Hardware Abstraction Layer File List</caption> +<colgroup> +<col style="width: 25%;"> +<col style="width: 25%;"> +<col style="width: 50%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">C source file</th> +<th class="tableblock halign-left valign-top">C header file</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Main NEORV32 library file</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_aux.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_aux.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">General auxiliary/helper function</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_cfs.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_cfs.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_custom_functions_subsystem_cfs">Custom Functions Subsystem (CFS)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_crc.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_crc.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_cyclic_redundancy_check_crc">Cyclic Redundancy Check (CRC)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_cpu.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_cpu.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_neorv32_central_processing_unit_cpu">NEORV32 Central Processing Unit (CPU)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_cpu_amo.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_cpu_amo.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Emulation functions for the read-modify-write <a href="#_zalrsc_isa_extension"><code>Zalrsc</code> ISA Extension</a> / <code>A</code> instructions</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_cpu_csr.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_control_and_status_registers_csrs">Control and Status Registers (CSRs)</a> definitions</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_cpu_cfu.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_cpu_cfu.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_custom_functions_unit_cfu">Custom Functions Unit (CFU)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_dma.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_dma.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_direct_memory_access_controller_dma">Direct Memory Access Controller (DMA)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_gpio.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_gpio.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_general_purpose_input_and_output_port_gpio">General Purpose Input and Output Port (GPIO)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_gptmr.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_gptmr.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_general_purpose_timer_gptmr">General Purpose Timer (GPTMR)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_intrinsics.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Macros for intrinsics and custom instructions</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_legacy.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Legacy compatibility layer / wrappers (<strong>do not use for new designs</strong>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_clint.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_clint.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_neoled.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_neoled.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_smart_led_interface_neoled">Smart LED Interface (NEOLED)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_onewire.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_onewire.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_one_wire_serial_interface_controller_onewire">One-Wire Serial Interface Controller (ONEWIRE)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_pwm.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_pwm.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_pulse_width_modulation_controller_pwm">Pulse-Width Modulation Controller (PWM)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_rte.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_rte.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_neorv32_runtime_environment">NEORV32 Runtime Environment</a></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_sdi.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_sdi.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_serial_data_interface_controller_sdi">Serial Data Interface Controller (SDI)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_slink.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_slink.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_stream_link_interface_slink">Stream Link Interface (SLINK)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_spi.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_spi.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_serial_peripheral_interface_controller_spi">Serial Peripheral Interface Controller (SPI)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_sysinfo.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_sysinfo.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_system_configuration_information_memory_sysinfo">System Configuration Information Memory (SYSINFO)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_trng.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_trng.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_true_random_number_generator_trng">True Random-Number Generator (TRNG)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_twi.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_twi.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_two_wire_serial_interface_controller_twi">Two-Wire Serial Interface Controller (TWI)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_uart.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_uart.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_primary_universal_asynchronous_receiver_and_transmitter_uart0">Primary Universal Asynchronous Receiver and Transmitter (UART0)</a> and UART1 HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_wdt.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_wdt.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_watchdog_timer_wdt">Watchdog Timer (WDT)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_xip.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_xip.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_execute_in_place_module_xip">Execute In Place Module (XIP)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_xirq.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_xirq.h</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_external_interrupt_controller_xirq">External Interrupt Controller (XIRQ)</a> HAL</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>neorv32_newlib.c</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Platform-specific system calls for <em>newlib</em></p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Core Library Documentation</div> +The Doxygen-based documentation of the software framework including all core libraries is available online at +<a href="https://stnolting.github.io/neorv32/sw/files.html" class="bare">https://stnolting.github.io/neorv32/sw/files.html</a>. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_system_view_description_file_svd">4.3. System View Description File (SVD)</h3> +<div class="paragraph"> +<p>A CMSIS-SVD-compatible <strong>System View Description (SVD)</strong> file including all peripherals is available in <code>sw/svd</code>.</p> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_application_makefile">4.4. Application Makefile</h3> +<div class="paragraph"> +<p>Application compilation is based on a centralized GNU makefile (<code>sw/common/common.mk</code>). Each software project +(for example the ones in <code>sw/example</code> folder) should provide a local makefile that just includes the central makefile:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-makefile" data-lang="makefile"># Set path to NEORV32 root directory +NEORV32_HOME ?= ../../.. +# Include the main NEORV32 makefile +include $(NEORV32_HOME)/sw/common/common.mk</code></pre> +</div> +</div> +<div class="paragraph"> +<p>Thus, the functionality of the central makefile (including all targets) becomes available for the project. +The project-local makefile should be used to define all setup-relevant configuration options instead of changing the +central makefile to keep the code base clean. Setting variables in the project-local makefile will override the default +configuration. Most example projects already provide a makefile that list all relevant configuration options.</p> +</div> +<div class="paragraph"> +<p>The following example shows all relevant configuration variables:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-makefile" data-lang="makefile"># Override the default CPU ISA +MARCH = rv32imc_zicsr_zifencei + +# Override the default RISC-V GCC prefix +RISCV_PREFIX ?= riscv-none-elf- + +# Override default optimization goal +EFFORT = -Os + +# Add extended debug symbols +USER_FLAGS += -ggdb -gdwarf-3 + +# Additional sources +APP_SRC += $(wildcard ./*.c) +APP_INC += -I . + +# Adjust processor IMEM size +USER_FLAGS += -Wl,--defsym,__neorv32_rom_size=16k + +# Adjust processor DMEM size +USER_FLAGS += -Wl,--defsym,__neorv32_ram_size=8k + +# Adjust maximum heap size +USER_FLAGS += -Wl,--defsym,__neorv32_heap_size=1k + +# Reduce library footprint when no UART is synthesized +#USER_FLAGS += -DUART_DISABLED + +# Enable link-time-optimization +#USER_FLAGS += -flto + +# Additional compiler flags (append to this variable) +#USER_FLAGS += ... + +# Set path to NEORV32 root directory +NEORV32_HOME ?= ../../.. + +# Include the main NEORV32 makefile +include $(NEORV32_HOME)/sw/common/common.mk</code></pre> +</div> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">New Project</div> +When creating a new project, copy an existing project folder or at least the makefile to the new project folder. +It is recommended to create new projects also in <code>sw/example</code> to keep the file dependencies. However, these +dependencies can be manually configured via makefile variables if the new project is located somewhere else. +For more complex projects, it may be useful to use explicit <code>source</code> and <code>include</code> folders. See <code>sw/example/coremark</code> for an example. +</td> +</tr> +</table> +</div> +<div class="sect3"> +<h4 id="_makefile_targets">4.4.1. Makefile Targets</h4> +<div class="paragraph"> +<p>Invoking a project-local makefile (executing <code>make</code> or <code>make help</code>) will show the help menu that lists all +available targets as well as all variable including their <em>current</em> setting.</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-makefile" data-lang="makefile">neorv32/sw/example/hello_world$ make +NEORV32 Software Makefile +Find more information at https://github.com/stnolting/neorv32 + +Targets: + + help - show this text + check - check toolchain + info - show makefile/toolchain configuration + gdb - start GNU debugging session + asm - compile and generate &lt;main.asm&gt; assembly listing file for manual debugging + elf - compile and generate &lt;main.elf&gt; ELF file + exe - compile and generate &lt;neorv32_exe.bin&gt; executable image file for bootloader upload (includes a HEADER!) + bin - compile and generate &lt;neorv32_raw_exe.bin&gt; executable memory image + hex - compile and generate &lt;neorv32_raw_exe.hex&gt; executable memory image + coe - compile and generate &lt;neorv32_raw_exe.coe&gt; executable memory image + mem - compile and generate &lt;neorv32_raw_exe.mem&gt; executable memory image + mif - compile and generate &lt;neorv32_raw_exe.mif&gt; executable memory image + image - compile and generate VHDL IMEM application boot image &lt;neorv32_application_image.vhd&gt; in local folder + install - compile, generate and install VHDL IMEM application boot image &lt;neorv32_application_image.vhd&gt; + sim - in-console simulation using default/simple testbench and GHDL + hdl_lists - regenerate HDL file-lists (*.f) in NEORV32_HOME/rtl + all - exe + install + hex + bin + asm + elf_info - show ELF layout info + elf_sections - show ELF sections + clean - clean up project home folder + clean_all - clean up project home folder and image generator + bl_image - compile and generate VHDL BOOTROM bootloader boot image &lt;neorv32_bootloader_image.vhd&gt; in local folder + bootloader - compile, generate and install VHDL BOOTROM bootloader boot image &lt;neorv32_bootloader_image.vhd&gt; + +Variables: + + USER_FLAGS - Custom toolchain flags [append only]: "-ggdb -gdwarf-3 -Wl,--defsym,__neorv32_rom_size=16k -Wl,--defsym,__neorv32_ram_size=8k" + USER_LIBS - Custom libraries [append only]: "" + EFFORT - Optimization level: "-Os" + MARCH - Machine architecture: "rv32i_zicsr_zifencei" + MABI - Machine binary interface: "ilp32" + APP_INC - C include folder(s) [append only]: "-I ." + APP_SRC - C source folder(s) [append only]: "./main.c " + ASM_INC - ASM include folder(s) [append only]: "-I ." + RISCV_PREFIX - Toolchain prefix: "riscv-none-elf-" + NEORV32_HOME - NEORV32 home folder: "../../.." + GDB_ARGS - GDB (connection) arguments: "-ex target extended-remote localhost:3333" + GHDL_RUN_FLAGS - GHDL simulation run arguments: ""</code></pre> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Build Artifacts</div> +All <em>intermediate</em> build artifacts (like object files and binaries) will be places into a (new) project-local +folder named <code>build</code>. The <em>resulting</em> build artifacts (like executable, the main ELF and all memory +initialization/image files) will be placed in the root project folder. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_default_compiler_flags">4.4.2. Default Compiler Flags</h4> +<div class="paragraph"> +<p>The central makefile uses specific compiler flags to tune the code to the NEORV32 hardware. Hence, these flags should not +be altered. However, experienced users can modify them to further tune compilation.</p> +</div> +<table class="tableblock frame-all grid-none stretch"> +<caption class="title">Table 90. Compiler Options (<code>CC_OPTS</code>)</caption> +<colgroup> +<col style="width: 25%;"> +<col style="width: 75%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-Wall</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable all compiler warnings.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-ffunction-sections</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Put functions in independent sections. This allows a code optimization as dead code can be easily removed.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-fdata-sections</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Put data segment in independent sections. This allows a code optimization as unused data can be easily removed.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-nostartfiles</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Do not use the default start code. Instead, the NEORV32-specific start-up code (<code>sw/common/crt0.S</code>) is used (pulled-in by the linker script).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-mno-fdiv</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Use built-in software functions for floating-point divisions and square roots (since the according instructions are not supported yet).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-mstrict-align</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Unaligned memory accesses cannot be resolved by the hardware and require emulation.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-mbranch-cost=10</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Branching costs a lot of cycles.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-Wl,--gc-sections</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Make the linker perform dead code elimination.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-ffp-contract=off</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Disable floating-point expression contraction.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-g</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Add (simple) debug information.</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Checking Compiler Flags from a Compiled Program</div> +The makefile&#8217;s <code>CC_OPTS</code> is exported as <strong>define</strong> to be available within a C program; for example +<code>neorv32_uart0_printf("%s\n", CC_OPTS);</code>. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-none stretch"> +<caption class="title">Table 91. Linker Libraries (<code>LD_LIBS</code>)</caption> +<colgroup> +<col style="width: 18.1818%;"> +<col style="width: 81.8182%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-lm</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Include/link with <code>math.h</code>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-lc</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Search for the standard C library when linking.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-lgcc</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Make sure we have no unresolved references to internal GCC library subroutines.</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Advanced Debug Symbols</div> +By default, only "simple" symbols are added to the ELF (<code>-g</code>). Extended debug flags (e.g. for Eclipse) can be added +using the <code>USER_FLAGS</code> variable (e.g. <code>USER_FLAGS += -ggdb -gdwarf-3</code>). Note that other debug flags may be required +depending of the GCC/GDB version +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_linker_script">4.5. Linker Script</h3> +<div class="paragraph"> +<p>The NEORV32-specific linker script (<code>sw/common/neorv32.ld</code>) is used to link the compiled sources according to the +processor&#8217;s <a href="#_address_space">Address Space</a>). For the final executable, only two memory segments are required:</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 92. Linker script - Memory Segments</caption> +<colgroup> +<col style="width: 20%;"> +<col style="width: 80%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Memory section</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>rom</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Instruction memory address space (processor-internal <a href="#_instruction_memory_imem">Instruction Memory (IMEM)</a> and/or external memory)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ram</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Data memory address space (processor-internal <a href="#_data_memory_dmem">Data Memory (DMEM)</a> and/or external memory)</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>These two sections are configured by several variables defined in the linker script and exposed to the build +framework (aka the makefile). Those variable allow to customized the RAM/ROM sizes and base addresses. Additionally, +a certain amount of the RAM can be reserved for the software-managed heap (see <a href="#_ram_layout">RAM Layout</a>).</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 93. Linker script - Configuration</caption> +<colgroup> +<col style="width: 20%;"> +<col style="width: 70%;"> +<col style="width: 10%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Memory section</th> +<th class="tableblock halign-left valign-top">Description</th> +<th class="tableblock halign-center valign-top">Default</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>__neorv32_rom_size</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">"ROM" size (instruction memory / IMEM)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">16kB</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>__neorv32_ram_size</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">"RAM" size (data memory / DMEM)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">8kB</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>__neorv32_rom_base</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">"ROM" base address (instruction memory / IMEM)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>__neorv32_ram_base</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">"RAM" base address (data memory / DMEM)</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x80000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>__neorv32_heap_size</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Maximum heap size; part of the "RAM"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">0kB</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>Each variable provides a default value (e.g. "16K" for the instruction memory /ROM /IMEM size). These defaults can +be overridden by setup-specific values to take the user-defined processor configuration into account (e.g. a different IMEM +size). The <code>USER_FLAGS</code> variable provided by the <a href="#_application_makefile">Application Makefile</a> can also be used to customize the memory +configuration. For example, the following line can be added to a project-specific local makefile to adjust the memory +sizes:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 15. Overriding Default Memory Sizes (configuring 64kB IMEM and 32kB DMEM)</div> +<div class="content"> +<pre class="highlight"><code class="language-makefile" data-lang="makefile">USER_FLAGS += "-Wl,--defsym,__neorv32_rom_size=64k -Wl,--defsym,__neorv32_ram_size=32k"</code></pre> +</div> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Memory Configuration Constraints</div> +Memory sizes have to be a multiple of 4 bytes. Memory base addresses have to be 32-bit-aligned. +</td> +</tr> +</table> +</div> +<div class="sect3"> +<h4 id="_ram_layout">4.5.1. RAM Layout</h4> +<div class="paragraph"> +<p>The default NEORV32 linker script uses the defined RAM size to map several sections. +Note that depending on the application some sections might have zero size.</p> +</div> +<div class="imageblock"> +<div class="content"> +<img src="img/ram_layout.png" alt="400"> +</div> +<div class="title">Figure 13. Default RAM Layout</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p><strong>Constant data (<code>.data</code>)</strong>: The constant data section is placed right at the beginning of the RAM. For example, this +section contains <em>explicitly initialized</em> global variables. This section is initialized by the <a href="#_start_up_code_crt0">Start-Up Code (crt0)</a>.</p> +</li> +<li> +<p><strong>Dynamic data (<code>.bss</code>)</strong>: The constant data section is followed by the dynamic data section that contains <em>uninitialized</em> +data like global variables without explicit initialization. This section is cleared by the <a href="#_start_up_code_crt0">Start-Up Code (crt0)</a>.</p> +</li> +<li> +<p><strong>Heap (<code>.heap</code>)</strong>: The heap is used for dynamic memory that is managed by functions like <code>malloc()</code> and <code>free()</code>. +The heap grows upwards. This section is not initialized at all.</p> +</li> +<li> +<p><strong>Stack</strong>: The stack starts at the end of the RAM at the last 16-byte aligned address. According to the RISC-V ABI / calling +convention the stack is 128-bit-aligned before procedure entry. The stack grows downwards.</p> +</li> +</ol> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Heap Size</div> +The maximum size of the heap is defined by the <code>__neorv32_heap_size</code> variable. This variable has to be +<strong>explicitly defined</strong> in order to define a heap size (and to use dynamic memory allocation at all) other than zero. +</td> +</tr> +</table> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +<div class="title">Heap-Stack Collision</div> +Take care when using dynamic memory to avoid collision of the heap and stack memory areas. There is no compile-time +protection mechanism available as the actual heap and stack size are defined by <em>runtime</em> data. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_c_standard_library">4.6. C Standard Library</h3> +<div class="paragraph"> +<p>The default software framework relies on <strong>newlib</strong> as default C standard library. Newlib provides hooks for common +"system calls" (like file handling and standard input/output) that are used by other C libraries like <code>stdio</code>. +These hooks are available in <code>sw/lib/source/newlib.c</code> and were adapted for the NEORV32 processor.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Standard Consoles</div> +The <a href="#_primary_universal_asynchronous_receiver_and_transmitter_uart0">UART0</a> +is used to implement all the standard input, output and error consoles (<code>STDIN</code>, <code>STDOUT</code> and <code>STDERR</code>). +Note that <code>\n</code> (newline) is automatically converted to <code>\r\n</code> (carriage-return and newline). +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Constructors and Destructors</div> +Constructors and destructors for plain C code or for C++ applications are supported by the software framework. +See <code>sw/example/hello_cpp</code> for a minimal example. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Newlib Test/Demo Program</div> +A simple test and demo program that uses some of newlib&#8217;s system functions (like <code>malloc</code>/<code>free</code> and <code>read</code>/<code>write</code>) +is available in <code>sw/example/demo_newlib</code>. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_start_up_code_crt0">4.7. Start-Up Code (crt0)</h3> +<div class="paragraph"> +<p>The CPU and also the processor require a minimal start-up and initialization code to bring the hardware into an +operational state. Furthermore, the C runtime requires an initialization before compiled code can be executed. +This setup is done by the start-up code (<code>sw/common/crt0.S</code>) which is automatically linked with <em>every</em> application +program and gets mapped before the actual application code so it gets executed right after boot.</p> +</div> +<div class="paragraph"> +<p>The <code>crt0.S</code> start-up performs the following operations:</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>Clear <a href="#_mstatus"><strong><code>mstatus</code></strong></a> CSR.</p> +</li> +<li> +<p>Clear <a href="#_mie"><strong><code>mie</code></strong></a> CSR disabling all interrupt sources.</p> +</li> +<li> +<p>Install an <a href="#_early_trap_handler">Early Trap Handler</a> to <a href="#_mtvec"><strong><code>mtvec</code></strong></a> CSR.</p> +</li> +<li> +<p>Initialize the global pointer <code>gp</code> and the stack pointer <code>sp</code> according to the <a href="#_ram_layout">RAM Layout</a> provided by the linker script.</p> +</li> +<li> +<p>Initialize all integer register <code>x1</code> - <code>x31</code> (only <code>x1</code> - <code>x15</code> if the <code>E</code> CPU extension is enabled).</p> +</li> +<li> +<p>Setup <code>.data</code> section to configure initialized variables.</p> +</li> +<li> +<p>Clear the <code>.bss</code> section.</p> +</li> +<li> +<p>Call all <em>constructors</em> (if there are any).</p> +</li> +<li> +<p>Call the application&#8217;s <code>main()</code> function (with no arguments; <code>argc</code> = <code>argv</code> = 0).</p> +</li> +<li> +<p>If <code>main()</code> returns:</p> +<div class="ulist"> +<ul> +<li> +<p>All interrupt sources are disabled by clearing <a href="#_mie"><strong><code>mie</code></strong></a> CSR.</p> +</li> +<li> +<p>The return value of <code>main()</code> is copied to the <a href="#_mscratch"><strong><code>mscratch</code></strong></a> CSR to allow inspection by the debugger.</p> +</li> +<li> +<p>Call all <em>destructors</em> (if there are any).</p> +</li> +<li> +<p>Re-install an <a href="#_early_trap_handler">Early Trap Handler</a> to <a href="#_mtvec"><strong><code>mtvec</code></strong></a> CSR. If any destructor causes an exception the <a href="#_early_trap_handler">Early Trap Handler</a> is used for handling.</p> +</li> +<li> +<p>The CPU enters sleep mode executing the <code>wfi</code> instruction in an endless loop.</p> +</li> +</ul> +</div> +</li> +</ol> +</div> +<div class="sect3"> +<h4 id="_early_trap_handler">4.7.1. Early Trap Handler</h4> +<div class="paragraph"> +<p>The start-up code provides a very basic trap handler for the early boot phase. This handler does nothing but +trying to move on to the next linear instruction whenever an interrupt or synchronous exception is encountered. +This simple trap handler does not interact with the stack at all as it just uses a single register that is backup-ed +using the <a href="#_mscratch"><strong><code>mscratch</code></strong></a> CSR.</p> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_executable_image_formats">4.8. Executable Image Formats</h3> +<div class="paragraph"> +<p>The compiled and linked executable (ELF file) is further processed by the NEORV32 image generator (<code>sw/image_gen</code>) to +generate the final executable file. The image generator can generate several types of executable file formats selected +by a flag when calling the generator. +<strong>Note that all these options are managed by the makefile (see <a href="#_makefile_targets">Makefile Targets</a>).</strong></p> +</div> +<table class="tableblock frame-all grid-none stretch"> +<colgroup> +<col style="width: 20%;"> +<col style="width: 80%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-app_bin</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Generates an executable binary file (including a bootloader header) for upload via the bootloader.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-app_vhd</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Generates an executable VHDL memory initialization image for the processor-internal IMEM.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-bld_vhd</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Generates an executable VHDL memory initialization image for the processor-internal BOOT ROM.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-raw_hex</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Generates a raw 8x ASCII hex-char file for custom purpose.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-raw_bin</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Generates a raw binary file `for custom purpose.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-raw_coe</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Generates a raw COE file for FPGA memory initialization.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-raw_mem</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Generates a raw MEM file for FPGA memory initialization.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-raw_mif</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Generates a raw MIF file for FPGA memory initialization.</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Image Generator Compilation</div> +The sources of the image generator are automatically compiled when invoking the makefile +(requiring a <em>native</em> GCC installation). +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Executable Header</div> +for the <code>app_bin</code> option the image generator adds a small header to the executable. This header is required by the +<a href="#_bootloader">Bootloader</a> to identify and manage the executable. The header consists of three 32-bit words located right +at the beginning of the file. The first word of the executable is the signature word and is always <code>0x4788cafe</code>. +Based on this word the bootloader can identify a valid image file. The next word represents the size in bytes of the +actual program image in bytes. A simple complement checksum of the actual program image is given by the third word. +This provides a simple protection against data transmission or storage errors. +<strong>Note that this executable format cannot be used for <em>direct</em> execution (e.g. via XIP or direct memory access).</strong> +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_bootloader">4.9. Bootloader</h3> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Pre-Built Bootloader Image</div> +This section refers to the <strong>default</strong> NEORV32 bootloader. A pre-compiled memory image for the processor-internal +<a href="#_bootloader_rom_bootrom">Bootloader ROM (BOOTROM)</a> is available in the project&#8217;s rtl folder: <code>rtl/core/neorv32_bootloader_image.vhd</code>. +This image is automatically inserted into the boot ROM when synthesizing the processor with the bootloader being +enabled. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Minimal RISC-V ISA and Memory Configuration</div> +The default bootloader image was compiled for a minimal <code>rv32e_zicsr_zifencei</code> ISA configuration and only requires a +RAM size of at least 256 bytes. Both constraints ensure that the bootloader can be executed by any actual CPU/processor +configuration. However, the bootloader can recompiled with different capabilities. See the User Guide +<a href="https://stnolting.github.io/neorv32/ug/#_customizing_the_internal_bootloader" class="bare">https://stnolting.github.io/neorv32/ug/#_customizing_the_internal_bootloader</a> for more information. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The NEORV32 bootloader (<code>sw/bootloader/bootloader.c</code>) provides an optional built-in firmware that +allows to upload new application executables at <em>any time</em> without the need to re-synthesize the FPGA&#8217;s bitstream. +A UART connection is used to provide a simple text-based user interface that allows to upload executables.</p> +</div> +<div class="paragraph"> +<p>Furthermore, the bootloader provides options to store an executable to a processor-external SPI flash. +An "auto boot" feature can optionally fetch this executable right after reset if there is no user interaction +via UART. This allows to build processor setups with <em>non-volatile application storage</em> while maintaining the option +to update the application software at any timer.</p> +</div> +<div class="sect3"> +<h4 id="_bootloader_soccpu_requirements">4.9.1. Bootloader SoC/CPU Requirements</h4> +<div class="paragraph"> +<p>The bootloader requires certain CPU and SoC extensions and modules to be enabled in order to operate correctly.</p> +</div> +<table class="tableblock frame-all grid-none stretch"> +<colgroup> +<col style="width: 20%;"> +<col style="width: 80%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>REQUIRED</strong></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The <a href="#_boot_configuration">Boot Configuration</a> (<code>BOOT_MODE_SELECT</code> generic) has to be set to "bootloader" mode.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>REQUIRED</strong></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The bootloader requires the privileged architecture CPU extension (<a href="#_zicsr_isa_extension"><code>Zicsr</code> ISA Extension</a>) to be enabled.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>REQUIRED</strong></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">At least 512 bytes of data memory (processor-internal DMEM or processor-external DMEM) are required for the bootloader&#8217;s stack and global variables.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>RECOMMENDED</em></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">For user interaction via the <a href="#_bootloader_console">Bootloader Console</a> (like uploading executables) the primary UART (<a href="#_primary_universal_asynchronous_receiver_and_transmitter_uart0">Primary Universal Asynchronous Receiver and Transmitter (UART0)</a>) is required.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>RECOMMENDED</em></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The default bootloader uses bit 0 of the <a href="#_general_purpose_input_and_output_port_gpio">General Purpose Input and Output Port (GPIO)</a> output port to drive a high-active "heart beat" status LED.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>RECOMMENDED</em></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The machine timer of the <a href="#_core_local_interruptor_clint">Core Local Interruptor (CLINT)</a> is used to control blinking of the status LED and also to automatically trigger the <a href="#_auto_boot_sequence">Auto Boot Sequence</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">OPTIONAL</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The SPI controller (<a href="#_serial_peripheral_interface_controller_spi">Serial Peripheral Interface Controller (SPI)</a>) is needed to store/load executable from external flash using the <a href="#_auto_boot_sequence">Auto Boot Sequence</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">OPTIONAL</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The XIP controller (<a href="#_execute_in_place_module_xip">Execute In Place Module (XIP)</a>) is needed to boot/execute code directly from a pre-programmed SPI flash.</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_bootloader_flash_requirements">4.9.2. Bootloader Flash Requirements</h4> +<div class="paragraph"> +<p>The bootloader can access an SPI-compatible flash via the processor&#8217;s top entity SPI port. By default, the flash +chip-select line is driven by <code>spi_csn_o(0)</code> and the SPI clock uses 1/8 of the processor&#8217;s main clock as clock frequency. +The SPI flash has to support single-byte read and write operations, 24-bit addresses and at least the following standard commands:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>0x02</code>: Program page (write byte)</p> +</li> +<li> +<p><code>0x03</code>: Read data (byte)</p> +</li> +<li> +<p><code>0x04</code>: Write disable (for volatile status register)</p> +</li> +<li> +<p><code>0x05</code>: Read (first) status register</p> +</li> +<li> +<p><code>0x06</code>: Write enable (for volatile status register)</p> +</li> +<li> +<p><code>0xAB</code>: Wake-up from sleep mode (optional)</p> +</li> +<li> +<p><code>0xD8</code>: Block erase (64kB)</p> +</li> +</ul> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Custom Configuration</div> +Most properties (like chip select line, flash address width, SPI clock frequency, &#8230;&#8203;) of the default bootloader can be reconfigured +without the need to change the source code. Custom configuration can be made using command line switches (defines) when recompiling +the bootloader. See the User Guide <a href="https://stnolting.github.io/neorv32/ug/#_customizing_the_internal_bootloader" class="bare">https://stnolting.github.io/neorv32/ug/#_customizing_the_internal_bootloader</a> for more information. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_bootloader_console">4.9.3. Bootloader Console</h4> +<div class="paragraph"> +<p>To interact with the bootloader, connect the primary UART (UART0) signals (<code>uart0_txd_o</code> and <code>uart0_rxd_o</code>) of the processor&#8217;s top +entity via a serial port (-adapter) to your computer (hardware flow control is not used so the according interface signals can be +ignored), configure your terminal program using the following settings and perform a reset of the processor.</p> +</div> +<div class="paragraph"> +<p>Terminal console settings (<code>19200-8-N-1</code>):</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>19200 Baud</p> +</li> +<li> +<p>8 data bits</p> +</li> +<li> +<p>no parity bit</p> +</li> +<li> +<p>1 stop bit</p> +</li> +<li> +<p>newline on <code>\r\n</code> (carriage return, newline)</p> +</li> +<li> +<p>no transfer protocol / control flow protocol - just raw bytes</p> +</li> +</ul> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Terminal Program</div> +Any terminal program that can connect to a serial port should work. However, make sure the program +can transfer data in <em>raw</em> byte mode without any protocol overhead (e.g. XMODEM). Some terminal programs struggle with +transmitting files larger than 4kB (see <a href="https://github.com/stnolting/neorv32/pull/215" class="bare">https://github.com/stnolting/neorv32/pull/215</a>). Try a different terminal program +if uploading of a binary does not work. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The bootloader uses the LSB of the top entity&#8217;s <code>gpio_o</code> output port as high-active status LED. All other +output pins are set to low level and won&#8217;t be altered. After reset, the status LED will start blinking at 2Hz and the +following intro screen shows up:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code>&lt;&lt; NEORV32 Bootloader &gt;&gt; + +BLDV: Mar 7 2023 +HWV: 0x01080107 +CLK: 0x05f5e100 +MISA: 0x40901106 +XISA: 0xc0000fab +SOC: 0xffff402f +IMEM: 0x00008000 +DMEM: 0x00002000 + +Autoboot in 10s. Press any key to abort.</code></pre> +</div> +</div> +<div class="paragraph"> +<p>The start-up screen gives some brief information about the bootloader and several system configuration parameters:</p> +</div> +<table class="tableblock frame-all grid-none stretch"> +<colgroup> +<col style="width: 11.7647%;"> +<col style="width: 88.2353%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BLDV</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Bootloader version (built date).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>HWV</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Processor hardware version (the <a href="#_mimpid"><strong><code>mimpid</code></strong></a> CSR); in BCD format; example: <code>0x01040606</code> = v1.4.6.6).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CLK</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Processor clock speed in Hz (via the <code>CLK</code> register from the <a href="#_system_configuration_information_memory_sysinfo">System Configuration Information Memory (SYSINFO)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MISA</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">RISC-V CPU extensions (<a href="#_misa"><strong><code>misa</code></strong></a> CSR).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XISA</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">NEORV32-specific CPU extensions (<a href="#_mxisa"><strong><code>mxisa</code></strong></a> CSR).</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SOC</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Processor configuration (via the <code>SOC</code> register from the <a href="#_system_configuration_information_memory_sysinfo">System Configuration Information Memory (SYSINFO)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IMEM</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Internal IMEM size in byte (via the <code>MEM</code> register from the <a href="#_system_configuration_information_memory_sysinfo">System Configuration Information Memory (SYSINFO)</a>.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DMEM</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Internal DMEM size in byte (via the <code>MEM</code> register from the <a href="#_system_configuration_information_memory_sysinfo">System Configuration Information Memory (SYSINFO)</a>.</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>Now you have 10 seconds to press <em>any</em> key. Otherwise, the bootloader starts the <a href="#_auto_boot_sequence">Auto Boot Sequence</a>. When +you press any key within the 10 seconds, the actual bootloader user console starts:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code>&lt;&lt; NEORV32 Bootloader &gt;&gt; + +BLDV: Mar 7 2023 +HWV: 0x01080107 +CLK: 0x05f5e100 +MISA: 0x40901106 +XISA: 0xc0000fab +SOC: 0xffff402f +IMEM: 0x00008000 +DMEM: 0x00002000 + +Autoboot in 10s. Press any key to abort. <i class="conum" data-value="1"></i><b>(1)</b> +Aborted. + +Available CMDs: + h: Help + r: Restart + u: Upload + s: Store to flash + l: Load from flash + x: Boot from flash (XIP) + e: Execute +CMD:&gt;</code></pre> +</div> +</div> +<div class="colist arabic"> +<table> +<tr> +<td><i class="conum" data-value="1"></i><b>1</b></td> +<td>Auto boot sequence aborted due to user console input.</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The auto boot countdown is stopped and the bootloader&#8217;s user console is ready to receive one of the following commands:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>h</code>: Show the help text (again)</p> +</li> +<li> +<p><code>r</code>: Restart the bootloader and the auto-boot sequence</p> +</li> +<li> +<p><code>u</code>: Upload new program executable (<code>neorv32_exe.bin</code>) via UART into the instruction memory</p> +</li> +<li> +<p><code>s</code>: Store executable to SPI flash at <code>spi_csn_o(0)</code> (little-endian byte order)</p> +</li> +<li> +<p><code>l</code>: Load executable from SPI flash at <code>spi_csn_o(0)</code> (little-endian byte order)</p> +</li> +<li> +<p><code>x</code>: Boot program directly from flash via XIP (requires a pre-programmed image)</p> +</li> +<li> +<p><code>e</code>: Start the application, which is currently stored in the instruction memory (IMEM)</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>A new executable can be uploaded via UART by executing the <code>u</code> command. After that, the executable can be directly +executed via the <code>e</code> command. To store the recently uploaded executable to an attached SPI flash press <code>s</code>. To +directly load an executable from the SPI flash press <code>l</code>. The bootloader and the auto-boot sequence can be +manually restarted via the <code>r</code> command.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Executable Upload</div> +Make sure to upload the NEORV32 executable <code>neorv32_exe.bin</code>. Uploading any other file (like <code>main.bin</code>) +will cause an <code>ERR_EXE</code> bootloader error (see <a href="#_bootloader_error_codes">Bootloader Error Codes</a>). +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Booting via XIP</div> +The bootloader allows to execute an application right from flash using the <a href="#_execute_in_place_module_xip">Execute In Place Module (XIP)</a> module. +This requires a pre-programmed flash. The bootloader&#8217;s "store" option can <strong>not</strong> be used to program an XIP image. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">SPI Flash Power Down Mode</div> +The bootloader will issue a "wake-up" command prior to using the SPI flash to ensure it is not +in sleep mode / power-down mode (see <a href="https://github.com/stnolting/neorv32/pull/552" class="bare">https://github.com/stnolting/neorv32/pull/552</a>). +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Default Configuration</div> +More information regarding the default SPI, GPIO, XIP, etc. configuration can be found in the User Guide +section <a href="https://stnolting.github.io/neorv32/ug/#_customizing_the_internal_bootloader" class="bare">https://stnolting.github.io/neorv32/ug/#_customizing_the_internal_bootloader</a>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">SPI Flash Programming</div> +For detailed information on using an SPI flash for application storage see User Guide section +<a href="https://stnolting.github.io/neorv32/ug/#_programming_an_external_spi_flash_via_the_bootloader">Programming an External SPI Flash via the Bootloader</a>. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_auto_boot_sequence">4.9.4. Auto Boot Sequence</h4> +<div class="paragraph"> +<p>When you reset the NEORV32 processor, the bootloader waits 8 seconds for a UART console input before it +starts the automatic boot sequence. This sequence tries to fetch a valid boot image from the external SPI +flash, connected to SPI chip select <code>spi_csn_o(0)</code>. If a valid boot image is found that can be successfully +transferred into the instruction memory, it is automatically started. If no SPI flash is detected or if there +is no valid boot image found, and error code will be shown.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_bootloader_error_codes">4.9.5. Bootloader Error Codes</h4> +<div class="paragraph"> +<p>If something goes wrong during bootloader operation an error code and a short message is shown. In this case the processor +is halted (entering <a href="#_sleep_mode">Sleep Mode</a>), the bootloader status LED is permanently activated and the processor has to be reset manually.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +In many cases the error source is just <em>temporary</em> (like some HF spike during an UART upload). Just try again. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<colgroup> +<col style="width: 20%;"> +<col style="width: 80%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong><code>ERR_EXE</code></strong></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">If you try to transfer an invalid executable (via UART or from the external SPI flash), this error message shows up. There might be a transfer protocol configuration error in the terminal program or maybe just the wrong file was selected. Also, if no SPI flash was found during an auto-boot attempt, this message will be displayed.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong><code>ERR_SIZE</code></strong></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Your program is way too big for the internal processor’s instructions memory. Increase the memory size or reduce your application code.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong><code>ERR_CHKS</code></strong></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">This indicates a checksum error. Something went wrong during the transfer of the program image (upload via UART or loading from the external SPI flash). If the error was caused by a UART upload, just try it again. When the error was generated during a flash access, the stored image might be corrupted.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong><code>ERR_FLSH</code></strong></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">This error occurs if the attached SPI flash cannot be accessed. Make sure you have the right type of flash and that it is properly connected to the NEORV32 SPI port using chip select #0.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong><code>ERR_EXC</code></strong></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The bootloader encountered an unexpected exception during operation. This might be caused when it tries to access peripherals that were not implemented during synthesis. Example: executing commands <code>l</code> or <code>s</code> (SPI flash operations) without the SPI module being implemented.</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +If an unexpected exception has been raised, the bootloader prints hexadecimal debug information showing +the <a href="#_mcause"><strong><code>mcause</code></strong></a>, <a href="#_mepc"><strong><code>mepc</code></strong></a> and <a href="#_mtval"><strong><code>mtval</code></strong></a> CSR values. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_neorv32_runtime_environment">4.10. NEORV32 Runtime Environment</h3> +<div class="paragraph"> +<p>The NEORV32 software framework provides a minimal <strong>runtime environment</strong> (abbreviated "RTE") that takes care of a stable +and <em>safe</em> execution environment by handling <em>all</em> traps (exceptions &amp; interrupts). The RTE simplifies trap handling +by wrapping the CPU&#8217;s privileged architecture (i.e. trap-related CSRs) into a unified software API.</p> +</div> +<div class="paragraph"> +<p>Once initialized, the RTE provides <a href="#_default_rte_trap_handlers">Default RTE Trap Handlers</a> that catch all possible traps. These +default handlers just output a message via UART to inform the user when a certain trap has been triggered. The +default handlers can be overridden by the application code to install application-specific handler functions for each trap.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +Using the RTE is <strong>optional but highly recommended</strong>. The RTE provides a simple and comfortable way of delegating +traps to application-specific handlers while making sure that all traps (even though they are not explicitly used +by the application) are handled correctly. Performance-optimized applications or embedded operating systems may +not use the RTE at all in order to increase response time. +</td> +</tr> +</table> +</div> +<div class="sect3"> +<h4 id="_rte_operation">4.10.1. RTE Operation</h4> +<div class="paragraph"> +<p>The RTE manages the trap-related CSRs of the CPU&#8217;s privileged architecture (<a href="#_machine_trap_handling_csrs">Machine Trap Handling CSRs</a>). +It initializes the <a href="#_mtvec"><strong><code>mtvec</code></strong></a> CSR in DIRECT mode, which then provides the base entry point for <em>all</em> traps. The address +stored to this register defines the address of the <strong>first-level trap handler</strong>, which is provided by the +NEORV32 RTE. Whenever an exception or interrupt is triggered this first-level trap handler is executed.</p> +</div> +<div class="paragraph"> +<p>The first-level handler performs a complete context save, analyzes the source of the trap and +calls the according <strong>second-level trap handler</strong>, which takes care of the actual exception/interrupt +handling. The RTE manages a private look-up table to store the addresses of the according second-level trap handlers.</p> +</div> +<div class="paragraph"> +<p>After the initial RTE setup, each entry in the RTE&#8217;s trap handler look-up table is initialized with a +<a href="#_default_rte_trap_handlers">Default RTE Trap Handlers</a>. These default handler do not execute any trap-related operations - they +just output a message via the <strong>primary UART (UART0)</strong> to inform the user that a trap has occurred, which is not (yet) +handled by the actual application. After sending this message, the RTE tries to continue executing the actual program +by resolving the trap cause.</p> +</div> +</div> +<div class="sect3"> +<h4 id="_using_the_rte">4.10.2. Using the RTE</h4> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +All provided RTE functions can be called only from machine-mode code. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The NEORV32 is part of the default NEORV32 software framework. However, it has to explicitly enabled by calling +the RTE&#8217;s setup function:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 16. RTE Setup (Function Prototype)</div> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">void neorv32_rte_setup(void);</code></pre> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +The RTE should be enabled right at the beginning of the application&#8217;s <code>main</code> function. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +It is recommended to not use the <a href="#_mscratch"><strong><code>mscratch</code></strong></a> CSR when using the RTE as this register is used to provide services +for <a href="#_application_context_handling">Application Context Handling</a> (i.e. modifying the registers of application code that caused a trap). +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>As mentioned above, all traps will just trigger execution of the RTE&#8217;s <a href="#_default_rte_trap_handlers">Default RTE Trap Handlers</a> at first. +To use application-specific handlers, which actually "handle" a trap, the default handlers can be overridden +by installing user-defined ones:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 17. Installing an Application-Specific Trap Handler (Function Prototype)</div> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">int neorv32_rte_handler_install(uint8_t id, void (*handler)(void));</code></pre> +</div> +</div> +<div class="paragraph"> +<p>The first argument <code>id</code> defines the "trap ID" (for example a certain interrupt request) that shall be handled +by the user-defined handler. These IDs are defined in <code>sw/lib/include/neorv32_rte.h</code>:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 18. RTE Trap Identifiers (cut-out)</div> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">enum NEORV32_RTE_TRAP_enum { + RTE_TRAP_I_MISALIGNED = 0, /**&lt; Instruction address misaligned */ + RTE_TRAP_I_ACCESS = 1, /**&lt; Instruction (bus) access fault */ + RTE_TRAP_I_ILLEGAL = 2, /**&lt; Illegal instruction */ + RTE_TRAP_BREAKPOINT = 3, /**&lt; Breakpoint (EBREAK instruction) */ + RTE_TRAP_L_MISALIGNED = 4, /**&lt; Load address misaligned */ + RTE_TRAP_L_ACCESS = 5, /**&lt; Load (bus) access fault */ + RTE_TRAP_S_MISALIGNED = 6, /**&lt; Store address misaligned */ + RTE_TRAP_S_ACCESS = 7, /**&lt; Store (bus) access fault */ + RTE_TRAP_UENV_CALL = 8, /**&lt; Environment call from user mode (ECALL instruction) */ + RTE_TRAP_MENV_CALL = 9, /**&lt; Environment call from machine mode (ECALL instruction) */ + RTE_TRAP_MSI = 10, /**&lt; Machine software interrupt */ + RTE_TRAP_MTI = 11, /**&lt; Machine timer interrupt */ + RTE_TRAP_MEI = 12, /**&lt; Machine external interrupt */ + RTE_TRAP_FIRQ_0 = 13, /**&lt; Fast interrupt channel 0 */ + RTE_TRAP_FIRQ_1 = 14, /**&lt; Fast interrupt channel 1 */ + RTE_TRAP_FIRQ_2 = 15, /**&lt; Fast interrupt channel 2 */ + RTE_TRAP_FIRQ_3 = 16, /**&lt; Fast interrupt channel 3 */ + RTE_TRAP_FIRQ_4 = 17, /**&lt; Fast interrupt channel 4 */ + RTE_TRAP_FIRQ_5 = 18, /**&lt; Fast interrupt channel 5 */ + RTE_TRAP_FIRQ_6 = 19, /**&lt; Fast interrupt channel 6 */ + RTE_TRAP_FIRQ_7 = 20, /**&lt; Fast interrupt channel 7 */ + RTE_TRAP_FIRQ_8 = 21, /**&lt; Fast interrupt channel 8 */ + RTE_TRAP_FIRQ_9 = 22, /**&lt; Fast interrupt channel 9 */ + RTE_TRAP_FIRQ_10 = 23, /**&lt; Fast interrupt channel 10 */ + RTE_TRAP_FIRQ_11 = 24, /**&lt; Fast interrupt channel 11 */ + RTE_TRAP_FIRQ_12 = 25, /**&lt; Fast interrupt channel 12 */ + RTE_TRAP_FIRQ_13 = 26, /**&lt; Fast interrupt channel 13 */ + RTE_TRAP_FIRQ_14 = 27, /**&lt; Fast interrupt channel 14 */ + RTE_TRAP_FIRQ_15 = 28 /**&lt; Fast interrupt channel 15 */</code></pre> +</div> +</div> +<div class="paragraph"> +<p>The second argument <code>*handler</code> is the actual function that implements the user-defined trap handler. +The custom handler functions need to have a specific format without any arguments and with no return value:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 19. Custom Trap Handler (Function Prototype)</div> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">void custom_trap_handler_xyz(void) { + + // handle trap... +}</code></pre> +</div> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +<div class="title">Custom Trap Handler Attributes</div> +Do <strong>NOT</strong> use the <code>interrupt</code> attribute for the application trap handler functions! This +will place a <code>mret</code> instruction to the end of it making it impossible to return to the first-level +trap handler of the RTE core, which will cause stack corruption. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The following example shows how to install a custom handler (<code>custom_timer_irq_handler</code>) for handling +the RISC-V CLINT timer interrupt:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 20. Installing a CLINT Timer IRQ Handler</div> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">neorv32_rte_handler_install(RTE_TRAP_MTI, custom_timer_irq_handler);</code></pre> +</div> +</div> +<div class="paragraph"> +<p>User-defined trap handlers can also be un-installed. This will remove the users trap handler from the RTE core +and will re-install the <a href="#_default_rte_trap_handlers">Default RTE Trap Handlers</a> for the specific trap.</p> +</div> +<div class="listingblock"> +<div class="title">Listing 21. Function Prototype: Installing an Application-Specific Trap Handler</div> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">int neorv32_rte_handler_uninstall(uint8_t id);</code></pre> +</div> +</div> +<div class="paragraph"> +<p>The argument <code>id</code> defines the identifier of the according trap that shall be un-installed. +The following example shows how to un-install the custom handler <code>custom_timer_irq_handler</code> from the +RISC-V CLINT timer interrupt:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 22. Example: Removing the Custom CLINT Timer IRQ Handler</div> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">neorv32_rte_handler_uninstall(RTE_TRAP_MTI);</code></pre> +</div> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +The current RTE configuration can be printed via UART0 via the <code>neorv32_rte_info</code> function. +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_default_rte_trap_handlers">4.10.3. Default RTE Trap Handlers</h4> +<div class="paragraph"> +<p>The default RTE trap handlers are executed when a certain trap is triggered that is not (yet) handled by an +application-defined trap handler. The default handler will output a message giving additional debug information +via the <a href="#_primary_universal_asynchronous_receiver_and_transmitter_uart0">Primary Universal Asynchronous Receiver and Transmitter (UART0)</a> to inform the user and it will also +try to resume normal program execution. Some exemplary RTE outputs are shown below.</p> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +<div class="title">Continuing Execution</div> +In most cases the RTE can successfully continue operation - for example if it catches an <strong>interrupt</strong> request +that is not handled by the actual application program. However, if the RTE catches an un-handled <strong>trap</strong> like +a bus access fault exception continuing execution will most likely fail making the CPU crash. Some exceptions +cannot be resolved by the default debug trap handlers and will halt the CPU (see example below). +</td> +</tr> +</table> +</div> +<div class="listingblock"> +<div class="title">Listing 23. RTE Default Trap Handler Output Examples</div> +<div class="content"> +<pre class="highlight"><code>&lt;NEORV32-RTE&gt; [M] Illegal instruction @ PC=0x000002d6, MTINST=0x000000FF, MTVAL=0x00000000 &lt;/NEORV32-RTE&gt; <i class="conum" data-value="1"></i><b>(1)</b> +&lt;NEORV32-RTE&gt; [U] Illegal instruction @ PC=0x00000302, MTINST=0x00000000, MTVAL=0x00000000 &lt;/NEORV32-RTE&gt; <i class="conum" data-value="2"></i><b>(2)</b> +&lt;NEORV32-RTE&gt; [U] Load address misaligned @ PC=0x00000440, MTINST=0x01052603, MTVAL=0x80000101 &lt;/NEORV32-RTE&gt; <i class="conum" data-value="3"></i><b>(3)</b> +&lt;NEORV32-RTE&gt; [M] Fast IRQ 0x00000003 @ PC=0x00000820, MTINST=0x00000000, MTVAL=0x00000000 &lt;/NEORV32-RTE&gt; <i class="conum" data-value="4"></i><b>(4)</b> +&lt;NEORV32-RTE&gt; [M] Instruction access fault @ PC=0x90000000, MTINST=0x42078b63, MTVAL=0x00000000 !!FATAL EXCEPTION!! Halting CPU. &lt;/NEORV32-RTE&gt;\n <i class="conum" data-value="5"></i><b>(5)</b></code></pre> +</div> +</div> +<div class="colist arabic"> +<table> +<tr> +<td><i class="conum" data-value="1"></i><b>1</b></td> +<td>Illegal 32-bit instruction <code>MTINST=0x000000FF</code> at address <code>PC=0x000002d6</code> while the CPU was in machine-mode (<code>[M]</code>).</td> +</tr> +<tr> +<td><i class="conum" data-value="2"></i><b>2</b></td> +<td>Illegal 16-bit instruction <code>MTINST=0x00000000</code> at address <code>PC=0x00000302</code> while the CPU was in user-mode (<code>[U]</code>).</td> +</tr> +<tr> +<td><i class="conum" data-value="3"></i><b>3</b></td> +<td>Misaligned load access at address <code>PC=0x00000440</code> caused by instruction <code>MTINST=0x01052603</code> (trying to load a full 32-bit word from address <code>MTVAL=0x80000101</code>) while the CPU was in machine-mode (<code>[U]</code>).</td> +</tr> +<tr> +<td><i class="conum" data-value="4"></i><b>4</b></td> +<td>Fast interrupt request from channel 3 before executing instruction at address <code>PC=0x00000820</code> while the CPU was in machine-mode (<code>[M]</code>).</td> +</tr> +<tr> +<td><i class="conum" data-value="5"></i><b>5</b></td> +<td>Instruction bus access fault at address <code>PC=0x90000000</code> while executing instruction <code>MTINST=0x42078b63</code> - this is fatal for the default debug trap handler while the CPU was in machine-mode (<code>[M]</code>).</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The specific message right at the beginning of the debug trap handler message corresponds to the trap code +obtained from the <a href="#_mcause"><strong><code>mcause</code></strong></a> CSR (see <a href="#_neorv32_trap_listing">NEORV32 Trap Listing</a>). A full list of all messages and the according +<code>mcause</code> trap codes is shown below.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 94. RTE Default Trap Handler Messages and According <code>mcause</code> Values</caption> +<colgroup> +<col style="width: 50%;"> +<col style="width: 50%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Trap identifier</th> +<th class="tableblock halign-center valign-top">According <code>mcause</code> CSR value</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Instruction address misaligned"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Instruction access fault"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x00000001</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Illegal instruction"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x00000002</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Breakpoint"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x00000003</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Load address misaligned"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x00000004</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Load access fault"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x00000005</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Store address misaligned"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x00000006</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Store access fault"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x00000007</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Environment call from U-mode"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x00000008</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Environment call from M-mode"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x0000000b</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Machine software IRQ"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x80000003</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Machine timer IRQ"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x80000007</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Machine external IRQ"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x8000000b</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x00000000"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x80000010</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x00000001"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x80000011</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x00000002"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x80000012</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x00000003"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x80000013</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x00000004"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x80000014</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x00000005"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x80000015</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x00000006"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x80000016</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x00000007"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x80000017</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x00000008"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x80000018</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x00000009"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x80000019</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x0000000a"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x8000001a</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x0000000b"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x8000001b</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x0000000c"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x8000001c</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x0000000d"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x8000001d</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x0000000e"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x8000001e</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Fast IRQ 0x0000000f"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x8000001f</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">"Unknown trap cause"</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">undefined</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect3"> +<h4 id="_application_context_handling">4.10.4. Application Context Handling</h4> +<div class="paragraph"> +<p>Upon trap entry the RTE backups the <em>entire</em> application context (i.e. all <code>x</code> general purpose registers) +to the stack. The context is restored automatically after trap completion. The base address of the according +stack frame is copied to the <a href="#_mscratch"><strong><code>mscratch</code></strong></a> CSR. By having this information available, the RTE provides dedicated +functions for accessing and <em>altering</em> the application context:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 24. Context Access Functions</div> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">// Prototypes +uint32_t neorv32_rte_context_get(int x); // read register x +void neorv32_rte_context_put(int x, uint32_t data); write data to register x + +// Examples +uint32_t tmp = neorv32_rte_context_get(9); // read register 'x9' +neorv32_rte_context_put(28, tmp); // write 'tmp' to register 'x28'</code></pre> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">RISC-V <code>E</code> Extension</div> +Registers <code>x16..x31</code> are not available if the RISC-V <a href="#_e_isa_extension"><code>E</code> ISA Extension</a> is enabled. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The context access functions can be used by application-specific trap handlers to emulate unsupported +CPU / SoC features like unimplemented IO modules, unsupported instructions and even unaligned memory accesses.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Demo Program: Emulate Unaligned Memory Access</div> +A demo program, which showcases how to emulate unaligned memory accesses using the NEORV32 runtime environment +can be found in <code>sw/example/demo_emulate_unaligned</code>. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_on_chip_debugger_ocd">5. On-Chip Debugger (OCD)</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The NEORV32 Processor features an <em>on-chip debugger</em> (OCD) implementing the <strong>execution-based debugging</strong> scheme +compatible to the <strong>Minimal RISC-V Debug Specification</strong>. A copy of the specification is available in <code>docs/references</code>. +The on-chip debugger is implemented via the <a href="#_processor_top_entity_generics"><code>OCD_EN</code></a> processor top generic.</p> +</div> +<div class="paragraph"> +<p><strong>Key Features</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p>standard 4-wire JTAG access port</p> +</li> +<li> +<p>full control of the CPU: halting, single-stepping and resuming</p> +</li> +<li> +<p>indirect access to all core registers and the entire processor address space (via program buffer)</p> +</li> +<li> +<p>compatible with upstream OpenOCD and GDB</p> +</li> +<li> +<p>optional trigger module for hardware breakpoints</p> +</li> +<li> +<p>optional authentication for increased security</p> +</li> +</ul> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Hands-On Tutorial</div> +A simple example on how to use NEORV32 on-chip debugger in combination with OpenOCD and the GNU debugger is shown in +section <a href="https://stnolting.github.io/neorv32/ug/#_debugging_using_the_on_chip_debugger">Debugging using the On-Chip Debugger</a> +of the User Guide. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Section Structure</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p><a href="#_debug_transport_module_dtm">Debug Transport Module (DTM)</a></p> +</li> +<li> +<p><a href="#_debug_module_dm">Debug Module (DM)</a></p> +</li> +<li> +<p><a href="#_debug_authentication">Debug Authentication</a></p> +</li> +<li> +<p><a href="#_cpu_debug_mode">CPU Debug Mode</a></p> +</li> +<li> +<p><a href="#_trigger_module">Trigger Module</a></p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>The NEORV32 on-chip debugger is based on five hardware modules:</p> +</div> +<div class="imageblock text-center"> +<div class="content"> +<img src="img/neorv32_ocd_complex.png" alt="neorv32 ocd complex"> +</div> +<div class="title">Figure 14. NEORV32 on-chip debugger complex</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p><a href="#_debug_transport_module_dtm">Debug Transport Module (DTM)</a>: JTAG access tap to allow an external adapter to interface with the <em>debug module (DM)</em>.</p> +</li> +<li> +<p><a href="#_debug_module_dm">Debug Module (DM)</a>: RISC-V debug module that is configured by the DTM. From the CPU&#8217;s perspective this module behaves as +another memory-mapped peripheral that can be accessed via the processor-internal bus. The memory-mapped registers provide an +internal <em>data buffer</em> for data transfer from/to the DM, a <em>code ROM</em> containing the "park loop" code, a <em>program buffer</em> to +allow the debugger to execute small programs defined by the DM and a <em>status register</em> that is used to communicate <em>exception</em>, +<em>halt</em>, <em>resume</em> and <em>execute</em> requests/acknowledges from/to the DM.</p> +</li> +<li> +<p><a href="#_debug_authentication">Debug Authentication</a>: Authenticator module to secure on-chip debugger access. This module implements a very simple +authentication mechanism as example. Users can modify/replace this default logic to implement arbitrary authentication mechanism.</p> +</li> +<li> +<p><a href="#_cpu_debug_mode">CPU Debug Mode</a> ISA extension: This ISA extension provides the "debug execution mode" as another operation mode that is +used to execute the park loop code from the DM. This mode also provides additional CSRs and instructions.</p> +</li> +<li> +<p>CPU <a href="#_trigger_module">Trigger Module</a>: This module provides a single <em>hardware</em> breakpoint.</p> +</li> +</ol> +</div> +<div class="paragraph"> +<p><strong>Theory of Operation</strong></p> +</div> +<div class="paragraph"> +<p>When debugging the system using the OCD, the debugger (like GDB) issues a halt request to the CPU to make the it enter +<em>debug mode</em>. In this mode the application-defined architectural state of the system/CPU is "frozen" so the debugger +can monitor it without interfering with the actual application. However, the OCD can also modify the entire architectural +state at any time. While in debug mode, the debugger has full control over the entire CPU and processor operating at +highest-privileged mode.</p> +</div> +<div class="paragraph"> +<p>While in debug mode, the CPU executes the "park loop" code from the code ROM of the debug module (DM). +This park loop implements an endless loop, where the CPU polls a memory-mapped <a href="#_status_register">Status Register</a> that is +controlled by the DM. The flags in this register are used to communicate requests from the DM and to acknowledge +them by the CPU: trigger execution of the program buffer or resume the halted application. Furthermore, the CPU +uses this register to signal that the CPU has halted after a halt request or to signal that an exception has been +raised while being in debug mode.</p> +</div> +<div style="page-break-after: always;"></div> +<div class="sect2"> +<h3 id="_debug_transport_module_dtm">5.1. Debug Transport Module (DTM)</h3> +<div class="paragraph"> +<p>The debug transport module "DTM" (VHDL module: <code>rtl/core/neorv32_debug_dtm.vhd</code>) provides a standard 4-wire JTAG test +access port ("tap") via the following top-level ports:</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 95. JTAG top level signals</caption> +<colgroup> +<col style="width: 14.2857%;"> +<col style="width: 14.2857%;"> +<col style="width: 14.2857%;"> +<col style="width: 57.1429%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Name</th> +<th class="tableblock halign-center valign-top">Width</th> +<th class="tableblock halign-center valign-top">Direction</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>jtag_tck_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial clock</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>jtag_tdi_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data input</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>jtag_tdo_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">out</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">serial data output</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>jtag_tms_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">in</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">mode select</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Maximum JTAG Clock</div> +All JTAG signals are synchronized to the processor&#8217;s clock domain. Hence, no additional clock domain is required for the DTM. +However, this constraints the maximal JTAG clock frequency (<code>jtag_tck_i</code>) to be less than or equal to <strong>1/5</strong> of the processor +clock frequency (<code>clk_i</code>). +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">JTAG TAP Reset</div> +The NEORV32 JTAG TAP does not provide a dedicated reset signal ("TRST"). However, the missing TRST is not a problem, +since JTAG-level resets can be triggered using with TMS signaling. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Maintaining JTAG Chain</div> +If the on-chip debugger is disabled the JTAG serial input <code>jtag_tdi_i</code> is directly +connected to the JTAG serial output <code>jtag_tdo_o</code> to maintain the JTAG chain. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>JTAG accesses are based on a single 5-bit <em>instruction register</em> <code>IR</code> and several <em>data registers</em> <code>DR</code> +with different sizes. The individual data registers are accessed by writing the according address to the instruction +register. The following table shows the available data registers and their addresses:</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 96. JTAG TAP registers</caption> +<colgroup> +<col style="width: 14.2857%;"> +<col style="width: 14.2857%;"> +<col style="width: 14.2857%;"> +<col style="width: 57.1429%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Address (via <code>IR</code>)</th> +<th class="tableblock halign-center valign-top">Name</th> +<th class="tableblock halign-center valign-top">Size (bits)</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>00001</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>IDCODE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">identifier, version and part ID fields are hardwired to zero, manufacturer ID is assigned via the <a href="#_processor_top_entity_generics"><code>JEDEC_ID</code></a> generic</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>10000</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>DTMCS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">32</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">debug transport module control and status register (see below)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>10001</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>DMI</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">41</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">debug module interface: 7-bit address, 32-bit read/write data, 2-bit operation (<code>00</code> = NOP; <code>10</code> = write; <code>01</code> = read)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">others</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>BYPASS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">default JTAG bypass register</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 97. <code>DTMCS</code> - DTM Control and Status Register</caption> +<colgroup> +<col style="width: 14.2857%;"> +<col style="width: 21.4285%;"> +<col style="width: 7.1428%;"> +<col style="width: 57.143%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit(s)</th> +<th class="tableblock halign-center valign-top">Name</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:18</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, hardwired to zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">17</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>dmihardreset</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">setting this bit will reset the debug module interface; this bit auto-clears</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>dmireset</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">setting this bit will clear the sticky error state; this bit auto-clears</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">15</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><em>reserved</em>, hardwired to zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">14:12</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>idle</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">recommended idle states (= 0, no idle states required)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">11:10</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>dmistat</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">DMI status: <code>00</code> = no error, <code>01</code> = reserved, <code>10</code> = operation failed, <code>11</code> = failed operation during pending DMI operation</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">9:4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>abits</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">number of address bits in <code>DMI</code> register (= 6)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">3:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>version</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0001</code> = DTM is compatible to RISC-V debug spec. versions v0.13 and v1.0</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_debug_module_dm">5.2. Debug Module (DM)</h3> +<div class="paragraph"> +<p>The debug module "DM" (VHDL module: <code>rtl/core/neorv32_debug_dm.vhd</code>) acts as a translation interface between abstract +operations issued by the debugger application (like GDB) and the platform-specific debugger hardware. +It supports the following features:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Gives the debugger necessary information about the implementation.</p> +</li> +<li> +<p>Allows the hart to be halted/resumed/reset and provides the current status.</p> +</li> +<li> +<p>Provides abstract read and write access to the halted hart&#8217;s general purpose registers.</p> +</li> +<li> +<p>Provides access to a reset signal that allows debugging from the very first instruction after reset.</p> +</li> +<li> +<p>Provides a <em>program buffer</em> to force the hart to execute arbitrary instructions.</p> +</li> +<li> +<p>Allows memory access from a hart&#8217;s point of view.</p> +</li> +<li> +<p>Optionally implements an authentication mechanism to secure on-chip debugger access.</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>The NEORV32 DM follows the "Minimal RISC-V External Debug Specification" to provide full debugging capabilities while +keeping resource/area requirements at a minimum. It implements the <strong>execution based debugging scheme</strong> for a +single hart and provides the following architectural core features:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>program buffer with 2 entries and an implicit <code>ebreak</code> instruction</p> +</li> +<li> +<p>indirect bus access via the CPU using the program buffer</p> +</li> +<li> +<p>abstract commands: "access register" plus auto-execution</p> +</li> +<li> +<p>halt-on-reset capability</p> +</li> +<li> +<p>optional authentication</p> +</li> +</ul> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">DM Spec. Version</div> +The NEORV32 DM complies to the RISC-V DM spec version 1.0. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>From the DTM&#8217;s point of view, the DM implements a set of <a href="#_dm_registers">DM Registers</a> that are used to control and monitor the +debugging session. From the CPU&#8217;s point of view, the DM implements several memory-mapped registers that are used for +communicating debugging control and status (<a href="#_dm_cpu_access">DM CPU Access</a>).</p> +</div> +<div class="sect3"> +<h4 id="_dm_registers">5.2.1. DM Registers</h4> +<div class="paragraph"> +<p>The DM is controlled via a set of registers that are accessed via the DTM. The following registers are implemented:</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Unimplemented Registers</div> +Write accesses to registers that are not implemented are simply ignored and read accesses +to these registers will always return zero. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 98. Available DM registers</caption> +<colgroup> +<col style="width: 16.6666%;"> +<col style="width: 25%;"> +<col style="width: 58.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Address</th> +<th class="tableblock halign-center valign-top">Name</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0x04</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><a href="#_data0"><strong><code>data0</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Abstract data 0, used for data transfer between debugger and processor</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0x10</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><a href="#_dmcontrol"><strong><code>dmcontrol</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Debug module control</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0x11</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><a href="#_dmstatus"><strong><code>dmstatus</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Debug module status</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0x12</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><a href="#_hartinfo"><strong><code>hartinfo</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Hart information</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0x16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><a href="#_abstracts"><strong><code>abstracts</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Abstract control and status</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0x17</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><a href="#_command"><strong><code>command</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Abstract command</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0x18</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><a href="#_abstractauto"><strong><code>abstractauto</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Abstract command auto-execution</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0x1d</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>nextdm</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Base address of next DM; reads as zero to indicate there is only one DM</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0x20</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><a href="#_progbuf"><code>progbuf0</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Program buffer 0</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0x21</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><a href="#_progbuf"><code>progbuf1</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Program buffer 1</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0x30</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><a href="#_authdata"><strong><code>authdata</code></strong></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Data to/from the authentication module</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0x38</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>sbcs</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">System bus access control and status; reads as zero to indicate there is <strong>no</strong> system bus access</p></td> +</tr> +</tbody> +</table> +<div class="sect4"> +<h5 id="_data0"><strong><code>data0</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 10.5263%;"> +<col style="width: 71.0526%;"> +<col style="width: 18.4211%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x04</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Abstract data 0</strong></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock"><code>data0</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Reset value: <code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Basic read/write data exchange register to be used with abstract commands (for example to read/write data from/to CPU GPRs).</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect4"> +<h5 id="_dmcontrol"><strong><code>dmcontrol</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 10.5263%;"> +<col style="width: 71.0526%;"> +<col style="width: 18.4211%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x10</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Debug module control register</strong></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock"><code>dmcontrol</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Reset value: <code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Control of the overall debug module and the hart. The following table shows all implemented bits. All remaining bits/bit-fields +are configured as "zero" and are read-only. Writing '1' to these bits/fields will be ignored.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 99. <code>dmcontrol</code> Register Bits</caption> +<colgroup> +<col style="width: 8.3333%;"> +<col style="width: 16.6666%;"> +<col style="width: 8.3333%;"> +<col style="width: 66.6668%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [RISC-V]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>haltreq</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set/clear hart halt request</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">30</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>resumereq</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">request hart to resume</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">28</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>ackhavereset</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">write <code>1</code> to clear <code>*havereset</code> flags</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>ndmreset</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">put whole system (except OCD) into reset state when <code>1</code></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>dmactive</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">DM enable; writing <code>0</code>-<code>1</code> will reset the DM</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect4"> +<h5 id="_dmstatus"><strong><code>dmstatus</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 10.5263%;"> +<col style="width: 71.0526%;"> +<col style="width: 18.4211%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x11</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Debug module status register</strong></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock"><code>dmstatus</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Reset value: <code>0x00400083</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Current status of the overall debug module and the hart. The entire register is read-only.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 100. <code>dmstatus</code> Register Bits</caption> +<colgroup> +<col style="width: 7.6923%;"> +<col style="width: 15.3846%;"> +<col style="width: 76.9231%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [RISC-V]</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:23</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>reserved</em></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved; zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">22</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>impebreak</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code>: indicates an implicit <code>ebreak</code> instruction after the last program buffer entry</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">21:20</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>reserved</em></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved; zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">19</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>allhavereset</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>1</code> when the hart is in reset</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">18</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>anyhavereset</code></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">17</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>allresumeack</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>1</code> when the hart has acknowledged a resume request</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>anyresumeack</code></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">15</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>allnonexistent</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock">zero to indicate the hart is always existent</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">14</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>anynonexistent</code></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">13</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>allunavail</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>1</code> when the DM is disabled to indicate the hart is unavailable</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">12</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>anyunavail</code></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">11</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>allrunning</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>1</code> when the hart is running</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">10</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>anyrunning</code></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">9</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>allhalted</code></p></td> +<td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock"><code>1</code> when the hart is halted</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>anyhalted</code></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">7</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>authenticated</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if authentication passed; see <a href="#_debug_authentication">Debug Authentication</a></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">6</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>authbusy</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if authentication is busy, see <a href="#_debug_authentication">Debug Authentication</a></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">5</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>hasresethaltreq</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: halt-on-reset is not supported (directly)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>confstrptrvalid</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: no configuration string available</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">3:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>version</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0011</code>: DM compatible to debug spec. version v1.0</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect4"> +<h5 id="_hartinfo"><strong><code>hartinfo</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 10.5263%;"> +<col style="width: 71.0526%;"> +<col style="width: 18.4211%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x12</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Hart information</strong></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock"><code>hartinfo</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Reset value: <em>see below</em></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">This register gives information about the hart. The entire register is read-only.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 101. <code>hartinfo</code> Register Bits</caption> +<colgroup> +<col style="width: 9.0909%;"> +<col style="width: 18.1818%;"> +<col style="width: 72.7273%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [RISC-V]</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:24</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>reserved</em></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved; zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">23:20</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>nscratch</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0001</code>: number of <code>dscratch*</code> CPU registers = 1</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">19:17</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>reserved</em></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved; zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>dataccess</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: the <code>data</code> registers are shadowed in the hart&#8217;s address space</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">15:12</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>datasize</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0001</code>: number of 32-bit words in the address space dedicated to shadowing the <code>data</code> registers (1 register)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">11:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>dataaddr</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">= <code>dm_data_base_c(11:0)</code>, signed base address of <code>data</code> words (see address map in <a href="#_dm_cpu_access">DM CPU Access</a>)</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect4"> +<h5 id="_abstracts"><strong><code>abstracts</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 10.5263%;"> +<col style="width: 71.0526%;"> +<col style="width: 18.4211%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x16</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Abstract control and status</strong></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock"><code>abstracts</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Reset value: <code>0x02000801</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Command execution info and status.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 102. <code>abstracts</code> Register Bits</caption> +<colgroup> +<col style="width: 8.3333%;"> +<col style="width: 16.6666%;"> +<col style="width: 8.3333%;"> +<col style="width: 66.6668%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [RISC-V]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:29</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved; zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">28:24</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>progbufsize</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0010</code>: size of the program buffer (<code>progbuf</code>) = 2 entries</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">23:11</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved; zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">12</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>busy</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set when a command is being executed</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">11</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>relaxedpriv</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code>: PMP rules are ignored when in debug mode</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">10:8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>cmderr</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">error during command execution (see below); has to be cleared by writing <code>111</code></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">7:4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved; zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">3:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>datacount</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0001</code>: number of implemented <code>data</code> registers for abstract commands = 1</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>Error codes in <code>cmderr</code> (highest priority first):</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>000</code> - no error</p> +</li> +<li> +<p><code>100</code> - command cannot be executed since hart is not in expected state</p> +</li> +<li> +<p><code>011</code> - exception during command execution</p> +</li> +<li> +<p><code>010</code> - unsupported command</p> +</li> +<li> +<p><code>001</code> - invalid DM register read/write while command is/was executing</p> +</li> +</ul> +</div> +</div> +<div class="sect4"> +<h5 id="_command"><strong><code>command</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 10.5263%;"> +<col style="width: 71.0526%;"> +<col style="width: 18.4211%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x17</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Abstract command</strong></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock"><code>command</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Reset value: <code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Writing this register will trigger the execution of an abstract command. New command can only be executed if +<code>cmderr</code> is zero. The entire register in write-only (reads will return zero).</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +The NEORV32 DM only supports <strong>Access Register</strong> abstract commands. These commands can only access the +hart&#8217;s GPRs x0 - x15/31 (abstract command register index <code>0x1000</code> - <code>0x101f</code>). +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 103. <code>command</code> Register Bits</caption> +<colgroup> +<col style="width: 8.3333%;"> +<col style="width: 16.6666%;"> +<col style="width: 8.3333%;"> +<col style="width: 66.6668%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [RISC-V]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Description / required value</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:24</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>cmdtype</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>00000000</code>: indicates "access register" command</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">23</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>reserved</em></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">reserved, has to be <code>0</code> when writing</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">22:20</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>aarsize</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>010</code>: indicates 32-bit accesses</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">21</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>aarpostincrement</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: post-increment is not supported</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">18</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>postexec</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if the program buffer is executed <em>after</em> the command</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">17</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>transfer</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set if the operation in <code>write</code> is conducted</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>write</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code>: copy <code>data0</code> to <code>[regno]</code>, <code>0</code>: copy <code>[regno]</code> to <code>data0</code></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">15:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>regno</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">GPR-access only; has to be <code>0x1000</code> - <code>0x101f</code></p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect4"> +<h5 id="_abstractauto"><strong><code>abstractauto</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 10.5263%;"> +<col style="width: 71.0526%;"> +<col style="width: 18.4211%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x18</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Abstract command auto-execution</strong></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock"><code>abstractauto</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Reset value: <code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Register to configure if a read/write access to a DM register re-triggers execution of the last abstract command.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 104. <code>abstractauto</code> Register Bits</caption> +<colgroup> +<col style="width: 8.3333%;"> +<col style="width: 16.6666%;"> +<col style="width: 8.3333%;"> +<col style="width: 66.6668%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [RISC-V]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">17</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>autoexecprogbuf[1]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">when set reading/writing from/to <code>progbuf1</code> will execute <code>command</code> again</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>autoexecprogbuf[0]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">when set reading/writing from/to <code>progbuf0</code> will execute <code>command</code> again</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>autoexecdata[0]</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">when set reading/writing from/to <code>data0</code> will execute <code>command</code> again</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect4"> +<h5 id="_progbuf"><strong><code>progbuf</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 10.5263%;"> +<col style="width: 71.0526%;"> +<col style="width: 18.4211%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x20</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Program buffer 0</strong></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock"><code>progbuf0</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x21</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Program buffer 1</strong></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock"><code>progbuf1</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Reset value: <code>0x00000013</code> ("NOP")</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Program buffer (two entries) for the DM.</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect4"> +<h5 id="_authdata"><strong><code>authdata</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 10.5263%;"> +<col style="width: 71.0526%;"> +<col style="width: 18.4211%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">0x30</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Authentication data</strong></p></td> +<td class="tableblock halign-right valign-top"><p class="tableblock"><code>authdata</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">Reset value: <em>user-defined</em></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">This register serves as a 32-bit serial port to/from the authentication module. See <a href="#_debug_authentication">Debug Authentication</a>.</p></td> +</tr> +</tbody> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_dm_cpu_access">5.2.2. DM CPU Access</h4> +<div class="paragraph"> +<p>From the CPU&#8217;s perspective the DM acts like another memory-mapped peripheral. It occupies 256 bytes of the CPU&#8217;s address +space starting at address <code>base_io_dm_c</code>. This address space is divided into four sections of 64 bytes each to provide +access to the <em>park loop code ROM</em>, the <em>program buffer</em>, the <em>data buffer</em> and the <em>status register</em>. The program buffer, +the data buffer and the status register do not fully occupy the 64-byte-wide sections and are mirrored several times to fill +the entire section.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 105. DM CPU Access - Address Map</caption> +<colgroup> +<col style="width: 25%;"> +<col style="width: 25%;"> +<col style="width: 50%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Base address</th> +<th class="tableblock halign-center valign-top">Physical size</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0xffffff00</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">64 bytes</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">ROM for the "park loop" code</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0xffffff40</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">16 bytes</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Program buffer (<a href="#_progbuf"><strong><code>progbuf</code></strong></a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0xffffff80</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4 bytes</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Data buffer (<a href="#_data0"><strong><code>data0</code></strong></a>)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0xffffffc0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">4 bytes</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Control and <a href="#_status_register">Status Register</a></p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">DM Register Access</div> +All memory-mapped registers of the DM can only be accessed by the CPU if it is in debug mode. Hence, the DM registers are not +visible nor accessible for normal CPU operations. Any CPU access outside of debug mode will raise a bus access fault exception. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Park Loop Code Sources ("OCD Firmware")</div> +The assembly sources of the park loop code are available in <code>sw/ocd-firmware/park_loop.S</code>. +</td> +</tr> +</table> +</div> +<div class="sect4"> +<h5 id="_code_rom_entry_points">Code ROM Entry Points</h5> +<div class="paragraph"> +<p>The park loop code provides two entry points where code execution can start. These are used to enter the park loop either when +an explicit debug-entry/halt request has been issued (for example a halt request) or when an exception has occurred while executing +code in debug mode.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 106. Park Loop Entry Points</caption> +<colgroup> +<col style="width: 60%;"> +<col style="width: 40%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Address</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>dm_exc_entry_c</code> (<code>base_io_dm_c</code> + 0)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Exception entry address</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>dm_park_entry_c</code> (<code>base_io_dm_c</code> + 8)</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Normal entry address (halt request)</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>When the CPU enters (via an explicit halt request from the dubber) or re-enters debug mode (for example via an <code>ebreak</code> in the +DM&#8217;s program buffer), it jumps to the <em>normal entry point</em> that is configured via the <a href="#_cpu_top_entity_generics"><code>CPU_DEBUG_PARK_ADDR</code></a> +CPU generic. By default, this address is set to <code>dm_park_entry_c</code>, which is defined in the main +package file. If an exception is encountered during debug mode, the CPU jumps to the address of the <em>exception entry point</em> +configured via the <a href="#_cpu_top_entity_generics"><code>CPU_DEBUG_EXC_ADDR</code></a> CPU generic. By default, this address +is set to <code>dm_exc_entry_c</code>, which is also defined in the main package file.</p> +</div> +</div> +<div class="sect4"> +<h5 id="_status_register">Status Register</h5> +<div class="paragraph"> +<p>The status register provides a direct communication channel between the CPU&#8217;s debug-mode executing the park loop +and the debugger-controlled DM. This register is used to communicate requests, which are issued by the +DM, and the according acknowledges, which are generated by the CPU.</p> +</div> +<div class="paragraph"> +<p>There are only 4 bits in this register that are used to implement requests/acknowledges. Each bit is left-aligned +in one sub-byte of the entire 32-bit register. Thus, the CPU can access each bit individually using store-byte (<code>sb</code>) and +load-byte (<code>lb</code>) instructions. This eliminates the need to perform bit-masking in the park loop code resulting in less code +size and faster execution.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 107. DM Status Register - CPU Access</caption> +<colgroup> +<col style="width: 6.6666%;"> +<col style="width: 20%;"> +<col style="width: 20%;"> +<col style="width: 53.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name</th> +<th class="tableblock halign-center valign-top">CPU/DM access</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>sreg_halt_ack</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">CPU write, DM read</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set by the CPU when halting.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" rowspan="2"><p class="tableblock">8</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>sreg_resume_req</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">DM write, CPU read</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set by the DM to request the CPU to resume normal operation.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>sreg_resume_ack</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">CPU write, DM read</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set by the CPU before it starts resuming.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" rowspan="2"><p class="tableblock">16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>sreg_execute_req</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">DM write, CPU read</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set by the DM to request execution of the program buffer.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>sreg_execute_ack</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">CPU write, DM read</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set by the CPU before it starts executing the program buffer.</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">24</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>sreg_execute_ack</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">CPU write, DM read</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set by the CPU if an exception occurs while being in debug mode.</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_debug_authentication">5.3. Debug Authentication</h3> +<div class="paragraph"> +<p>Optionally, the on-chip debugger&#8217;s DM can be equipped with an <em>authenticator module</em> to secure debugger access. This authentication +is enabled by the <a href="#_processor_top_entity_generics"><code>OCD_AUTHENTICATION</code></a> top generic. When disabled, the debugger is always +authorized and has unlimited access. When enabled, the debugger is required to authenticate in order to gain access.</p> +</div> +<div class="paragraph"> +<p>The authenticator module is implemented as individual RTL module (<code>rtl/core/neorv32_debug_auth.vhd</code>). By default, it implements +a very simple authentication mechanism. Note that this default mechanism is not secure in any way - it is intended as example +logic to illustrate the interface and authentication process. Users can modify the default logic or replace the entire module +to implement a more sophisticated custom authentication mechanism.</p> +</div> +<div class="paragraph"> +<p>The authentication interface is compliant to the RISC-V debug spec and is based on a single CSR and two additional status bits:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><a href="#_authdata"><strong><code>authdata</code></strong></a> CSR: this 32-bit register is used to read/write data from/to the authentication module. It is hardwired to +all-zero if authentication is not implemented.</p> +</li> +<li> +<p><a href="#_dmstatus"><strong><code>dmstatus</code></strong></a> CSR:</p> +<div class="ulist"> +<ul> +<li> +<p>The <code>authenticated</code> bit (read-only) is set if authentication was successful. The debugger can access the processor only +if this bit is set. It is automatically hardwired to <code>1</code> (always authenticated) if the authentication module is not implemented.</p> +</li> +<li> +<p>The <code>authbusy</code> bit (read-only) indicates if the authentication module is busy. When set, no data should be written/read to/from +<a href="#_authdata"><strong><code>authdata</code></strong></a>. This bit is automatically hardwired to <code>0</code> (never busy) if the authentication module is not implemented.</p> +</li> +</ul> +</div> +</li> +</ul> +</div> +<div class="paragraph"> +<p>openOCD provides dedicated commands to exchange data with the authenticator module:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 25. openOCD RISC-V Authentication Commands</div> +<div class="content"> +<pre class="highlight"><code class="language-tcl" data-lang="tcl">riscv authdata_read // read 32-bit from authdata CSR +riscv authdata_write value // write 32-bit value to authdata CSR</code></pre> +</div> +</div> +<div class="paragraph"> +<p>Based on these two primitives arbitrary complex authentication mechanism can be implemented.</p> +</div> +<div class="sect3"> +<h4 id="_default_authentication_mechanism">5.3.1. Default Authentication Mechanism</h4> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +The default authentication mechanism is not secure at all. Replace it by a custom design. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The default authenticator hardware implements a very simple authentication mechanism: a single read/write bit is implemented +that directly corresponds to the <code>authenticated</code> bit in <a href="#_dmstatus"><strong><code>dmstatus</code></strong></a>. This bit can be read/written as bit zero (LSB) of the +<a href="#_authdata"><strong><code>authdata</code></strong></a> CSR. Writing 1 to this register will result in a successful authentication. The default openOCD configuration +script for the NEORV32 implements this basic authentication mechanism:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 26. Default authentication process (<code>sw/openocd/openocd_neorv32.cfg</code>)</div> +<div class="content"> +<pre class="highlight"><code class="language-tcl" data-lang="tcl">set challenge [riscv authdata_read] # read authdata; not required, just an example +riscv authdata_write [expr {$challenge | 1}] # set LSB to authenticate</code></pre> +</div> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect2"> +<h3 id="_cpu_debug_mode">5.4. CPU Debug Mode</h3> +<div class="paragraph"> +<p>The NEORV32 CPU Debug Mode is compatible to the <strong>Minimal RISC-V Debug Specification 1.0</strong> <code>Sdext</code> (external debug) +ISA extension. When enabled via the CPU&#8217;s <a href="#_sdext_isa_extension"><code>Sdext</code> ISA Extension</a> generic and/or the processor&#8217;s <code>OCD_EN</code> it adds +a new CPU operation mode ("debug mode"), three additional <a href="#_cpu_debug_mode_csrs">CPU Debug Mode CSRs</a> and one additional instruction +(<code>dret</code>) to the core.</p> +</div> +<div class="paragraph"> +<p>Debug-mode is entered on any of the following events:</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>The CPU executes an <code>ebreak</code> instruction (when in machine-mode and <code>ebreakm</code> in <a href="#_dcsr"><strong><code>dcsr</code></strong></a> is set OR when in user-mode and <code>ebreaku</code> in <a href="#_dcsr"><strong><code>dcsr</code></strong></a> is set).</p> +</li> +<li> +<p>A debug halt request is issued by the DM (via CPU <code>db_halt_req_i</code> signal, high-active).</p> +</li> +<li> +<p>The CPU completes executing of a single instruction while being in single-step debugging mode (<code>step</code> in <a href="#_dcsr"><strong><code>dcsr</code></strong></a> is set).</p> +</li> +<li> +<p>A hardware trigger from the <a href="#_trigger_module">Trigger Module</a> fires (<code>exe</code> and <code>action</code> in <a href="#_tdata1"><strong><code>tdata1</code></strong></a> / <code>mcontrol</code> are set).</p> +</li> +</ol> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +From a hardware point of view these debug-mode-entry conditions are special traps (synchronous exceptions or +asynchronous interrupts) that are handled transparently by the control logic. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Whenever the CPU enters debug-mode it performs the following operations:</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p>wake-up CPU if it was send to sleep mode by the <code>wfi</code> instruction</p> +</li> +<li> +<p>switch to debug-mode privilege level</p> +</li> +<li> +<p>move the current program counter to <a href="#_dpc"><strong><code>dpc</code></strong></a></p> +</li> +<li> +<p>copy the hart&#8217;s current privilege level to the <code>prv</code> flags in <a href="#_dcsr"><strong><code>dcsr</code></strong></a></p> +</li> +<li> +<p>set <code>cause</code> in <a href="#_dcsr"><strong><code>dcsr</code></strong></a> according to the cause why debug mode is entered</p> +</li> +<li> +<p><strong>no update</strong> of <code>mtval</code>, <code>mcause</code>, <code>mtval</code> and <code>mstatus</code> CSRs</p> +</li> +<li> +<p>load the address configured via the CPU&#8217;s (<a href="#_cpu_top_entity_generics"><code>CPU_DEBUG_PARK_ADDR</code></a>) generic to the program counter jumping to the +"debugger park loop" code stored in the debug module (DM)</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><strong>When the CPU is in debug-mode:</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p>while in debug mode, the CPU executes the parking loop and - if requested by the DM - the program buffer</p> +</li> +<li> +<p>effective CPU privilege level is <code>machine</code> mode; any active physical memory protection (PMP) configuration is bypassed</p> +</li> +<li> +<p>the <code>wfi</code> instruction acts as a <code>nop</code> (also during single-stepping)</p> +</li> +<li> +<p>if an exception occurs while being in debug mode:</p> +<div class="ulist"> +<ul> +<li> +<p>if the exception was caused by any debug-mode entry action the CPU jumps to the normal entry point (defined by the +<a href="#_cpu_top_entity_generics"><code>CPU_DEBUG_PARK_ADDR</code></a> generic) of the park loop again (for example when executing <code>ebreak</code> while in debug-mode)</p> +</li> +<li> +<p>for all other exception sources the CPU jumps to the exception entry point (defined by the <a href="#_cpu_top_entity_generics"><code>CPU_DEBUG_EXC_ADDR</code></a> generic) +to signal an exception to the DM; the CPU restarts the park loop again afterwards</p> +</li> +</ul> +</div> +</li> +<li> +<p>interrupts are disabled; however, they will remain pending and will get executed after the CPU has left debug mode and is not being single-stepped</p> +</li> +<li> +<p>if the DM makes a resume request, the park loop exits and the CPU leaves debug mode (executing <code>dret</code>)</p> +</li> +<li> +<p>the standard counters <a href="#_machine_counter_and_timer_csrs">(Machine) Counter and Timer CSRs</a> <code>[m]cycle[h]</code> and <code>[m]instret[h]</code> are stopped</p> +</li> +<li> +<p>all <a href="#_hardware_performance_monitors_hpm_csrs">Hardware Performance Monitors (HPM) CSRs</a> are stopped</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>Debug mode is left either by executing the <code>dret</code> instruction or by performing a hardware reset of the CPU. +Executing <code>dret</code> outside of debug mode will raise an illegal instruction exception.</p> +</div> +<div class="paragraph"> +<p><strong>Whenever the CPU leaves debug mode it performs the following operations:</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p>set the hart&#8217;s current privilege level according to the <code>prv</code> flags of <a href="#_dcsr"><strong><code>dcsr</code></strong></a></p> +</li> +<li> +<p>restore the original program counter from <a href="#_dpc"><strong><code>dpc</code></strong></a> resuming normal operation</p> +</li> +</ul> +</div> +<div class="sect3"> +<h4 id="_cpu_debug_mode_csrs">5.4.1. CPU Debug Mode CSRs</h4> +<div class="paragraph"> +<p>Two additional CSRs are required by the "Minimal RISC-V Debug Specification": the debug mode control and status register +<code>dcsr</code> and the debug program counter <code>dpc</code>. An additional general purpose scratch register for debug-mode-only +(<code>dscratch0</code>) allows faster execution by having a fast-accessible backup register. These CSRs are only accessible if the CPU +is in debug mode. If these CSRs are accessed outside of debug mode an illegal instruction exception is raised.</p> +</div> +<div class="sect4"> +<h5 id="_dcsr"><strong><code>dcsr</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Debug control and status register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x7b0</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x40000410</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Sdext</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">This register is used to configure the debug mode environment and provides additional status information.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 108. Debug control and status register <code>dcsr</code> bits</caption> +<colgroup> +<col style="width: 8.3333%;"> +<col style="width: 16.6666%;"> +<col style="width: 8.3333%;"> +<col style="width: 66.6668%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [RISC-V]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:28</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>xdebugver</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0100</code>: CPU debug mode is compatible to spec. version 1.0</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">27:16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>000000000000</code>: <em>reserved</em></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">15</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>ebereakm</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ebreak</code> instructions in <code>machine</code> mode will <em>enter</em> debug mode when set</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">14</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>ebereakh</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: hypervisor mode not supported</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">13</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>ebereaks</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: supervisor mode not supported</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">12</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>ebereaku</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ebreak</code> instructions in <code>user</code> mode will <em>enter</em> debug mode when set</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">11</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>stepie</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: IRQs are disabled during single-stepping</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">10</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>stopcount</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code>: standard counters and HPMs are stopped when in debug mode</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">9</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>stoptime</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: timers increment as usual</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">8:6</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>cause</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">cause identifier: why debug mode was entered (see below)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">5</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">-</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: <em>reserved</em></p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>mprven</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code>: <code>mprv</code> in <a href="#_mstatus"><strong><code>mstatus</code></strong></a> is also evaluated when in debug mode</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">3</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>nmip</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: non-maskable interrupt is pending</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>step</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">enable single-stepping when set</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">1:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>prv</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">CPU privilege level before/after debug mode</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>Cause codes in <code>dcsr.cause</code> (highest priority first):</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>010</code> - triggered by hardware <a href="#_trigger_module">Trigger Module</a></p> +</li> +<li> +<p><code>001</code> - executed <code>EBREAK</code> instruction</p> +</li> +<li> +<p><code>011</code> - external halt request (from DM)</p> +</li> +<li> +<p><code>100</code> - return from single-stepping</p> +</li> +</ul> +</div> +</div> +<div class="sect4"> +<h5 id="_dpc"><strong><code>dpc</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Debug program counter</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x7b1</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Sdext</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The register is used to store the current program counter when debug mode is entered. The <code>dret</code> instruction will +return to the address stored in <code>dpc</code> by automatically moving <code>dpc</code> to the program counter.</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<code>dpc[0]</code> is hardwired to zero. If <code>IALIGN</code> = 32 (i.e. <a href="#_c_isa_extension"><code>C</code> ISA Extension</a> is disabled) then <code>dpc[1]</code> is also hardwired to zero. +</td> +</tr> +</table> +</div> +</div> +<div class="sect4"> +<h5 id="_dscratch0"><strong><code>dscratch0</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Debug scratch register 0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x7b2</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Sdext</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The register provides a general purpose debug mode-only scratch register.</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_trigger_module">5.5. Trigger Module</h3> +<div class="paragraph"> +<p>"Normal" software breakpoints (using GDB&#8217;s <code>b</code>/<code>break</code> command) are implemented by temporarily replacing the according +instruction word by an <code>[c.]ebreak</code> instruction. However, this is not possible when debugging code that is executed from +read-only memory (for example when debugging programs that are executed via the <a href="#_execute_in_place_module_xip">Execute In Place Module (XIP)</a>). +To circumvent this limitation a hardware trigger logic allows to (re-)enter debug-mode when instruction execution +reaches a programmable address. These "hardware-assisted breakpoints" are used by GDB&#8217;s <code>hb</code>/<code>hbreak</code> commands.</p> +</div> +<div class="paragraph"> +<p>The RISC-V <code>Sdtrig</code> ISA extension adds a programmable <em>trigger module</em> to the CPU core that is enabled via the +<a href="#_sdtrig_isa_extension"><code>Sdtrig</code> ISA Extension</a> generic. The trigger module implements a subset of the features described in the +"RISC-V Debug Specification / Trigger Module" and complies to version v1.0 of the <code>Sdtrig</code> spec.</p> +</div> +<div class="paragraph"> +<p>The NEORV32 trigger module features only a <em>single</em> trigger implementing a "type 6 - instruction address match" trigger. +This limitation is granted by the RISC-V debug spec and is sufficient to <strong>debug code executed from read-only memory (ROM)</strong>. +The trigger module can also be used independently of the CPU debug-mode / <code>Sdext</code> ISA extension. +Machine-mode software can use the trigger module to raise a breakpoint exception when instruction execution +reaches a programmed address.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Trigger Timing</div> +When enabled the address match trigger will fire <strong>BEFORE</strong> the instruction at the programmed address gets executed. +</td> +</tr> +</table> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +<div class="title">MEPC &amp; DPC CSRs</div> +The breakpoint exception when raised by the trigger module behaves different then the "normal" trapping (see +<a href="#_neorv32_trap_listing">NEORV32 Trap Listing</a>): <a href="#_mepc"><strong><code>mepc</code></strong></a> / <a href="#_dpc"><strong><code>dpc</code></strong></a> is set to the address of the next instruction that needs to be +executed to preserve the program flow. A "normal" breakpoint exception would set <a href="#_mepc"><strong><code>mepc</code></strong></a> / <a href="#_dpc"><strong><code>dpc</code></strong></a> to the address +of the actual <code>ebreak</code> instruction itself. +</td> +</tr> +</table> +</div> +<div class="sect3"> +<h4 id="_trigger_module_csrs">5.5.1. Trigger Module CSRs</h4> +<div class="paragraph"> +<p>The <code>Sdtrig</code> ISA extension adds 4 additional CSRs that are accessible from debug-mode and also from machine-mode. +Machine-mode write accesses can be ignored by setting ´dmode´ in <a href="#_tdata1"><strong><code>tdata1</code></strong></a>. This is automatically done by the debugger +if it uses the trigger module for implementing a "hardware breakpoint"</p> +</div> +<div class="sect4"> +<h5 id="_tselect"><strong><code>tselect</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger select register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x7a0</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Sdtrig</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">This CSR is hardwired to zero indicating there is only one trigger available. Any write access is ignored.</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect4"> +<h5 id="_tdata1"><strong><code>tdata1</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger data register 1, visible as trigger "type 6 match control" (<code>mcontrol6</code>)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x7a1</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x60000048</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Sdtrig</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">This CSR is used to configure the address match trigger using "type 6" format.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 109. Match Control CSR (<code>tdata1</code>) Bits</caption> +<colgroup> +<col style="width: 8.3333%;"> +<col style="width: 16.6666%;"> +<col style="width: 8.3333%;"> +<col style="width: 66.6668%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [RISC-V]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:28</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>type</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0100</code>: address match trigger type 6</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">27</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>dmode</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set to ignore write accesses to <a href="#_tdata1"><strong><code>tdata1</code></strong></a> and <a href="#_tdata2"><strong><code>tdata2</code></strong></a> from machine-mode; writable from debug-mode only</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">26</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>uncertain</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: trigger satisfies the configured conditions</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">25</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>hit1</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: hardwired to zero, only <code>hit0</code> is used</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">24</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>vs</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: VS-mode not supported</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">23</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>vu</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: VU-mode not supported</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">22</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>hit0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/c</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set when trigger has fired (<strong>BEFORE</strong> executing the triggering address); must be explicitly cleared by writing zero; writing 1 has no effect</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">21</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>select</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: only address matching is supported</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">20:19</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">reserved</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>00</code>: hardwired to zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">18:16</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>size</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>000</code>: match accesses of any size</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">15:12</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>action</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0000</code> = breakpoint exception on trigger match, <code>0001</code> = enter debug-mode on trigger match</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">11</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>chain</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: chaining is not supported as there is only one trigger</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">10:6</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>match</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0000</code>: equal-match only</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">6</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>m</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code>: trigger enabled when in machine-mode</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">5</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>uncertainen</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: feature not supported, hardwired to zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">4</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>s</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: supervisor-mode not supported</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">3</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>u</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>/<code>1</code>: trigger enabled when in user-mode, set if <code>U</code> ISA extension is enabled</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">2</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>execute</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/w</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">set to enable trigger matching on instruction address</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>store</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: store address/data matching not supported</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>load</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code>: load address/data matching not supported</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect4"> +<h5 id="_tdata2"><strong><code>tdata2</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger data register 2</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x7a2</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Sdtrig</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Since only the "address match trigger" type is supported, this r/w CSR is used to configure the address of the triggering instruction. +Note that the trigger module will fire <strong>before</strong> the instruction at the programmed address gets executed.</p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect4"> +<h5 id="_tinfo"><strong><code>tinfo</code></strong></h5> +<table class="tableblock frame-ends grid-none stretch"> +<colgroup> +<col style="width: 11.1111%;"> +<col style="width: 88.8889%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Trigger information register</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Address</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x7a4</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reset value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x01000006</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">ISA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Zicsr</code> &amp; <code>Sdtrig</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The CSR shows global trigger information (see below). Any write access is ignored.</p></td> +</tr> +</tbody> +</table> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 110. Trigger Info CSR (<code>tinfo</code>) Bits</caption> +<colgroup> +<col style="width: 8.3333%;"> +<col style="width: 16.6666%;"> +<col style="width: 8.3333%;"> +<col style="width: 66.6668%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">Bit</th> +<th class="tableblock halign-center valign-top">Name [RISC-V]</th> +<th class="tableblock halign-center valign-top">R/W</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">31:24</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>version</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x01</code>: compatible to spec. version v1.0</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">23:15</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">reserved</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x00</code>: hardwired to zero</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock">15:0</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>info</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">r/-</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0x0006</code>: only "type 6 trigger" is supported</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +</div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_legal">6. Legal</h2> +<div class="sectionbody"> +<div class="sect2"> +<h3 id="_about">About</h3> +<div class="exampleblock"> +<div class="content"> +<div class="paragraph"> +<p><strong>The NEORV32 RISC-V Processor</strong><br> +<a href="https://github.com/stnolting/neorv32" class="bare">https://github.com/stnolting/neorv32</a><br> +Stephan Nolting, M.Sc.<br> +🇪🇺 European Union<br> +<a href="mailto:stnolting@gmail.com">stnolting@gmail.com</a></p> +</div> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_license">License</h3> +<div class="paragraph"> +<p><strong>BSD 3-Clause License</strong></p> +</div> +<div class="paragraph"> +<p>Copyright (c) NEORV32 contributors. +Copyright (c) 2020 - 2024, Stephan Nolting. All rights reserved.</p> +</div> +<div class="paragraph"> +<p>Redistribution and use in source and binary forms, with or without modification, are permitted provided that +the following conditions are met:</p> +</div> +<div class="olist arabic"> +<ol class="arabic"> +<li> +<p>Redistributions of source code must retain the above copyright notice, this list of conditions and the +following disclaimer.</p> +</li> +<li> +<p>Redistributions in binary form must reproduce the above copyright notice, this list of conditions and +the following disclaimer in the documentation and/or other materials provided with the distribution.</p> +</li> +<li> +<p>Neither the name of the copyright holder nor the names of its contributors may be used to endorse or +promote products derived from this software without specific prior written permission.</p> +</li> +</ol> +</div> +<div class="paragraph"> +<p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">SPDX Identifier</div> +<code>SPDX-License-Identifier: BSD-3-Clause</code> +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_proprietary_notice">Proprietary Notice</h3> +<div class="ulist"> +<ul> +<li> +<p>"GitHub" is a subsidiary of Microsoft Corporation.</p> +</li> +<li> +<p>"Vivado" and "Artix" are trademarks of AMD Inc.</p> +</li> +<li> +<p>"AXI", "AXI", "AXI4-Lite", "AXI4-Stream", "AHB", "AHB3" and "AHB3-Lite" are trademarks of Arm Holdings plc.</p> +</li> +<li> +<p>"ModelSim" is a trademark of Mentor Graphics – A Siemens Business.</p> +</li> +<li> +<p>"Quartus [Prime]" and "Cyclone" are trademarks of Intel Corporation.</p> +</li> +<li> +<p>"iCE40", "UltraPlus" and "Radiant" are trademarks of Lattice Semiconductor Corporation.</p> +</li> +<li> +<p>"GateMate" is a trademark of Cologne Chip AG.</p> +</li> +<li> +<p>"Windows" is a trademark of Microsoft Corporation.</p> +</li> +<li> +<p>"Tera Term" copyright by T. Teranishi.</p> +</li> +<li> +<p>"NeoPixel" is a trademark of Adafruit Industries.</p> +</li> +<li> +<p>"Segger Embedded Studio" and "J-Link" are trademarks of Segger Microcontroller Systems GmbH.</p> +</li> +<li> +<p>Images/figures made with <em>Microsoft Power Point</em>.</p> +</li> +<li> +<p>Timing diagrams made with <em>WaveDrom Editor</em>.</p> +</li> +<li> +<p>Documentation made with <code>asciidoctor</code>.</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>All further/unreferenced projects/products/brands belong to their according copyright holders. +No copyright infringement intended.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_disclaimer">Disclaimer</h3> +<div class="paragraph"> +<p>This project is released under the BSD 3-Clause license. NO COPYRIGHT INFRINGEMENT INTENDED. +Other implied or used projects/sources might have different licensing – see their according +documentation for more information.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_limitation_of_liability_for_external_links">Limitation of Liability for External Links</h3> +<div class="paragraph"> +<p>This document contains links to the websites of third parties ("external links"). As the content of these websites +is not under our control, we cannot assume any liability for such external content. In all cases, the provider of +information of the linked websites is liable for the content and accuracy of the information provided. At the +point in time when the links were placed, no infringements of the law were recognizable to us. As soon as an +infringement of the law becomes known to us, we will immediately remove the link in question.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_citing">Citing</h3> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +This is an open-source project that is free of charge. Use this project in any way you like +(as long as it complies to the permissive license). Please cite it appropriately. 👍 +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Contributors &amp; Community 🤝</div> +Please add as many <a href="https://github.com/stnolting/neorv32/graphs/contributors">contributors</a> as possible to the <code>author</code> field.<br> +This project would not be where it is without them. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">DOI</div> +This project provides a <em>digital object identifier</em> provided by <a href="https://zenodo.org">zenodo</a>: +<a href="https://doi.org/10.5281/zenodo.5018888"><span class="image"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.5018888.svg" alt="zenodo.5018888" title="zenodo"></span></a> +</td> +</tr> +</table> +</div> +</div> +<div class="sect2"> +<h3 id="_acknowledgments">Acknowledgments</h3> +<div class="paragraph"> +<p><strong>A big shout-out to the community and all the <a href="https://github.com/stnolting/neorv32/graphs/contributors">contributors</a>, +who helped improving this project! This project would not be where it is without them. ❤️</strong></p> +</div> +<div class="paragraph"> +<p><a href="https://riscv.org">RISC-V</a> - instruction sets want to be free!</p> +</div> +<div class="paragraph"> +<p>Continuous integration provided by <a href="https://github.com/features/actions">GitHub Actions</a> +and powered by <a href="https://github.com/ghdl/ghdl">GHDL</a>.</p> +</div> +</div> +</div> +</div> +</div> +<div id="footer"> +<div id="footer-text"> +Version v1.10.8-r25-g208ad4ef<br> +</div> +</div> +<script type="text/x-mathjax-config"> +MathJax.Hub.Config({ + messageStyle: "none", + tex2jax: { + inlineMath: [["\\(", "\\)"]], + displayMath: [["\\[", "\\]"]], + ignoreClass: "nostem|nolatexmath" + }, + asciimath2jax: { + delimiters: [["\\$", "\\$"]], + ignoreClass: "nostem|noasciimath" + }, + TeX: { equationNumbers: { autoNumber: "none" } } +}) +MathJax.Hub.Register.StartupHook("AsciiMath Jax Ready", function () { + MathJax.InputJax.AsciiMath.postfilterHooks.Add(function (data, node) { + if ((node = data.script.parentNode) && (node = node.parentNode) && node.classList.contains("stemblock")) { + data.math.root.display = "block" + } + return data + }) +}) +</script> +<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-MML-AM_HTMLorMML"></script> +</body> +</html> \ No newline at end of file diff --git a/sw/annotated.html b/sw/annotated.html new file mode 100644 index 0000000000..f2083af655 --- /dev/null +++ b/sw/annotated.html @@ -0,0 +1,130 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Data Structures</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="header"> + <div class="headertitle"><div class="title">Data Structures</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory"> +<table class="directory"> +<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structdate__t.html" target="_self">date_t</a></td><td class="desc"></td></tr> +<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionfloat__conv__t.html" target="_self">float_conv_t</a></td><td class="desc"></td></tr> +<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__cfs__t.html" target="_self">neorv32_cfs_t</a></td><td class="desc"></td></tr> +<tr id="row_3_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__clint__t.html" target="_self">neorv32_clint_t</a></td><td class="desc"></td></tr> +<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__crc__t.html" target="_self">neorv32_crc_t</a></td><td class="desc"></td></tr> +<tr id="row_5_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__dma__t.html" target="_self">neorv32_dma_t</a></td><td class="desc"></td></tr> +<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__gpio__t.html" target="_self">neorv32_gpio_t</a></td><td class="desc"></td></tr> +<tr id="row_7_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__gptmr__t.html" target="_self">neorv32_gptmr_t</a></td><td class="desc"></td></tr> +<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__neoled__t.html" target="_self">neorv32_neoled_t</a></td><td class="desc"></td></tr> +<tr id="row_9_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__onewire__t.html" target="_self">neorv32_onewire_t</a></td><td class="desc"></td></tr> +<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__pwm__t.html" target="_self">neorv32_pwm_t</a></td><td class="desc"></td></tr> +<tr id="row_11_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__sdi__t.html" target="_self">neorv32_sdi_t</a></td><td class="desc"></td></tr> +<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__slink__t.html" target="_self">neorv32_slink_t</a></td><td class="desc"></td></tr> +<tr id="row_13_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__spi__t.html" target="_self">neorv32_spi_t</a></td><td class="desc"></td></tr> +<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__sysinfo__t.html" target="_self">neorv32_sysinfo_t</a></td><td class="desc"></td></tr> +<tr id="row_15_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__trng__t.html" target="_self">neorv32_trng_t</a></td><td class="desc"></td></tr> +<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__twd__t.html" target="_self">neorv32_twd_t</a></td><td class="desc"></td></tr> +<tr id="row_17_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__twi__t.html" target="_self">neorv32_twi_t</a></td><td class="desc"></td></tr> +<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__uart__t.html" target="_self">neorv32_uart_t</a></td><td class="desc"></td></tr> +<tr id="row_19_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__wdt__t.html" target="_self">neorv32_wdt_t</a></td><td class="desc"></td></tr> +<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__xip__t.html" target="_self">neorv32_xip_t</a></td><td class="desc"></td></tr> +<tr id="row_21_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structneorv32__xirq__t.html" target="_self">neorv32_xirq_t</a></td><td class="desc"></td></tr> +<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structrecord.html" target="_self">record</a></td><td class="desc"></td></tr> +<tr id="row_23_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionsubwords16__t.html" target="_self">subwords16_t</a></td><td class="desc"></td></tr> +<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionsubwords32__t.html" target="_self">subwords32_t</a></td><td class="desc"></td></tr> +<tr id="row_25_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionsubwords64__t.html" target="_self">subwords64_t</a></td><td class="desc"></td></tr> +<tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structt__neorv32__spi.html" target="_self">t_neorv32_spi</a></td><td class="desc"></td></tr> +</table> +</div><!-- directory --> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/atomic__test_2main_8c.html b/sw/atomic__test_2main_8c.html new file mode 100644 index 0000000000..248280cf7b --- /dev/null +++ b/sw/atomic__test_2main_8c.html @@ -0,0 +1,308 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/atomic_test/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_449d8ba5f8b78dc90092f20d15a2386a.html">atomic_test</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Test program for the NEORV32 'A' ISA extension - check the emulation of the AMO (read-modify-write) operations. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">User configuration</h2></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;(19200)</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a83792c34853f1d2801b59ad46adc7e1e" id="r_a83792c34853f1d2801b59ad46adc7e1e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a83792c34853f1d2801b59ad46adc7e1e">NUM_TEST_CASES</a>&#160;&#160;&#160;(1000)</td></tr> +<tr class="separator:a83792c34853f1d2801b59ad46adc7e1e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a87f296d7594bb8178cf76f0c045b7013" id="r_a87f296d7594bb8178cf76f0c045b7013"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a87f296d7594bb8178cf76f0c045b7013">SILENT_MODE</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a87f296d7594bb8178cf76f0c045b7013"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9141e95a5f98420ddf8a43e6d20ff6dc" id="r_a9141e95a5f98420ddf8a43e6d20ff6dc"><td class="memItemLeft" align="right" valign="top">volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9141e95a5f98420ddf8a43e6d20ff6dc">amo_var</a></td></tr> +<tr class="separator:a9141e95a5f98420ddf8a43e6d20ff6dc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4f4c6d8481b4100f90955ba5a70428a4" id="r_a4f4c6d8481b4100f90955ba5a70428a4"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4f4c6d8481b4100f90955ba5a70428a4">check_result</a> (uint32_t num, uint32_t amo_var_old, uint32_t amo_var_pre, uint32_t amo_var_new, uint32_t <a class="el" href="#a9141e95a5f98420ddf8a43e6d20ff6dc">amo_var</a>)</td></tr> +<tr class="separator:a4f4c6d8481b4100f90955ba5a70428a4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a99377a057d14aaa9b45f8cab890e8cf7" id="r_a99377a057d14aaa9b45f8cab890e8cf7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a99377a057d14aaa9b45f8cab890e8cf7">print_report</a> (int num_err, int num_tests)</td></tr> +<tr class="separator:a99377a057d14aaa9b45f8cab890e8cf7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aafcbf639ae4f66e5dfe9dea511a59f9d" id="r_aafcbf639ae4f66e5dfe9dea511a59f9d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aafcbf639ae4f66e5dfe9dea511a59f9d">trap_handler_emulate_amo</a> (void)</td></tr> +<tr class="separator:aafcbf639ae4f66e5dfe9dea511a59f9d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Test program for the NEORV32 'A' ISA extension - check the emulation of the AMO (read-modify-write) operations. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;(19200)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a83792c34853f1d2801b59ad46adc7e1e" name="a83792c34853f1d2801b59ad46adc7e1e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a83792c34853f1d2801b59ad46adc7e1e">&#9670;&#160;</a></span>NUM_TEST_CASES</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NUM_TEST_CASES&#160;&#160;&#160;(1000)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a87f296d7594bb8178cf76f0c045b7013" name="a87f296d7594bb8178cf76f0c045b7013"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a87f296d7594bb8178cf76f0c045b7013">&#9670;&#160;</a></span>SILENT_MODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SILENT_MODE&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a4f4c6d8481b4100f90955ba5a70428a4" name="a4f4c6d8481b4100f90955ba5a70428a4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4f4c6d8481b4100f90955ba5a70428a4">&#9670;&#160;</a></span>check_result()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t check_result </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>num</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>amo_var_old</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>amo_var_pre</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>amo_var_new</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>amo_var</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check results (reference (SW) vs actual hardware).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">num</td><td>Test case number </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">amo_var_old</td><td>Initial value of atomic variable. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">amo_var_pre</td><td>Value of atomic variable read from memory (before operation). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">amo_var_new</td><td>Expected new value of atomic variable. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">amo_var</td><td>Actual new value of atomic variable. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>zero if results are correct. </dd></dl> + +</div> +</div> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function; test all provided AMO emulation functions.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the RISC-V A CPU extension.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Irrelevant. </dd></dl> + +</div> +</div> +<a id="a99377a057d14aaa9b45f8cab890e8cf7" name="a99377a057d14aaa9b45f8cab890e8cf7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a99377a057d14aaa9b45f8cab890e8cf7">&#9670;&#160;</a></span>print_report()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void print_report </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>num_err</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>num_tests</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print test report.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">num_err</td><td>Number or errors in this test. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">num_tests</td><td>Total number of conducted tests. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="aafcbf639ae4f66e5dfe9dea511a59f9d" name="aafcbf639ae4f66e5dfe9dea511a59f9d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aafcbf639ae4f66e5dfe9dea511a59f9d">&#9670;&#160;</a></span>trap_handler_emulate_amo()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void trap_handler_emulate_amo </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Emulate atomic memory operation.</p> +<dl class="section note"><dt>Note</dt><dd>This is a RTE "second-level" trap handler. </dd></dl> + +</div> +</div> +<h2 class="groupheader">Variable Documentation</h2> +<a id="a9141e95a5f98420ddf8a43e6d20ff6dc" name="a9141e95a5f98420ddf8a43e6d20ff6dc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9141e95a5f98420ddf8a43e6d20ff6dc">&#9670;&#160;</a></span>amo_var</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">volatile uint32_t amo_var</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/bc_s.png b/sw/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)<h;3K|Lk000e1NJLTq000O80015c1^@s65rAI}0007ONkl<ZcmeI5 z%WD%+6voe;xyj6=NhXt~4{e$zF*P<SZp4L@2Hd!iQY<tJD@e5{RU55hl&Talf{KWb zN*6A=C`Gqz5#NvcXzNOCOH(I9n<#?l<k5ws2omoMCgj%s3y1G=&gJ~>y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE<Gz)cj&*s5lRy$b&*W@2j<GZEpXZ$P|Z!4Q$_|`5gj> z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/sw/bc_sd.png b/sw/bc_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca888dc71049713b35c351933a8d0f36180bf1 GIT binary patch literal 635 zcmV->0)+jEP)<h;3K|Lk000e1NJLTq000O80015c1^@s65rAI}0006)Nkl<ZcmeI5 z%WD%+6vn?hGsz_BG}An0CMId~a1z?2@1!l&KD1&hN-bD~LQoLFg%1h=btAfQrT8}# z3Wb7hbmdl%7_p+bkU-OdEt;+haU+O==ZX_E^FIvdH|INN4tMUkkG+_kSV4Z~DiQ-{ z;P(0visfy<EG{=E&fjlNuRPJr;xe4DqlF9WF1aJGbq{R<c>Jwi0r1~gdSq#w{Bu1q z`craw(p2!<S-^e8ry2oOOW$qO-@LFDq=px{zr>hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd<Pyf6{jQBpfP;O2vJy5MYx^t)6*`&7L zk1yW4Y2_GywLP=M2DSV{5Z#%B-6~kD_XGf&edtglet$T5qp?$c$)cGl05-eEMCrPb z82v&mFR>%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ literal 0 HcmV?d00001 diff --git a/sw/bootloader_8c.html b/sw/bootloader_8c.html new file mode 100644 index 0000000000..104940d36c --- /dev/null +++ b/sw/bootloader_8c.html @@ -0,0 +1,1188 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/bootloader/bootloader.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_4316bb0e553b51b8b65560981547ce0f.html">bootloader</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#define-members">Macros</a> &#124; +<a href="#enum-members">Enumerations</a> &#124; +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">bootloader.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Default NEORV32 bootloader. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +<code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr class="memitem:a0035ad41f622dbfc2412318a8ed39257" id="r_a0035ad41f622dbfc2412318a8ed39257"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0035ad41f622dbfc2412318a8ed39257">EXE_SIGNATURE</a>&#160;&#160;&#160;0x4788CAFE</td></tr> +<tr class="separator:a0035ad41f622dbfc2412318a8ed39257"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Bootloader configuration (override via console to customize);</div></td></tr> +<tr><td colspan="2"><div class="groupText"><p>default values are used if not explicitly customized </p> +</div></td></tr> +<tr class="memitem:a18936dc79b9e5aa84df016b046a6b977" id="r_a18936dc79b9e5aa84df016b046a6b977"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a18936dc79b9e5aa84df016b046a6b977">EXE_BASE_ADDR</a>&#160;&#160;&#160;0x00000000UL</td></tr> +<tr class="separator:a18936dc79b9e5aa84df016b046a6b977"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af1c2f103ac6e3183f08b39099fab2be9" id="r_af1c2f103ac6e3183f08b39099fab2be9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af1c2f103ac6e3183f08b39099fab2be9">UART_EN</a>&#160;&#160;&#160;1</td></tr> +<tr class="separator:af1c2f103ac6e3183f08b39099fab2be9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1fac9153314479ad0ad495d752f0224a" id="r_a1fac9153314479ad0ad495d752f0224a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1fac9153314479ad0ad495d752f0224a">UART_BAUD</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:a1fac9153314479ad0ad495d752f0224a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a20e93d623ce07939c3fdd53898f9d583" id="r_a20e93d623ce07939c3fdd53898f9d583"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a20e93d623ce07939c3fdd53898f9d583">UART_HW_HANDSHAKE_EN</a>&#160;&#160;&#160;0</td></tr> +<tr class="separator:a20e93d623ce07939c3fdd53898f9d583"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa9696325b450773c7a87c991abca3a54" id="r_aa9696325b450773c7a87c991abca3a54"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa9696325b450773c7a87c991abca3a54">STATUS_LED_EN</a>&#160;&#160;&#160;1</td></tr> +<tr class="separator:aa9696325b450773c7a87c991abca3a54"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a089a71f836911c71b3f73fdd3b4b890b" id="r_a089a71f836911c71b3f73fdd3b4b890b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a089a71f836911c71b3f73fdd3b4b890b">STATUS_LED_PIN</a>&#160;&#160;&#160;0</td></tr> +<tr class="separator:a089a71f836911c71b3f73fdd3b4b890b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af6fcb607a9c320da869b72aa30893a69" id="r_af6fcb607a9c320da869b72aa30893a69"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af6fcb607a9c320da869b72aa30893a69">AUTO_BOOT_TIMEOUT</a>&#160;&#160;&#160;10</td></tr> +<tr class="separator:af6fcb607a9c320da869b72aa30893a69"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aea75cf0485ce0a4ea320eba994859686" id="r_aea75cf0485ce0a4ea320eba994859686"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aea75cf0485ce0a4ea320eba994859686">SPI_EN</a>&#160;&#160;&#160;1</td></tr> +<tr class="separator:aea75cf0485ce0a4ea320eba994859686"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa2132454aada86216009f3af206899b1" id="r_aa2132454aada86216009f3af206899b1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa2132454aada86216009f3af206899b1">SPI_FLASH_CS</a>&#160;&#160;&#160;0</td></tr> +<tr class="separator:aa2132454aada86216009f3af206899b1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afe60a31c8561952f2f734fd67e6f7406" id="r_afe60a31c8561952f2f734fd67e6f7406"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afe60a31c8561952f2f734fd67e6f7406">SPI_FLASH_ADDR_BYTES</a>&#160;&#160;&#160;3</td></tr> +<tr class="separator:afe60a31c8561952f2f734fd67e6f7406"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a00924a8ba223b2ca0e7031259b292c84" id="r_a00924a8ba223b2ca0e7031259b292c84"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a00924a8ba223b2ca0e7031259b292c84">SPI_FLASH_SECTOR_SIZE</a>&#160;&#160;&#160;65536</td></tr> +<tr class="separator:a00924a8ba223b2ca0e7031259b292c84"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a709071a651213770b4efe6e6e055ec3d" id="r_a709071a651213770b4efe6e6e055ec3d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a709071a651213770b4efe6e6e055ec3d">SPI_FLASH_CLK_PRSC</a>&#160;&#160;&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9">CLK_PRSC_8</a></td></tr> +<tr class="separator:a709071a651213770b4efe6e6e055ec3d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a418adcf57119600c3580fd2297d28de0" id="r_a418adcf57119600c3580fd2297d28de0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a418adcf57119600c3580fd2297d28de0">SPI_BOOT_BASE_ADDR</a>&#160;&#160;&#160;0x00400000UL</td></tr> +<tr class="separator:a418adcf57119600c3580fd2297d28de0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2cf31934b909299fb93bb5eebdbc7c9e" id="r_a2cf31934b909299fb93bb5eebdbc7c9e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2cf31934b909299fb93bb5eebdbc7c9e">XIP_EN</a>&#160;&#160;&#160;1</td></tr> +<tr class="separator:a2cf31934b909299fb93bb5eebdbc7c9e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader"></div></td></tr> +<tr class="memitem:aff6b53dd58cea43d24393a9a2f79e772" id="r_aff6b53dd58cea43d24393a9a2f79e772"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aff6b53dd58cea43d24393a9a2f79e772">xstr</a>(a)</td></tr> +<tr class="separator:aff6b53dd58cea43d24393a9a2f79e772"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af6cf19e40e97afb5a7c29f7b439d091d" id="r_af6cf19e40e97afb5a7c29f7b439d091d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af6cf19e40e97afb5a7c29f7b439d091d">str</a>(a)</td></tr> +<tr class="separator:af6cf19e40e97afb5a7c29f7b439d091d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0e5a66f68ecc7a6f42088f349707e852" id="r_a0e5a66f68ecc7a6f42088f349707e852"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0e5a66f68ecc7a6f42088f349707e852">PRINT_TEXT</a>(...)</td></tr> +<tr class="separator:a0e5a66f68ecc7a6f42088f349707e852"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2f5cc04cf9c85f5d2958b384e053053b" id="r_a2f5cc04cf9c85f5d2958b384e053053b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2f5cc04cf9c85f5d2958b384e053053b">PRINT_XNUM</a>(a)</td></tr> +<tr class="separator:a2f5cc04cf9c85f5d2958b384e053053b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a999b04603115ce08b0cb33e333312480" id="r_a999b04603115ce08b0cb33e333312480"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a999b04603115ce08b0cb33e333312480">PRINT_GETC</a>(a)</td></tr> +<tr class="separator:a999b04603115ce08b0cb33e333312480"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa7afbe8348ebd1a876a4d247553292e9" id="r_aa7afbe8348ebd1a876a4d247553292e9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa7afbe8348ebd1a876a4d247553292e9">PRINT_PUTC</a>(a)</td></tr> +<tr class="separator:aa7afbe8348ebd1a876a4d247553292e9"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a> +Enumerations</h2></td></tr> +<tr class="memitem:abcbf77626fdd0b475d245f836eab7a83" id="r_abcbf77626fdd0b475d245f836eab7a83"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abcbf77626fdd0b475d245f836eab7a83">EXE_STREAM_SOURCE_enum</a> { <a class="el" href="#abcbf77626fdd0b475d245f836eab7a83ab149261ddf3f08e44e9d2538e384f58f">EXE_STREAM_UART</a> = 0 +, <a class="el" href="#abcbf77626fdd0b475d245f836eab7a83a98526cd8f81d570c57d98193b32cf114">EXE_STREAM_FLASH</a> = 1 + }</td></tr> +<tr class="separator:abcbf77626fdd0b475d245f836eab7a83"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa0c639898508ff8e4fab6290101f3088" id="r_aa0c639898508ff8e4fab6290101f3088"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa0c639898508ff8e4fab6290101f3088">ERROR_CODES_enum</a> { <a class="el" href="#aa0c639898508ff8e4fab6290101f3088ad41014563cb3ca69ab69b94d43e97caa">ERROR_SIGNATURE</a> = 0 +, <a class="el" href="#aa0c639898508ff8e4fab6290101f3088a2d77ed1c715fb969a1faa01c71625f2d">ERROR_SIZE</a> = 1 +, <a class="el" href="#aa0c639898508ff8e4fab6290101f3088a471ebe6c0766abc6fa4e82a09bfdb985">ERROR_CHECKSUM</a> = 2 +, <a class="el" href="#aa0c639898508ff8e4fab6290101f3088a684d6723fa25e7651e13d99fb249363c">ERROR_FLASH</a> = 3 + }</td></tr> +<tr class="separator:aa0c639898508ff8e4fab6290101f3088"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa5e5723e4cbf83805c3b1197cd401fed" id="r_aa5e5723e4cbf83805c3b1197cd401fed"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa5e5723e4cbf83805c3b1197cd401fed">SPI_FLASH_CMD_enum</a> { <br /> +&#160;&#160;<a class="el" href="#aa5e5723e4cbf83805c3b1197cd401feda31c8d698c551d081a0adeafb988ed49e">SPI_FLASH_CMD_PAGE_PROGRAM</a> = 0x02 +, <a class="el" href="#aa5e5723e4cbf83805c3b1197cd401feda6c1994ba2cfd97e0c77dcdf8bbdfdfa6">SPI_FLASH_CMD_READ</a> = 0x03 +, <a class="el" href="#aa5e5723e4cbf83805c3b1197cd401fedaa91d3c1d788b21fc798a5976c9f0da77">SPI_FLASH_CMD_WRITE_DISABLE</a> = 0x04 +, <a class="el" href="#aa5e5723e4cbf83805c3b1197cd401feda5fbc6551a10549b38e5ab4a76c38f214">SPI_FLASH_CMD_READ_STATUS</a> = 0x05 +, <br /> +&#160;&#160;<a class="el" href="#aa5e5723e4cbf83805c3b1197cd401feda152e091e93778f217f8b766298351513">SPI_FLASH_CMD_WRITE_ENABLE</a> = 0x06 +, <a class="el" href="#aa5e5723e4cbf83805c3b1197cd401feda25bf16cd42b1fd1d95e0957b5be137d2">SPI_FLASH_CMD_WAKE</a> = 0xAB +, <a class="el" href="#aa5e5723e4cbf83805c3b1197cd401fedacd62141d6331f66e31bd252e2a92b836">SPI_FLASH_CMD_SECTOR_ERASE</a> = 0xD8 +<br /> + }</td></tr> +<tr class="separator:aa5e5723e4cbf83805c3b1197cd401fed"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a97299f563ebc1fca4c663b025a15136f" id="r_a97299f563ebc1fca4c663b025a15136f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a97299f563ebc1fca4c663b025a15136f">SPI_FLASH_SREG_enum</a> { <a class="el" href="#a97299f563ebc1fca4c663b025a15136fa133cd87673ce9a612da494583e03dae9">FLASH_SREG_BUSY</a> = 0 +, <a class="el" href="#a97299f563ebc1fca4c663b025a15136fa22e8c983d74430ea0930e37781e88bf9">FLASH_SREG_WEL</a> = 1 + }</td></tr> +<tr class="separator:a97299f563ebc1fca4c663b025a15136f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a165a347c51d8aae06a564a2f297f2feb" id="r_a165a347c51d8aae06a564a2f297f2feb"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a165a347c51d8aae06a564a2f297f2feb">NEORV32_EXECUTABLE_enum</a> { <a class="el" href="#a165a347c51d8aae06a564a2f297f2feba61100996f309c45b8b628ade2e3acc7f">EXE_OFFSET_SIGNATURE</a> = 0 +, <a class="el" href="#a165a347c51d8aae06a564a2f297f2febacc430caa4bff2fef4568c757893fe2fe">EXE_OFFSET_SIZE</a> = 4 +, <a class="el" href="#a165a347c51d8aae06a564a2f297f2febabc27a855096a70dca0f8bc148a123be4">EXE_OFFSET_CHECKSUM</a> = 8 +, <a class="el" href="#a165a347c51d8aae06a564a2f297f2febaea032c54a21057710ef2021638972ce6">EXE_OFFSET_DATA</a> = 12 + }</td></tr> +<tr class="separator:a165a347c51d8aae06a564a2f297f2feb"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:af13b4b3d5e6597feacf331e6d16b08e9" id="r_af13b4b3d5e6597feacf331e6d16b08e9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af13b4b3d5e6597feacf331e6d16b08e9">bootloader_trap_handler</a> (void)</td></tr> +<tr class="separator:af13b4b3d5e6597feacf331e6d16b08e9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a402ea961bfc2ffeee61e3a7c330b1559" id="r_a402ea961bfc2ffeee61e3a7c330b1559"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a402ea961bfc2ffeee61e3a7c330b1559">print_help</a> (void)</td></tr> +<tr class="separator:a402ea961bfc2ffeee61e3a7c330b1559"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae8de91537ac2782f0f0ebc3b2d4fb1df" id="r_ae8de91537ac2782f0f0ebc3b2d4fb1df"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae8de91537ac2782f0f0ebc3b2d4fb1df">start_app</a> (int boot_xip)</td></tr> +<tr class="separator:ae8de91537ac2782f0f0ebc3b2d4fb1df"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac18819795adb6dbdd52b0587e7fbb569" id="r_ac18819795adb6dbdd52b0587e7fbb569"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac18819795adb6dbdd52b0587e7fbb569">get_exe</a> (int src)</td></tr> +<tr class="separator:ac18819795adb6dbdd52b0587e7fbb569"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ababfffe8e7036179e150ad3b9bda3a74" id="r_ababfffe8e7036179e150ad3b9bda3a74"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ababfffe8e7036179e150ad3b9bda3a74">save_exe</a> (void)</td></tr> +<tr class="separator:ababfffe8e7036179e150ad3b9bda3a74"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac58d9f7dc79a549bde1cb50f619c19af" id="r_ac58d9f7dc79a549bde1cb50f619c19af"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac58d9f7dc79a549bde1cb50f619c19af">get_exe_word</a> (int src, uint32_t addr)</td></tr> +<tr class="separator:ac58d9f7dc79a549bde1cb50f619c19af"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3bdfe2f25b1bfb42f80624ffff22ab01" id="r_a3bdfe2f25b1bfb42f80624ffff22ab01"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3bdfe2f25b1bfb42f80624ffff22ab01">system_error</a> (uint8_t err_code)</td></tr> +<tr class="separator:a3bdfe2f25b1bfb42f80624ffff22ab01"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a70b7d5c3b3ae97e4e72e84c4bc28fb8a" id="r_a70b7d5c3b3ae97e4e72e84c4bc28fb8a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a70b7d5c3b3ae97e4e72e84c4bc28fb8a">print_hex_word</a> (uint32_t num)</td></tr> +<tr class="separator:a70b7d5c3b3ae97e4e72e84c4bc28fb8a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1fbdccc60f05756213c9f3d64bac6d47" id="r_a1fbdccc60f05756213c9f3d64bac6d47"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1fbdccc60f05756213c9f3d64bac6d47">spi_flash_wakeup</a> (void)</td></tr> +<tr class="separator:a1fbdccc60f05756213c9f3d64bac6d47"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1919595ed2232aebb3e774b916ab1662" id="r_a1919595ed2232aebb3e774b916ab1662"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1919595ed2232aebb3e774b916ab1662">spi_flash_check</a> (void)</td></tr> +<tr class="separator:a1919595ed2232aebb3e774b916ab1662"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a09e72e2debdd94929b2be4c7713d5e17" id="r_a09e72e2debdd94929b2be4c7713d5e17"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a09e72e2debdd94929b2be4c7713d5e17">spi_flash_read_byte</a> (uint32_t addr)</td></tr> +<tr class="separator:a09e72e2debdd94929b2be4c7713d5e17"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a006c27b7d80897b78ab8cd83a391331f" id="r_a006c27b7d80897b78ab8cd83a391331f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a006c27b7d80897b78ab8cd83a391331f">spi_flash_write_byte</a> (uint32_t addr, uint8_t wdata)</td></tr> +<tr class="separator:a006c27b7d80897b78ab8cd83a391331f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a717c72166af7c2ff7e73bd0b47128338" id="r_a717c72166af7c2ff7e73bd0b47128338"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a717c72166af7c2ff7e73bd0b47128338">spi_flash_write_word</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:a717c72166af7c2ff7e73bd0b47128338"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0d877f0611dfcee32a483c8a3660eb1b" id="r_a0d877f0611dfcee32a483c8a3660eb1b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0d877f0611dfcee32a483c8a3660eb1b">spi_flash_erase_sector</a> (uint32_t addr)</td></tr> +<tr class="separator:a0d877f0611dfcee32a483c8a3660eb1b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9642e28ef2baec5b356ad9a70970d0e6" id="r_a9642e28ef2baec5b356ad9a70970d0e6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9642e28ef2baec5b356ad9a70970d0e6">spi_flash_write_enable</a> (void)</td></tr> +<tr class="separator:a9642e28ef2baec5b356ad9a70970d0e6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a82d26a2d6293ed7fd44a5c622adfbd45" id="r_a82d26a2d6293ed7fd44a5c622adfbd45"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a82d26a2d6293ed7fd44a5c622adfbd45">spi_flash_write_disable</a> (void)</td></tr> +<tr class="separator:a82d26a2d6293ed7fd44a5c622adfbd45"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a005966cd0b32f3d5c041028c4b1c99f5" id="r_a005966cd0b32f3d5c041028c4b1c99f5"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a005966cd0b32f3d5c041028c4b1c99f5">spi_flash_read_status</a> (void)</td></tr> +<tr class="separator:a005966cd0b32f3d5c041028c4b1c99f5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6a8caddda6e729d747726471b0b0f742" id="r_a6a8caddda6e729d747726471b0b0f742"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6a8caddda6e729d747726471b0b0f742">spi_flash_write_addr</a> (uint32_t addr)</td></tr> +<tr class="separator:a6a8caddda6e729d747726471b0b0f742"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a840291bc02cba5474a4cb46a9b9566fe" id="r_a840291bc02cba5474a4cb46a9b9566fe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a840291bc02cba5474a4cb46a9b9566fe">main</a> (void)</td></tr> +<tr class="separator:a840291bc02cba5474a4cb46a9b9566fe"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:a6fea855ffe2fa0cd5ea9f98c0d5adc4d" id="r_a6fea855ffe2fa0cd5ea9f98c0d5adc4d"><td class="memItemLeft" align="right" valign="top">const char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6fea855ffe2fa0cd5ea9f98c0d5adc4d">error_message</a> [4][5]</td></tr> +<tr class="separator:a6fea855ffe2fa0cd5ea9f98c0d5adc4d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0f9fcfdf758260b9b79b6eda063dd87a" id="r_a0f9fcfdf758260b9b79b6eda063dd87a"><td class="memItemLeft" align="right" valign="top">volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0f9fcfdf758260b9b79b6eda063dd87a">exe_available</a></td></tr> +<tr class="separator:a0f9fcfdf758260b9b79b6eda063dd87a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5fa6b109bf211d1768f84c9d38eef240" id="r_a5fa6b109bf211d1768f84c9d38eef240"><td class="memItemLeft" align="right" valign="top">volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5fa6b109bf211d1768f84c9d38eef240">getting_exe</a></td></tr> +<tr class="separator:a5fa6b109bf211d1768f84c9d38eef240"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Default NEORV32 bootloader. </p> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="af6fcb607a9c320da869b72aa30893a69" name="af6fcb607a9c320da869b72aa30893a69"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af6fcb607a9c320da869b72aa30893a69">&#9670;&#160;</a></span>AUTO_BOOT_TIMEOUT</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define AUTO_BOOT_TIMEOUT&#160;&#160;&#160;10</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Time until the auto-boot sequence starts (in seconds); 0 = disabled </p> + +</div> +</div> +<a id="a18936dc79b9e5aa84df016b046a6b977" name="a18936dc79b9e5aa84df016b046a6b977"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a18936dc79b9e5aa84df016b046a6b977">&#9670;&#160;</a></span>EXE_BASE_ADDR</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define EXE_BASE_ADDR&#160;&#160;&#160;0x00000000UL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Memory base address for the executable </p> + +</div> +</div> +<a id="a0035ad41f622dbfc2412318a8ed39257" name="a0035ad41f622dbfc2412318a8ed39257"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0035ad41f622dbfc2412318a8ed39257">&#9670;&#160;</a></span>EXE_SIGNATURE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define EXE_SIGNATURE&#160;&#160;&#160;0x4788CAFE</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Valid executable identification signature </p> + +</div> +</div> +<a id="a999b04603115ce08b0cb33e333312480" name="a999b04603115ce08b0cb33e333312480"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a999b04603115ce08b0cb33e333312480">&#9670;&#160;</a></span>PRINT_GETC</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define PRINT_GETC</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>a</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line">0</div> +</div><!-- fragment --><p>Helper macros Actual define-to-string helper </p> + +</div> +</div> +<a id="aa7afbe8348ebd1a876a4d247553292e9" name="aa7afbe8348ebd1a876a4d247553292e9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa7afbe8348ebd1a876a4d247553292e9">&#9670;&#160;</a></span>PRINT_PUTC</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define PRINT_PUTC</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>a</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Helper macros Actual define-to-string helper </p> + +</div> +</div> +<a id="a0e5a66f68ecc7a6f42088f349707e852" name="a0e5a66f68ecc7a6f42088f349707e852"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0e5a66f68ecc7a6f42088f349707e852">&#9670;&#160;</a></span>PRINT_TEXT</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define PRINT_TEXT</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em></em></span>...</td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print to UART 0 </p> + +</div> +</div> +<a id="a2f5cc04cf9c85f5d2958b384e053053b" name="a2f5cc04cf9c85f5d2958b384e053053b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2f5cc04cf9c85f5d2958b384e053053b">&#9670;&#160;</a></span>PRINT_XNUM</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define PRINT_XNUM</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>a</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Helper macros Actual define-to-string helper </p> + +</div> +</div> +<a id="a418adcf57119600c3580fd2297d28de0" name="a418adcf57119600c3580fd2297d28de0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a418adcf57119600c3580fd2297d28de0">&#9670;&#160;</a></span>SPI_BOOT_BASE_ADDR</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SPI_BOOT_BASE_ADDR&#160;&#160;&#160;0x00400000UL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI flash boot base address </p> + +</div> +</div> +<a id="aea75cf0485ce0a4ea320eba994859686" name="aea75cf0485ce0a4ea320eba994859686"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aea75cf0485ce0a4ea320eba994859686">&#9670;&#160;</a></span>SPI_EN</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SPI_EN&#160;&#160;&#160;1</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable SPI (default) including SPI flash boot options </p> + +</div> +</div> +<a id="afe60a31c8561952f2f734fd67e6f7406" name="afe60a31c8561952f2f734fd67e6f7406"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afe60a31c8561952f2f734fd67e6f7406">&#9670;&#160;</a></span>SPI_FLASH_ADDR_BYTES</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SPI_FLASH_ADDR_BYTES&#160;&#160;&#160;3</td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI flash address width (in numbers of bytes; 2,3,4) </p> + +</div> +</div> +<a id="a709071a651213770b4efe6e6e055ec3d" name="a709071a651213770b4efe6e6e055ec3d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a709071a651213770b4efe6e6e055ec3d">&#9670;&#160;</a></span>SPI_FLASH_CLK_PRSC</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SPI_FLASH_CLK_PRSC&#160;&#160;&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9">CLK_PRSC_8</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI flash clock pre-scaler; see <a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3b">NEORV32_SPI_CTRL_enum</a> </p> + +</div> +</div> +<a id="aa2132454aada86216009f3af206899b1" name="aa2132454aada86216009f3af206899b1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa2132454aada86216009f3af206899b1">&#9670;&#160;</a></span>SPI_FLASH_CS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SPI_FLASH_CS&#160;&#160;&#160;0</td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI flash chip select (low-active) at SPI.spi_csn_o(SPI_FLASH_CS) </p> + +</div> +</div> +<a id="a00924a8ba223b2ca0e7031259b292c84" name="a00924a8ba223b2ca0e7031259b292c84"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a00924a8ba223b2ca0e7031259b292c84">&#9670;&#160;</a></span>SPI_FLASH_SECTOR_SIZE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SPI_FLASH_SECTOR_SIZE&#160;&#160;&#160;65536</td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI flash sector size in bytes </p> + +</div> +</div> +<a id="aa9696325b450773c7a87c991abca3a54" name="aa9696325b450773c7a87c991abca3a54"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa9696325b450773c7a87c991abca3a54">&#9670;&#160;</a></span>STATUS_LED_EN</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define STATUS_LED_EN&#160;&#160;&#160;1</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set to 0 to disable bootloader status LED (heart beat) at GPIO.gpio_o(STATUS_LED_PIN) </p> + +</div> +</div> +<a id="a089a71f836911c71b3f73fdd3b4b890b" name="a089a71f836911c71b3f73fdd3b4b890b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a089a71f836911c71b3f73fdd3b4b890b">&#9670;&#160;</a></span>STATUS_LED_PIN</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define STATUS_LED_PIN&#160;&#160;&#160;0</td> + </tr> + </table> +</div><div class="memdoc"> +<p>GPIO output pin for high-active bootloader status LED (heart beat) </p> + +</div> +</div> +<a id="af6cf19e40e97afb5a7c29f7b439d091d" name="af6cf19e40e97afb5a7c29f7b439d091d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af6cf19e40e97afb5a7c29f7b439d091d">&#9670;&#160;</a></span>str</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define str</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>a</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><span class="preprocessor">#a</span></div> +</div><!-- fragment --><p>Internal helper macro </p> + +</div> +</div> +<a id="a1fac9153314479ad0ad495d752f0224a" name="a1fac9153314479ad0ad495d752f0224a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1fac9153314479ad0ad495d752f0224a">&#9670;&#160;</a></span>UART_BAUD</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART_BAUD&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate for serial interface </p> + +</div> +</div> +<a id="af1c2f103ac6e3183f08b39099fab2be9" name="af1c2f103ac6e3183f08b39099fab2be9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af1c2f103ac6e3183f08b39099fab2be9">&#9670;&#160;</a></span>UART_EN</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART_EN&#160;&#160;&#160;1</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set to 0 to disable UART interface </p> + +</div> +</div> +<a id="a20e93d623ce07939c3fdd53898f9d583" name="a20e93d623ce07939c3fdd53898f9d583"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a20e93d623ce07939c3fdd53898f9d583">&#9670;&#160;</a></span>UART_HW_HANDSHAKE_EN</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART_HW_HANDSHAKE_EN&#160;&#160;&#160;0</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set to 1 to enable UART HW handshaking </p> + +</div> +</div> +<a id="a2cf31934b909299fb93bb5eebdbc7c9e" name="a2cf31934b909299fb93bb5eebdbc7c9e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2cf31934b909299fb93bb5eebdbc7c9e">&#9670;&#160;</a></span>XIP_EN</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define XIP_EN&#160;&#160;&#160;1</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable XIP boot options </p> + +</div> +</div> +<a id="aff6b53dd58cea43d24393a9a2f79e772" name="aff6b53dd58cea43d24393a9a2f79e772"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aff6b53dd58cea43d24393a9a2f79e772">&#9670;&#160;</a></span>xstr</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define xstr</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>a</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_define" href="#af6cf19e40e97afb5a7c29f7b439d091d">str</a>(a)</div> +<div class="ttc" id="abootloader_8c_html_af6cf19e40e97afb5a7c29f7b439d091d"><div class="ttname"><a href="#af6cf19e40e97afb5a7c29f7b439d091d">str</a></div><div class="ttdeci">#define str(a)</div><div class="ttdef"><b>Definition</b> bootloader.c:187</div></div> +</div><!-- fragment --><p>Helper macros Actual define-to-string helper </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="aa0c639898508ff8e4fab6290101f3088" name="aa0c639898508ff8e4fab6290101f3088"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa0c639898508ff8e4fab6290101f3088">&#9670;&#160;</a></span>ERROR_CODES_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#aa0c639898508ff8e4fab6290101f3088">ERROR_CODES_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Error codes </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="aa0c639898508ff8e4fab6290101f3088ad41014563cb3ca69ab69b94d43e97caa" name="aa0c639898508ff8e4fab6290101f3088ad41014563cb3ca69ab69b94d43e97caa"></a>ERROR_SIGNATURE&#160;</td><td class="fielddoc"><p>0: Wrong signature in executable </p> +</td></tr> +<tr><td class="fieldname"><a id="aa0c639898508ff8e4fab6290101f3088a2d77ed1c715fb969a1faa01c71625f2d" name="aa0c639898508ff8e4fab6290101f3088a2d77ed1c715fb969a1faa01c71625f2d"></a>ERROR_SIZE&#160;</td><td class="fielddoc"><p>1: Insufficient instruction memory capacity </p> +</td></tr> +<tr><td class="fieldname"><a id="aa0c639898508ff8e4fab6290101f3088a471ebe6c0766abc6fa4e82a09bfdb985" name="aa0c639898508ff8e4fab6290101f3088a471ebe6c0766abc6fa4e82a09bfdb985"></a>ERROR_CHECKSUM&#160;</td><td class="fielddoc"><p>2: Checksum error in executable </p> +</td></tr> +<tr><td class="fieldname"><a id="aa0c639898508ff8e4fab6290101f3088a684d6723fa25e7651e13d99fb249363c" name="aa0c639898508ff8e4fab6290101f3088a684d6723fa25e7651e13d99fb249363c"></a>ERROR_FLASH&#160;</td><td class="fielddoc"><p>3: SPI flash access error </p> +</td></tr> +</table> + +</div> +</div> +<a id="abcbf77626fdd0b475d245f836eab7a83" name="abcbf77626fdd0b475d245f836eab7a83"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abcbf77626fdd0b475d245f836eab7a83">&#9670;&#160;</a></span>EXE_STREAM_SOURCE_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#abcbf77626fdd0b475d245f836eab7a83">EXE_STREAM_SOURCE_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Executable stream source select (for copying into IMEM) </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="abcbf77626fdd0b475d245f836eab7a83ab149261ddf3f08e44e9d2538e384f58f" name="abcbf77626fdd0b475d245f836eab7a83ab149261ddf3f08e44e9d2538e384f58f"></a>EXE_STREAM_UART&#160;</td><td class="fielddoc"><p>Get executable via UART </p> +</td></tr> +<tr><td class="fieldname"><a id="abcbf77626fdd0b475d245f836eab7a83a98526cd8f81d570c57d98193b32cf114" name="abcbf77626fdd0b475d245f836eab7a83a98526cd8f81d570c57d98193b32cf114"></a>EXE_STREAM_FLASH&#160;</td><td class="fielddoc"><p>Get executable via SPI flash </p> +</td></tr> +</table> + +</div> +</div> +<a id="a165a347c51d8aae06a564a2f297f2feb" name="a165a347c51d8aae06a564a2f297f2feb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a165a347c51d8aae06a564a2f297f2feb">&#9670;&#160;</a></span>NEORV32_EXECUTABLE_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a165a347c51d8aae06a564a2f297f2feb">NEORV32_EXECUTABLE_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 executable </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a165a347c51d8aae06a564a2f297f2feba61100996f309c45b8b628ade2e3acc7f" name="a165a347c51d8aae06a564a2f297f2feba61100996f309c45b8b628ade2e3acc7f"></a>EXE_OFFSET_SIGNATURE&#160;</td><td class="fielddoc"><p>Offset in bytes from start to signature (32-bit) </p> +</td></tr> +<tr><td class="fieldname"><a id="a165a347c51d8aae06a564a2f297f2febacc430caa4bff2fef4568c757893fe2fe" name="a165a347c51d8aae06a564a2f297f2febacc430caa4bff2fef4568c757893fe2fe"></a>EXE_OFFSET_SIZE&#160;</td><td class="fielddoc"><p>Offset in bytes from start to size (32-bit) </p> +</td></tr> +<tr><td class="fieldname"><a id="a165a347c51d8aae06a564a2f297f2febabc27a855096a70dca0f8bc148a123be4" name="a165a347c51d8aae06a564a2f297f2febabc27a855096a70dca0f8bc148a123be4"></a>EXE_OFFSET_CHECKSUM&#160;</td><td class="fielddoc"><p>Offset in bytes from start to checksum (32-bit) </p> +</td></tr> +<tr><td class="fieldname"><a id="a165a347c51d8aae06a564a2f297f2febaea032c54a21057710ef2021638972ce6" name="a165a347c51d8aae06a564a2f297f2febaea032c54a21057710ef2021638972ce6"></a>EXE_OFFSET_DATA&#160;</td><td class="fielddoc"><p>Offset in bytes from start to data (32-bit) </p> +</td></tr> +</table> + +</div> +</div> +<a id="aa5e5723e4cbf83805c3b1197cd401fed" name="aa5e5723e4cbf83805c3b1197cd401fed"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa5e5723e4cbf83805c3b1197cd401fed">&#9670;&#160;</a></span>SPI_FLASH_CMD_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#aa5e5723e4cbf83805c3b1197cd401fed">SPI_FLASH_CMD_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI flash commands </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="aa5e5723e4cbf83805c3b1197cd401feda31c8d698c551d081a0adeafb988ed49e" name="aa5e5723e4cbf83805c3b1197cd401feda31c8d698c551d081a0adeafb988ed49e"></a>SPI_FLASH_CMD_PAGE_PROGRAM&#160;</td><td class="fielddoc"><p>Program page </p> +</td></tr> +<tr><td class="fieldname"><a id="aa5e5723e4cbf83805c3b1197cd401feda6c1994ba2cfd97e0c77dcdf8bbdfdfa6" name="aa5e5723e4cbf83805c3b1197cd401feda6c1994ba2cfd97e0c77dcdf8bbdfdfa6"></a>SPI_FLASH_CMD_READ&#160;</td><td class="fielddoc"><p>Read data </p> +</td></tr> +<tr><td class="fieldname"><a id="aa5e5723e4cbf83805c3b1197cd401fedaa91d3c1d788b21fc798a5976c9f0da77" name="aa5e5723e4cbf83805c3b1197cd401fedaa91d3c1d788b21fc798a5976c9f0da77"></a>SPI_FLASH_CMD_WRITE_DISABLE&#160;</td><td class="fielddoc"><p>Disallow write access </p> +</td></tr> +<tr><td class="fieldname"><a id="aa5e5723e4cbf83805c3b1197cd401feda5fbc6551a10549b38e5ab4a76c38f214" name="aa5e5723e4cbf83805c3b1197cd401feda5fbc6551a10549b38e5ab4a76c38f214"></a>SPI_FLASH_CMD_READ_STATUS&#160;</td><td class="fielddoc"><p>Get status register </p> +</td></tr> +<tr><td class="fieldname"><a id="aa5e5723e4cbf83805c3b1197cd401feda152e091e93778f217f8b766298351513" name="aa5e5723e4cbf83805c3b1197cd401feda152e091e93778f217f8b766298351513"></a>SPI_FLASH_CMD_WRITE_ENABLE&#160;</td><td class="fielddoc"><p>Allow write access </p> +</td></tr> +<tr><td class="fieldname"><a id="aa5e5723e4cbf83805c3b1197cd401feda25bf16cd42b1fd1d95e0957b5be137d2" name="aa5e5723e4cbf83805c3b1197cd401feda25bf16cd42b1fd1d95e0957b5be137d2"></a>SPI_FLASH_CMD_WAKE&#160;</td><td class="fielddoc"><p>Wake up from sleep mode </p> +</td></tr> +<tr><td class="fieldname"><a id="aa5e5723e4cbf83805c3b1197cd401fedacd62141d6331f66e31bd252e2a92b836" name="aa5e5723e4cbf83805c3b1197cd401fedacd62141d6331f66e31bd252e2a92b836"></a>SPI_FLASH_CMD_SECTOR_ERASE&#160;</td><td class="fielddoc"><p>Erase complete sector </p> +</td></tr> +</table> + +</div> +</div> +<a id="a97299f563ebc1fca4c663b025a15136f" name="a97299f563ebc1fca4c663b025a15136f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a97299f563ebc1fca4c663b025a15136f">&#9670;&#160;</a></span>SPI_FLASH_SREG_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a97299f563ebc1fca4c663b025a15136f">SPI_FLASH_SREG_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI flash status register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a97299f563ebc1fca4c663b025a15136fa133cd87673ce9a612da494583e03dae9" name="a97299f563ebc1fca4c663b025a15136fa133cd87673ce9a612da494583e03dae9"></a>FLASH_SREG_BUSY&#160;</td><td class="fielddoc"><p>Busy, write/erase in progress when set, read-only </p> +</td></tr> +<tr><td class="fieldname"><a id="a97299f563ebc1fca4c663b025a15136fa22e8c983d74430ea0930e37781e88bf9" name="a97299f563ebc1fca4c663b025a15136fa22e8c983d74430ea0930e37781e88bf9"></a>FLASH_SREG_WEL&#160;</td><td class="fielddoc"><p>Write access enabled when set, read-only </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="af13b4b3d5e6597feacf331e6d16b08e9" name="af13b4b3d5e6597feacf331e6d16b08e9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af13b4b3d5e6597feacf331e6d16b08e9">&#9670;&#160;</a></span>bootloader_trap_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void bootloader_trap_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Function prototypes</p> +<p>Bootloader trap handler. Used for the CLINT timer tick and to capture any other traps.</p> +<dl class="section note"><dt>Note</dt><dd>Since we have no runtime environment we have to use the interrupt attribute here. </dd></dl> + +</div> +</div> +<a id="ac18819795adb6dbdd52b0587e7fbb569" name="ac18819795adb6dbdd52b0587e7fbb569"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac18819795adb6dbdd52b0587e7fbb569">&#9670;&#160;</a></span>get_exe()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void get_exe </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>src</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get executable stream.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">src</td><td>Source of executable stream data. See <a class="el" href="#abcbf77626fdd0b475d245f836eab7a83">EXE_STREAM_SOURCE_enum</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac58d9f7dc79a549bde1cb50f619c19af" name="ac58d9f7dc79a549bde1cb50f619c19af"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac58d9f7dc79a549bde1cb50f619c19af">&#9670;&#160;</a></span>get_exe_word()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t get_exe_word </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>src</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get word from executable stream</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">src</td><td>Source of executable stream data. See <a class="el" href="#abcbf77626fdd0b475d245f836eab7a83">EXE_STREAM_SOURCE_enum</a>. </td></tr> + <tr><td class="paramname">addr</td><td>Address when accessing SPI flash. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>32-bit data word from stream. </dd></dl> + +</div> +</div> +<a id="a840291bc02cba5474a4cb46a9b9566fe" name="a840291bc02cba5474a4cb46a9b9566fe"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a840291bc02cba5474a4cb46a9b9566fe">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Bootloader main. </p> + +</div> +</div> +<a id="a402ea961bfc2ffeee61e3a7c330b1559" name="a402ea961bfc2ffeee61e3a7c330b1559"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a402ea961bfc2ffeee61e3a7c330b1559">&#9670;&#160;</a></span>print_help()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void print_help </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print help menu. </p> + +</div> +</div> +<a id="a70b7d5c3b3ae97e4e72e84c4bc28fb8a" name="a70b7d5c3b3ae97e4e72e84c4bc28fb8a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a70b7d5c3b3ae97e4e72e84c4bc28fb8a">&#9670;&#160;</a></span>print_hex_word()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void print_hex_word </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>num</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print 32-bit number as 8-digit hexadecimal value (with "0x" suffix).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">num</td><td>Number to print as hexadecimal. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ababfffe8e7036179e150ad3b9bda3a74" name="ababfffe8e7036179e150ad3b9bda3a74"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ababfffe8e7036179e150ad3b9bda3a74">&#9670;&#160;</a></span>save_exe()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void save_exe </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Store content of instruction memory to SPI flash. </p> + +</div> +</div> +<a id="a1919595ed2232aebb3e774b916ab1662" name="a1919595ed2232aebb3e774b916ab1662"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1919595ed2232aebb3e774b916ab1662">&#9670;&#160;</a></span>spi_flash_check()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int spi_flash_check </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if SPI and flash are available/working by making sure the WEL flag of the flash status register can be set and cleared again.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if success, -1 if error </dd></dl> + +</div> +</div> +<a id="a0d877f0611dfcee32a483c8a3660eb1b" name="a0d877f0611dfcee32a483c8a3660eb1b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0d877f0611dfcee32a483c8a3660eb1b">&#9670;&#160;</a></span>spi_flash_erase_sector()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void spi_flash_erase_sector </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Erase sector (64kB) at base address.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Base address of sector to erase. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a09e72e2debdd94929b2be4c7713d5e17" name="a09e72e2debdd94929b2be4c7713d5e17"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a09e72e2debdd94929b2be4c7713d5e17">&#9670;&#160;</a></span>spi_flash_read_byte()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t spi_flash_read_byte </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Read byte from SPI flash.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Flash read address. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Read byte from SPI flash. </dd></dl> + +</div> +</div> +<a id="a005966cd0b32f3d5c041028c4b1c99f5" name="a005966cd0b32f3d5c041028c4b1c99f5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a005966cd0b32f3d5c041028c4b1c99f5">&#9670;&#160;</a></span>spi_flash_read_status()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t spi_flash_read_status </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Read flash status register.</p> +<dl class="section return"><dt>Returns</dt><dd>SPI flash status register (32-bit zero-extended). </dd></dl> + +</div> +</div> +<a id="a1fbdccc60f05756213c9f3d64bac6d47" name="a1fbdccc60f05756213c9f3d64bac6d47"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1fbdccc60f05756213c9f3d64bac6d47">&#9670;&#160;</a></span>spi_flash_wakeup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void spi_flash_wakeup </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Wake up flash from deep sleep state </p> + +</div> +</div> +<a id="a6a8caddda6e729d747726471b0b0f742" name="a6a8caddda6e729d747726471b0b0f742"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6a8caddda6e729d747726471b0b0f742">&#9670;&#160;</a></span>spi_flash_write_addr()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void spi_flash_write_addr </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Send address word to flash (MSB-first, 16-bit, 24-bit or 32-bit address size).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Address word. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a006c27b7d80897b78ab8cd83a391331f" name="a006c27b7d80897b78ab8cd83a391331f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a006c27b7d80897b78ab8cd83a391331f">&#9670;&#160;</a></span>spi_flash_write_byte()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void spi_flash_write_byte </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Write byte to SPI flash.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>SPI flash read address. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>SPI flash read data. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a82d26a2d6293ed7fd44a5c622adfbd45" name="a82d26a2d6293ed7fd44a5c622adfbd45"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a82d26a2d6293ed7fd44a5c622adfbd45">&#9670;&#160;</a></span>spi_flash_write_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void spi_flash_write_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable flash write access. </p> + +</div> +</div> +<a id="a9642e28ef2baec5b356ad9a70970d0e6" name="a9642e28ef2baec5b356ad9a70970d0e6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9642e28ef2baec5b356ad9a70970d0e6">&#9670;&#160;</a></span>spi_flash_write_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void spi_flash_write_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable flash write access. </p> + +</div> +</div> +<a id="a717c72166af7c2ff7e73bd0b47128338" name="a717c72166af7c2ff7e73bd0b47128338"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a717c72166af7c2ff7e73bd0b47128338">&#9670;&#160;</a></span>spi_flash_write_word()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void spi_flash_write_word </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Write word to SPI flash.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">addr</td><td>SPI flash write address. </td></tr> + <tr><td class="paramname">wdata</td><td>SPI flash write data. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ae8de91537ac2782f0f0ebc3b2d4fb1df" name="ae8de91537ac2782f0f0ebc3b2d4fb1df"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae8de91537ac2782f0f0ebc3b2d4fb1df">&#9670;&#160;</a></span>start_app()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void start_app </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>boot_xip</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Start application program.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">boot_xip</td><td>Set to boot via XIP. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a3bdfe2f25b1bfb42f80624ffff22ab01" name="a3bdfe2f25b1bfb42f80624ffff22ab01"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3bdfe2f25b1bfb42f80624ffff22ab01">&#9670;&#160;</a></span>system_error()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void system_error </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>err_code</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Output system error ID and halt.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">err_code</td><td>Error code. See #ERROR_CODES and <a class="el" href="#a6fea855ffe2fa0cd5ea9f98c0d5adc4d">error_message</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<h2 class="groupheader">Variable Documentation</h2> +<a id="a6fea855ffe2fa0cd5ea9f98c0d5adc4d" name="a6fea855ffe2fa0cd5ea9f98c0d5adc4d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6fea855ffe2fa0cd5ea9f98c0d5adc4d">&#9670;&#160;</a></span>error_message</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">const char error_message[4][5]</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Initial value:</b><div class="fragment"><div class="line">= {</div> +<div class="line"> <span class="stringliteral">&quot;EXE&quot;</span>,</div> +<div class="line"> <span class="stringliteral">&quot;SIZE&quot;</span>,</div> +<div class="line"> <span class="stringliteral">&quot;CHKS&quot;</span>,</div> +<div class="line"> <span class="stringliteral">&quot;FLSH&quot;</span></div> +<div class="line">}</div> +</div><!-- fragment --><p>Error messages </p> + +</div> +</div> +<a id="a0f9fcfdf758260b9b79b6eda063dd87a" name="a0f9fcfdf758260b9b79b6eda063dd87a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0f9fcfdf758260b9b79b6eda063dd87a">&#9670;&#160;</a></span>exe_available</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">volatile uint32_t exe_available</td> + </tr> + </table> +</div><div class="memdoc"> +<p>This global variable keeps the size of the available executable in bytes. If =0 no executable is available (yet). </p> + +</div> +</div> +<a id="a5fa6b109bf211d1768f84c9d38eef240" name="a5fa6b109bf211d1768f84c9d38eef240"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5fa6b109bf211d1768f84c9d38eef240">&#9670;&#160;</a></span>getting_exe</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">volatile uint32_t getting_exe</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Only set during executable fetch (required for capturing STORE BUS-TIMOUT exception). </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/bus__explorer_2main_8c.html b/sw/bus__explorer_2main_8c.html new file mode 100644 index 0000000000..e252eec397 --- /dev/null +++ b/sw/bus__explorer_2main_8c.html @@ -0,0 +1,306 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/bus_explorer/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_0d2921e55a1172a4726516961ee96ab5.html">bus_explorer</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Interactive memory inspector. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +<code>#include &lt;string.h&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:afc9b1ab3db46eccf51d55c715fa2fbd4" id="r_afc9b1ab3db46eccf51d55c715fa2fbd4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afc9b1ab3db46eccf51d55c715fa2fbd4">read_memory</a> (uint32_t address)</td></tr> +<tr class="separator:afc9b1ab3db46eccf51d55c715fa2fbd4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2b6196c2e97a7f7702c0068780304ec1" id="r_a2b6196c2e97a7f7702c0068780304ec1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2b6196c2e97a7f7702c0068780304ec1">setup_access</a> (void)</td></tr> +<tr class="separator:a2b6196c2e97a7f7702c0068780304ec1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a96729fb5279642ac56c8e6a513789b45" id="r_a96729fb5279642ac56c8e6a513789b45"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a96729fb5279642ac56c8e6a513789b45">write_memory</a> (uint32_t address, uint32_t data)</td></tr> +<tr class="separator:a96729fb5279642ac56c8e6a513789b45"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6405739c6012158151eb082c31c312da" id="r_a6405739c6012158151eb082c31c312da"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6405739c6012158151eb082c31c312da">dump_memory</a> (uint32_t address)</td></tr> +<tr class="separator:a6405739c6012158151eb082c31c312da"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a02640a99db37b8d92b9edffc9720a210" id="r_a02640a99db37b8d92b9edffc9720a210"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a02640a99db37b8d92b9edffc9720a210">hexdump</a> (uint32_t address)</td></tr> +<tr class="separator:a02640a99db37b8d92b9edffc9720a210"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac582208281cd6fce4eb61c234f312ef6" id="r_ac582208281cd6fce4eb61c234f312ef6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac582208281cd6fce4eb61c234f312ef6">aux_print_hex_byte</a> (uint8_t byte)</td></tr> +<tr class="separator:ac582208281cd6fce4eb61c234f312ef6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:a12606de4f336516339c495642a436032" id="r_a12606de4f336516339c495642a436032"><td class="memItemLeft" align="right" valign="top"><a id="a12606de4f336516339c495642a436032" name="a12606de4f336516339c495642a436032"></a> +char&#160;</td><td class="memItemRight" valign="bottom"><b>access_size</b></td></tr> +<tr class="separator:a12606de4f336516339c495642a436032"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Interactive memory inspector. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ac582208281cd6fce4eb61c234f312ef6" name="ac582208281cd6fce4eb61c234f312ef6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac582208281cd6fce4eb61c234f312ef6">&#9670;&#160;</a></span>aux_print_hex_byte()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void aux_print_hex_byte </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>byte</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print HEX byte.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">byte</td><td>Byte to be printed as 2-char hex value.</td></tr> + </table> + </dd> +</dl> +<p>Print HEX byte.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">byte</td><td>Byte to be printed as 2-cahr hex value. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a6405739c6012158151eb082c31c312da" name="a6405739c6012158151eb082c31c312da"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6405739c6012158151eb082c31c312da">&#9670;&#160;</a></span>dump_memory()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void dump_memory </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>address</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Read several bytes/halfs/word from memory base address </p> + +</div> +</div> +<a id="a02640a99db37b8d92b9edffc9720a210" name="a02640a99db37b8d92b9edffc9720a210"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a02640a99db37b8d92b9edffc9720a210">&#9670;&#160;</a></span>hexdump()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void hexdump </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>address</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Make pretty hexadecimal + ASCII dump (byte-wise) </p> + +</div> +</div> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>This program provides an interactive console to read/write memory.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the UART to be synthesized.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +<a id="afc9b1ab3db46eccf51d55c715fa2fbd4" name="afc9b1ab3db46eccf51d55c715fa2fbd4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afc9b1ab3db46eccf51d55c715fa2fbd4">&#9670;&#160;</a></span>read_memory()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void read_memory </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>address</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Read from memory address </p> + +</div> +</div> +<a id="a2b6196c2e97a7f7702c0068780304ec1" name="a2b6196c2e97a7f7702c0068780304ec1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2b6196c2e97a7f7702c0068780304ec1">&#9670;&#160;</a></span>setup_access()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void setup_access </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Configure memory access size </p> + +</div> +</div> +<a id="a96729fb5279642ac56c8e6a513789b45" name="a96729fb5279642ac56c8e6a513789b45"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a96729fb5279642ac56c8e6a513789b45">&#9670;&#160;</a></span>write_memory()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void write_memory </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>address</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>data</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Write to memory address </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/classes.html b/sw/classes.html new file mode 100644 index 0000000000..6f441a40ad --- /dev/null +++ b/sw/classes.html @@ -0,0 +1,120 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Data Structure Index</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="header"> + <div class="headertitle"><div class="title">Data Structure Index</div></div> +</div><!--header--> +<div class="contents"> +<div class="qindex"><a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_N">N</a>&#160;|&#160;<a class="qindex" href="#letter_R">R</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a></div> +<div class="classindex"> +<dl class="classindex even"> +<dt class="alphachar"><a id="letter_D" name="letter_D">D</a></dt> +<dd><a class="el" href="structdate__t.html">date_t</a></dd></dl> +<dl class="classindex odd"> +<dt class="alphachar"><a id="letter_F" name="letter_F">F</a></dt> +<dd><a class="el" href="unionfloat__conv__t.html">float_conv_t</a></dd></dl> +<dl class="classindex even"> +<dt class="alphachar"><a id="letter_N" name="letter_N">N</a></dt> +<dd><a class="el" href="structneorv32__cfs__t.html">neorv32_cfs_t</a></dd><dd><a class="el" href="structneorv32__clint__t.html">neorv32_clint_t</a></dd><dd><a class="el" href="structneorv32__crc__t.html">neorv32_crc_t</a></dd><dd><a class="el" href="structneorv32__dma__t.html">neorv32_dma_t</a></dd><dd><a class="el" href="structneorv32__gpio__t.html">neorv32_gpio_t</a></dd><dd><a class="el" href="structneorv32__gptmr__t.html">neorv32_gptmr_t</a></dd><dd><a class="el" href="structneorv32__neoled__t.html">neorv32_neoled_t</a></dd><dd><a class="el" href="structneorv32__onewire__t.html">neorv32_onewire_t</a></dd><dd><a class="el" href="structneorv32__pwm__t.html">neorv32_pwm_t</a></dd><dd><a class="el" href="structneorv32__sdi__t.html">neorv32_sdi_t</a></dd><dd><a class="el" href="structneorv32__slink__t.html">neorv32_slink_t</a></dd><dd><a class="el" href="structneorv32__spi__t.html">neorv32_spi_t</a></dd><dd><a class="el" href="structneorv32__sysinfo__t.html">neorv32_sysinfo_t</a></dd><dd><a class="el" href="structneorv32__trng__t.html">neorv32_trng_t</a></dd><dd><a class="el" href="structneorv32__twd__t.html">neorv32_twd_t</a></dd><dd><a class="el" href="structneorv32__twi__t.html">neorv32_twi_t</a></dd><dd><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a></dd><dd><a class="el" href="structneorv32__wdt__t.html">neorv32_wdt_t</a></dd><dd><a class="el" href="structneorv32__xip__t.html">neorv32_xip_t</a></dd><dd><a class="el" href="structneorv32__xirq__t.html">neorv32_xirq_t</a></dd></dl> +<dl class="classindex odd"> +<dt class="alphachar"><a id="letter_R" name="letter_R">R</a></dt> +<dd><a class="el" href="structrecord.html">record</a></dd></dl> +<dl class="classindex even"> +<dt class="alphachar"><a id="letter_S" name="letter_S">S</a></dt> +<dd><a class="el" href="unionsubwords16__t.html">subwords16_t</a></dd><dd><a class="el" href="unionsubwords32__t.html">subwords32_t</a></dd><dd><a class="el" href="unionsubwords64__t.html">subwords64_t</a></dd></dl> +<dl class="classindex odd"> +<dt class="alphachar"><a id="letter_T" name="letter_T">T</a></dt> +<dd><a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a></dd></dl> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/clipboard.js b/sw/clipboard.js new file mode 100644 index 0000000000..42c1fb0e02 --- /dev/null +++ b/sw/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>` +let clipboard_successIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z"/></svg>` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/sw/closed.png b/sw/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8<G4C~~x2bkCl7 zlF9slZh~6z%aUT|WfKm3{P*dDAfv<6>{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/sw/cookie.js b/sw/cookie.js new file mode 100644 index 0000000000..53ad21d981 --- /dev/null +++ b/sw/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/sw/demo__blink__led_2main_8c.html b/sw/demo__blink__led_2main_8c.html new file mode 100644 index 0000000000..06f6a6dbe3 --- /dev/null +++ b/sw/demo__blink__led_2main_8c.html @@ -0,0 +1,139 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_blink_led/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_9a1c128d67c35790e92af404beb936aa.html">demo_blink_led</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Minimal blinking LED demo program using the lowest 8 bits of the GPIO.output port. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Minimal blinking LED demo program using the lowest 8 bits of the GPIO.output port. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function; shows an incrementing 8-bit counter on GPIO.output(7:0).</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the GPIO controller to be synthesized.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Will never return. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__cfs_2main_8c.html b/sw/demo__cfs_2main_8c.html new file mode 100644 index 0000000000..384c3f830b --- /dev/null +++ b/sw/demo__cfs_2main_8c.html @@ -0,0 +1,178 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_cfs/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_01cde3d98944a579dc3b5e43a5311a79.html">demo_cfs</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Simple demo program for the <em>default</em> custom functions subsystem (CFS) module. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a906949f076e3e0d0082af3c3b1acb518" id="r_a906949f076e3e0d0082af3c3b1acb518"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a906949f076e3e0d0082af3c3b1acb518">TESTCASES</a>&#160;&#160;&#160;4</td></tr> +<tr class="separator:a906949f076e3e0d0082af3c3b1acb518"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Simple demo program for the <em>default</em> custom functions subsystem (CFS) module. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a906949f076e3e0d0082af3c3b1acb518" name="a906949f076e3e0d0082af3c3b1acb518"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a906949f076e3e0d0082af3c3b1acb518">&#9670;&#160;</a></span>TESTCASES</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define TESTCASES&#160;&#160;&#160;4</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Number of test cases per CFS function </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the CFS and UART0.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__cfu_2main_8c.html b/sw/demo__cfu_2main_8c.html new file mode 100644 index 0000000000..d16fea2eee --- /dev/null +++ b/sw/demo__cfu_2main_8c.html @@ -0,0 +1,600 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_cfu/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_09a89dfa1596b6613cf2c29528a32844.html">demo_cfu</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Example program showing how to use the CFU's custom instructions (XTEA example). +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a36801eebef583b6c3438709144834e3e" id="r_a36801eebef583b6c3438709144834e3e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a36801eebef583b6c3438709144834e3e">XTEA_ROUNDS</a>&#160;&#160;&#160;20</td></tr> +<tr class="separator:a36801eebef583b6c3438709144834e3e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac637695e266f3af7799e352b374412ad" id="r_ac637695e266f3af7799e352b374412ad"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac637695e266f3af7799e352b374412ad">DATA_NUM</a>&#160;&#160;&#160;64</td></tr> +<tr class="separator:ac637695e266f3af7799e352b374412ad"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Define macros for easy CFU instruction wrapping</div></td></tr> +<tr class="memitem:a0ff5df4be3476f4e7756c472f2644726" id="r_a0ff5df4be3476f4e7756c472f2644726"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0ff5df4be3476f4e7756c472f2644726">xtea_hw_init</a>(sum)</td></tr> +<tr class="separator:a0ff5df4be3476f4e7756c472f2644726"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8fddbd0364944fa3dca477599079c78e" id="r_a8fddbd0364944fa3dca477599079c78e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8fddbd0364944fa3dca477599079c78e">xtea_hw_enc_v0_step</a>(v0, v1)</td></tr> +<tr class="separator:a8fddbd0364944fa3dca477599079c78e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af6c6097c851dc97679d939d0d506342c" id="r_af6c6097c851dc97679d939d0d506342c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af6c6097c851dc97679d939d0d506342c">xtea_hw_enc_v1_step</a>(v0, v1)</td></tr> +<tr class="separator:af6c6097c851dc97679d939d0d506342c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2e76463aadbf0cd788191401f42d89aa" id="r_a2e76463aadbf0cd788191401f42d89aa"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2e76463aadbf0cd788191401f42d89aa">xtea_hw_dec_v0_step</a>(v0, v1)</td></tr> +<tr class="separator:a2e76463aadbf0cd788191401f42d89aa"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af139f37dd13866ecb4aa9002ac8f798e" id="r_af139f37dd13866ecb4aa9002ac8f798e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af139f37dd13866ecb4aa9002ac8f798e">xtea_hw_dec_v1_step</a>(v0, v1)</td></tr> +<tr class="separator:af139f37dd13866ecb4aa9002ac8f798e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aaa2516cd7853e9c7c274cb3de35cb2d5" id="r_aaa2516cd7853e9c7c274cb3de35cb2d5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aaa2516cd7853e9c7c274cb3de35cb2d5">xtea_hw_illegal_inst</a>()</td></tr> +<tr class="separator:aaa2516cd7853e9c7c274cb3de35cb2d5"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a8dc502bf508491eed1f39c4acf040efb" id="r_a8dc502bf508491eed1f39c4acf040efb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8dc502bf508491eed1f39c4acf040efb">xtea_sw_encipher</a> (uint32_t num_cycles, uint32_t *v, const uint32_t k[4])</td></tr> +<tr class="separator:a8dc502bf508491eed1f39c4acf040efb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0e980c5d81b1eca90b8073e54099bdb0" id="r_a0e980c5d81b1eca90b8073e54099bdb0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0e980c5d81b1eca90b8073e54099bdb0">xtea_sw_decipher</a> (unsigned int num_cycles, uint32_t *v, const uint32_t k[4])</td></tr> +<tr class="separator:a0e980c5d81b1eca90b8073e54099bdb0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Global variables</div></td></tr> +<tr class="memitem:a26da64691624f3c899f2394a427d6593" id="r_a26da64691624f3c899f2394a427d6593"><td class="memItemLeft" align="right" valign="top">const uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a26da64691624f3c899f2394a427d6593">xtea_delta</a> = 0x9e3779b9</td></tr> +<tr class="separator:a26da64691624f3c899f2394a427d6593"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab5c498f9da12ab2d6ddc89bf4a46dec6" id="r_ab5c498f9da12ab2d6ddc89bf4a46dec6"><td class="memItemLeft" align="right" valign="top">const uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab5c498f9da12ab2d6ddc89bf4a46dec6">key</a> [4] = {0x207230ba, 0x1ffba710, 0xc45271ef, 0xdd01768a}</td></tr> +<tr class="separator:ab5c498f9da12ab2d6ddc89bf4a46dec6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2e2ccb9136736a673dbef71f207e97a0" id="r_a2e2ccb9136736a673dbef71f207e97a0"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2e2ccb9136736a673dbef71f207e97a0">input_data</a> [<a class="el" href="#ac637695e266f3af7799e352b374412ad">DATA_NUM</a>]</td></tr> +<tr class="separator:a2e2ccb9136736a673dbef71f207e97a0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a33b2d9298edf94c5961e67a59c371d00" id="r_a33b2d9298edf94c5961e67a59c371d00"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a33b2d9298edf94c5961e67a59c371d00">cypher_data_sw</a> [<a class="el" href="#ac637695e266f3af7799e352b374412ad">DATA_NUM</a>]</td></tr> +<tr class="separator:a33b2d9298edf94c5961e67a59c371d00"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9ad2780a4cfe0d9cb4f1a846a92063ae" id="r_a9ad2780a4cfe0d9cb4f1a846a92063ae"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9ad2780a4cfe0d9cb4f1a846a92063ae">cypher_data_hw</a> [<a class="el" href="#ac637695e266f3af7799e352b374412ad">DATA_NUM</a>]</td></tr> +<tr class="separator:a9ad2780a4cfe0d9cb4f1a846a92063ae"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a72ba1460776ad684028448ca51810bbe" id="r_a72ba1460776ad684028448ca51810bbe"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a72ba1460776ad684028448ca51810bbe">plain_data_sw</a> [<a class="el" href="#ac637695e266f3af7799e352b374412ad">DATA_NUM</a>]</td></tr> +<tr class="separator:a72ba1460776ad684028448ca51810bbe"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aee8dde13fe2f5ac52dd6075e2fe1eab5" id="r_aee8dde13fe2f5ac52dd6075e2fe1eab5"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aee8dde13fe2f5ac52dd6075e2fe1eab5">plain_data_hw</a> [<a class="el" href="#ac637695e266f3af7799e352b374412ad">DATA_NUM</a>]</td></tr> +<tr class="separator:aee8dde13fe2f5ac52dd6075e2fe1eab5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad424a26173bd8d84b8d1cae94a55f248" id="r_ad424a26173bd8d84b8d1cae94a55f248"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad424a26173bd8d84b8d1cae94a55f248">time_enc_sw</a></td></tr> +<tr class="separator:ad424a26173bd8d84b8d1cae94a55f248"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a094212e3731a9aecbd278fac243de6ec" id="r_a094212e3731a9aecbd278fac243de6ec"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a094212e3731a9aecbd278fac243de6ec">time_enc_hw</a></td></tr> +<tr class="separator:a094212e3731a9aecbd278fac243de6ec"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2d3853c367c3bce99e787c0df445030a" id="r_a2d3853c367c3bce99e787c0df445030a"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2d3853c367c3bce99e787c0df445030a">time_dec_sw</a></td></tr> +<tr class="separator:a2d3853c367c3bce99e787c0df445030a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acb6dd9d6ab74ac94f174a11ff3ad76af" id="r_acb6dd9d6ab74ac94f174a11ff3ad76af"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acb6dd9d6ab74ac94f174a11ff3ad76af">time_dec_hw</a></td></tr> +<tr class="separator:acb6dd9d6ab74ac94f174a11ff3ad76af"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Example program showing how to use the CFU's custom instructions (XTEA example). </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +<dl class="section note"><dt>Note</dt><dd>Take a look at the highly-commented "hardware-counterpart" of this CFU example in 'rtl/core/neorv32_cpu_cp_cfu.vhd'. </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="ac637695e266f3af7799e352b374412ad" name="ac637695e266f3af7799e352b374412ad"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac637695e266f3af7799e352b374412ad">&#9670;&#160;</a></span>DATA_NUM</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DATA_NUM&#160;&#160;&#160;64</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Input data size (in number of 32-bit words), has to be even </p> + +</div> +</div> +<a id="a2e76463aadbf0cd788191401f42d89aa" name="a2e76463aadbf0cd788191401f42d89aa"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2e76463aadbf0cd788191401f42d89aa">&#9670;&#160;</a></span>xtea_hw_dec_v0_step</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define xtea_hw_dec_v0_step</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>v0</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>v1</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_define" href="neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c">neorv32_cfu_r3_instr</a>(0b0000000, 0b010, v0, v1)</div> +<div class="ttc" id="aneorv32__cpu__cfu_8h_html_a69d60ccd0cee950b08ce585c3f13b85c"><div class="ttname"><a href="neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c">neorv32_cfu_r3_instr</a></div><div class="ttdeci">#define neorv32_cfu_r3_instr(funct7, funct3, rs1, rs2)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_cfu.h:34</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="af139f37dd13866ecb4aa9002ac8f798e" name="af139f37dd13866ecb4aa9002ac8f798e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af139f37dd13866ecb4aa9002ac8f798e">&#9670;&#160;</a></span>xtea_hw_dec_v1_step</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define xtea_hw_dec_v1_step</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>v0</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>v1</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_define" href="neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c">neorv32_cfu_r3_instr</a>(0b0000000, 0b011, v0, v1)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a8fddbd0364944fa3dca477599079c78e" name="a8fddbd0364944fa3dca477599079c78e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8fddbd0364944fa3dca477599079c78e">&#9670;&#160;</a></span>xtea_hw_enc_v0_step</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define xtea_hw_enc_v0_step</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>v0</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>v1</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_define" href="neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c">neorv32_cfu_r3_instr</a>(0b0000000, 0b000, v0, v1)</div> +</div><!-- fragment --> +</div> +</div> +<a id="af6c6097c851dc97679d939d0d506342c" name="af6c6097c851dc97679d939d0d506342c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af6c6097c851dc97679d939d0d506342c">&#9670;&#160;</a></span>xtea_hw_enc_v1_step</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define xtea_hw_enc_v1_step</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>v0</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>v1</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_define" href="neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c">neorv32_cfu_r3_instr</a>(0b0000000, 0b001, v0, v1)</div> +</div><!-- fragment --> +</div> +</div> +<a id="aaa2516cd7853e9c7c274cb3de35cb2d5" name="aaa2516cd7853e9c7c274cb3de35cb2d5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aaa2516cd7853e9c7c274cb3de35cb2d5">&#9670;&#160;</a></span>xtea_hw_illegal_inst</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define xtea_hw_illegal_inst</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_define" href="neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c">neorv32_cfu_r3_instr</a>(0b0000000, 0b111, 0, 0 )</div> +</div><!-- fragment --> +</div> +</div> +<a id="a0ff5df4be3476f4e7756c472f2644726" name="a0ff5df4be3476f4e7756c472f2644726"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0ff5df4be3476f4e7756c472f2644726">&#9670;&#160;</a></span>xtea_hw_init</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define xtea_hw_init</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>sum</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_define" href="neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c">neorv32_cfu_r3_instr</a>(0b0000000, 0b100, sum, 0 )</div> +</div><!-- fragment --> +</div> +</div> +<a id="a36801eebef583b6c3438709144834e3e" name="a36801eebef583b6c3438709144834e3e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a36801eebef583b6c3438709144834e3e">&#9670;&#160;</a></span>XTEA_ROUNDS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define XTEA_ROUNDS&#160;&#160;&#160;20</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Number XTEA rounds </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function: run pure-SW XTEA and compare with HW-accelerated XTEA</p> +<dl class="section note"><dt>Note</dt><dd>This program requires UART0 and the Zxcfu and Zicntr ISA extension.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +<a id="a0e980c5d81b1eca90b8073e54099bdb0" name="a0e980c5d81b1eca90b8073e54099bdb0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0e980c5d81b1eca90b8073e54099bdb0">&#9670;&#160;</a></span>xtea_sw_decipher()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void xtea_sw_decipher </td> + <td>(</td> + <td class="paramtype">unsigned int</td> <td class="paramname"><span class="paramname"><em>num_cycles</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t *</td> <td class="paramname"><span class="paramname"><em>v</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const uint32_t</td> <td class="paramname"><span class="paramname"><em>k</em></span>[4]&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>XTEA decryption - software reference Source: <a href="https://de.wikipedia.org/wiki/Extended_Tiny_Encryption_Algorithm">https://de.wikipedia.org/wiki/Extended_Tiny_Encryption_Algorithm</a></p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">num_cycles</td><td>Number of encryption cycles. </td></tr> + <tr><td class="paramdir">[in,out]</td><td class="paramname">v</td><td>Decryption data/result array (2x32-bit). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">k</td><td>Decryption key array (4x32-bit). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a8dc502bf508491eed1f39c4acf040efb" name="a8dc502bf508491eed1f39c4acf040efb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8dc502bf508491eed1f39c4acf040efb">&#9670;&#160;</a></span>xtea_sw_encipher()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void xtea_sw_encipher </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>num_cycles</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t *</td> <td class="paramname"><span class="paramname"><em>v</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const uint32_t</td> <td class="paramname"><span class="paramname"><em>k</em></span>[4]&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>XTEA encryption - software reference Source: <a href="https://de.wikipedia.org/wiki/Extended_Tiny_Encryption_Algorithm">https://de.wikipedia.org/wiki/Extended_Tiny_Encryption_Algorithm</a></p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">num_cycles</td><td>Number of encryption cycles. </td></tr> + <tr><td class="paramdir">[in,out]</td><td class="paramname">v</td><td>Encryption data/result array (2x32-bit). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">k</td><td>Encryption key array (4x32-bit). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<h2 class="groupheader">Variable Documentation</h2> +<a id="a9ad2780a4cfe0d9cb4f1a846a92063ae" name="a9ad2780a4cfe0d9cb4f1a846a92063ae"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9ad2780a4cfe0d9cb4f1a846a92063ae">&#9670;&#160;</a></span>cypher_data_hw</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t cypher_data_hw[<a class="el" href="#ac637695e266f3af7799e352b374412ad">DATA_NUM</a>]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>XTEA delta (round-key update); do not change </p> + +</div> +</div> +<a id="a33b2d9298edf94c5961e67a59c371d00" name="a33b2d9298edf94c5961e67a59c371d00"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a33b2d9298edf94c5961e67a59c371d00">&#9670;&#160;</a></span>cypher_data_sw</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t cypher_data_sw[<a class="el" href="#ac637695e266f3af7799e352b374412ad">DATA_NUM</a>]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Encryption result buffer </p> + +</div> +</div> +<a id="a2e2ccb9136736a673dbef71f207e97a0" name="a2e2ccb9136736a673dbef71f207e97a0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2e2ccb9136736a673dbef71f207e97a0">&#9670;&#160;</a></span>input_data</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t input_data[<a class="el" href="#ac637695e266f3af7799e352b374412ad">DATA_NUM</a>]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Encryption input data </p> + +</div> +</div> +<a id="ab5c498f9da12ab2d6ddc89bf4a46dec6" name="ab5c498f9da12ab2d6ddc89bf4a46dec6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab5c498f9da12ab2d6ddc89bf4a46dec6">&#9670;&#160;</a></span>key</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">const uint32_t key[4] = {0x207230ba, 0x1ffba710, 0xc45271ef, 0xdd01768a}</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Secret encryption/decryption key (128-bit) </p> + +</div> +</div> +<a id="aee8dde13fe2f5ac52dd6075e2fe1eab5" name="aee8dde13fe2f5ac52dd6075e2fe1eab5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aee8dde13fe2f5ac52dd6075e2fe1eab5">&#9670;&#160;</a></span>plain_data_hw</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t plain_data_hw[<a class="el" href="#ac637695e266f3af7799e352b374412ad">DATA_NUM</a>]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>XTEA delta (round-key update); do not change </p> + +</div> +</div> +<a id="a72ba1460776ad684028448ca51810bbe" name="a72ba1460776ad684028448ca51810bbe"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a72ba1460776ad684028448ca51810bbe">&#9670;&#160;</a></span>plain_data_sw</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t plain_data_sw[<a class="el" href="#ac637695e266f3af7799e352b374412ad">DATA_NUM</a>]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Decryption result buffer </p> + +</div> +</div> +<a id="acb6dd9d6ab74ac94f174a11ff3ad76af" name="acb6dd9d6ab74ac94f174a11ff3ad76af"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acb6dd9d6ab74ac94f174a11ff3ad76af">&#9670;&#160;</a></span>time_dec_hw</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t time_dec_hw</td> + </tr> + </table> +</div><div class="memdoc"> +<p>XTEA delta (round-key update); do not change </p> + +</div> +</div> +<a id="a2d3853c367c3bce99e787c0df445030a" name="a2d3853c367c3bce99e787c0df445030a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2d3853c367c3bce99e787c0df445030a">&#9670;&#160;</a></span>time_dec_sw</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t time_dec_sw</td> + </tr> + </table> +</div><div class="memdoc"> +<p>XTEA delta (round-key update); do not change </p> + +</div> +</div> +<a id="a094212e3731a9aecbd278fac243de6ec" name="a094212e3731a9aecbd278fac243de6ec"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a094212e3731a9aecbd278fac243de6ec">&#9670;&#160;</a></span>time_enc_hw</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t time_enc_hw</td> + </tr> + </table> +</div><div class="memdoc"> +<p>XTEA delta (round-key update); do not change </p> + +</div> +</div> +<a id="ad424a26173bd8d84b8d1cae94a55f248" name="ad424a26173bd8d84b8d1cae94a55f248"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad424a26173bd8d84b8d1cae94a55f248">&#9670;&#160;</a></span>time_enc_sw</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t time_enc_sw</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Timing data </p> + +</div> +</div> +<a id="a26da64691624f3c899f2394a427d6593" name="a26da64691624f3c899f2394a427d6593"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a26da64691624f3c899f2394a427d6593">&#9670;&#160;</a></span>xtea_delta</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">const uint32_t xtea_delta = 0x9e3779b9</td> + </tr> + </table> +</div><div class="memdoc"> +<p>XTEA delta (round-key update); do not change </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__clint_2main_8c.html b/sw/demo__clint_2main_8c.html new file mode 100644 index 0000000000..830102d72e --- /dev/null +++ b/sw/demo__clint_2main_8c.html @@ -0,0 +1,195 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_clint/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_f28130cc1bab3a9396f0ef9d1631e47b.html">demo_clint</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#define-members">Macros</a> &#124; +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Simple core local interruptor (CLINT) usage example. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top"><a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>BAUD_RATE</b>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a56e848c71747fc350f1697e84797871f" id="r_a56e848c71747fc350f1697e84797871f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a56e848c71747fc350f1697e84797871f">mti_irq_handler</a> (void)</td></tr> +<tr class="separator:a56e848c71747fc350f1697e84797871f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8e5e335f226a7dac74e2f117f07bebf6" id="r_a8e5e335f226a7dac74e2f117f07bebf6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8e5e335f226a7dac74e2f117f07bebf6">msi_irq_handler</a> (void)</td></tr> +<tr class="separator:a8e5e335f226a7dac74e2f117f07bebf6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:a8cc234243e9622043b343cde3d4dccac" id="r_a8cc234243e9622043b343cde3d4dccac"><td class="memItemLeft" align="right" valign="top"><a id="a8cc234243e9622043b343cde3d4dccac" name="a8cc234243e9622043b343cde3d4dccac"></a> +const char&#160;</td><td class="memItemRight" valign="bottom"><b>weekdays</b> [7][4] = {&quot;Mon&quot;, &quot;Tue&quot;, &quot;Wed&quot;, &quot;Thu&quot;, &quot;Fri&quot;, &quot;Sat&quot;, &quot;Sun&quot;}</td></tr> +<tr class="separator:a8cc234243e9622043b343cde3d4dccac"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Simple core local interruptor (CLINT) usage example. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>This program toggles an LED at GPIO.output(0) at 1Hz and also prints and updates the Unix time in human-readable format using the machine timer interrupt.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the CLINT to be synthesized (and UART0 and GPIO).</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Should not return. </dd></dl> + +</div> +</div> +<a id="a8e5e335f226a7dac74e2f117f07bebf6" name="a8e5e335f226a7dac74e2f117f07bebf6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8e5e335f226a7dac74e2f117f07bebf6">&#9670;&#160;</a></span>msi_irq_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void msi_irq_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Machine software IRQ handler.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function has to be of type "void xyz(void)" and must not use any interrupt attributes! </dd></dl> + +</div> +</div> +<a id="a56e848c71747fc350f1697e84797871f" name="a56e848c71747fc350f1697e84797871f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a56e848c71747fc350f1697e84797871f">&#9670;&#160;</a></span>mti_irq_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void mti_irq_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Machine timer IRQ handler.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function has to be of type "void xyz(void)" and must not use any interrupt attributes! </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__crc_2main_8c.html b/sw/demo__crc_2main_8c.html new file mode 100644 index 0000000000..b70c990086 --- /dev/null +++ b/sw/demo__crc_2main_8c.html @@ -0,0 +1,168 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_crc/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_bf935196a1ea0ca9cb42aae56d70946a.html">demo_crc</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>CRC demo program. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:a61cf3bdb35d76183cca44c4496ed39a1" id="r_a61cf3bdb35d76183cca44c4496ed39a1"><td class="memItemLeft" align="right" valign="top"><a id="a61cf3bdb35d76183cca44c4496ed39a1" name="a61cf3bdb35d76183cca44c4496ed39a1"></a> +const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>test_string</b> [] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x00}</td></tr> +<tr class="separator:a61cf3bdb35d76183cca44c4496ed39a1"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>CRC demo program. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Simple demo program to showcase the NEORV32 CRC unit.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires UART0 and the CRC unit to be synthesized. The DMA controller is optional.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Irrelevant. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__dma_2main_8c.html b/sw/demo__dma_2main_8c.html new file mode 100644 index 0000000000..83b38a0bb0 --- /dev/null +++ b/sw/demo__dma_2main_8c.html @@ -0,0 +1,212 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_dma/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_8c514361e1f16692c783b23503f30f16.html">demo_dma</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>DMA demo program. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a8ad0c7bfd07edb6d42d86b166347206b" id="r_a8ad0c7bfd07edb6d42d86b166347206b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8ad0c7bfd07edb6d42d86b166347206b">show_arrays</a> (void)</td></tr> +<tr class="separator:a8ad0c7bfd07edb6d42d86b166347206b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aefcc5abb86a652587ff69be120a66487" id="r_aefcc5abb86a652587ff69be120a66487"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aefcc5abb86a652587ff69be120a66487">dma_firq_handler</a> (void)</td></tr> +<tr class="separator:aefcc5abb86a652587ff69be120a66487"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:a5d49f871680881f4a84770fc76e40b77" id="r_a5d49f871680881f4a84770fc76e40b77"><td class="memItemLeft" align="right" valign="top"><a id="a5d49f871680881f4a84770fc76e40b77" name="a5d49f871680881f4a84770fc76e40b77"></a> +volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>dma_src</b> [4]</td></tr> +<tr class="separator:a5d49f871680881f4a84770fc76e40b77"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a71821daf63f808350ae702ca7edb38e2" id="r_a71821daf63f808350ae702ca7edb38e2"><td class="memItemLeft" align="right" valign="top"><a id="a71821daf63f808350ae702ca7edb38e2" name="a71821daf63f808350ae702ca7edb38e2"></a> +volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>dma_dst</b> [4]</td></tr> +<tr class="separator:a71821daf63f808350ae702ca7edb38e2"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>DMA demo program. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="aefcc5abb86a652587ff69be120a66487" name="aefcc5abb86a652587ff69be120a66487"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aefcc5abb86a652587ff69be120a66487">&#9670;&#160;</a></span>dma_firq_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void dma_firq_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA FIRQ handler.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function has to be of type "void xyz(void)" and must not use any interrupt attributes! </dd></dl> + +</div> +</div> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Simple demo program to showcase the NEORV32 DMA controller.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires UART0 and the DMA controller to be synthesized.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Irrelevant. </dd></dl> + +</div> +</div> +<a id="a8ad0c7bfd07edb6d42d86b166347206b" name="a8ad0c7bfd07edb6d42d86b166347206b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8ad0c7bfd07edb6d42d86b166347206b">&#9670;&#160;</a></span>show_arrays()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void show_arrays </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print test data arrays </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__emulate__unaligned_2main_8c.html b/sw/demo__emulate__unaligned_2main_8c.html new file mode 100644 index 0000000000..f3c9f0993a --- /dev/null +++ b/sw/demo__emulate__unaligned_2main_8c.html @@ -0,0 +1,216 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_emulate_unaligned/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_2ba96d3140b089dada6fb9f817b7975f.html">demo_emulate_unaligned</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Demo program for emulating unaligned memory accesses using the NEORV32 run-time environment (RTE). +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4407b4d6eae3ba7fe9538b1242a7e165" id="r_a4407b4d6eae3ba7fe9538b1242a7e165"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4407b4d6eae3ba7fe9538b1242a7e165">DEBUG_INFO</a>&#160;&#160;&#160;0</td></tr> +<tr class="separator:a4407b4d6eae3ba7fe9538b1242a7e165"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">Global variables</h2></td></tr> +<tr class="memitem:a556f675911f865ead06c36072b1b9c3b" id="r_a556f675911f865ead06c36072b1b9c3b"><td class="memItemLeft" align="right" valign="top">volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a556f675911f865ead06c36072b1b9c3b">data_block</a> [2]</td></tr> +<tr class="separator:a556f675911f865ead06c36072b1b9c3b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a07da42351229525998965b219e827460" id="r_a07da42351229525998965b219e827460"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a07da42351229525998965b219e827460">trap_handler_emulate_unaligned_lw</a> (void)</td></tr> +<tr class="separator:a07da42351229525998965b219e827460"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Demo program for emulating unaligned memory accesses using the NEORV32 run-time environment (RTE). </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a4407b4d6eae3ba7fe9538b1242a7e165" name="a4407b4d6eae3ba7fe9538b1242a7e165"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4407b4d6eae3ba7fe9538b1242a7e165">&#9670;&#160;</a></span>DEBUG_INFO</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DEBUG_INFO&#160;&#160;&#160;0</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Show debug info when 1 </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Demo program to showcase RTE-based emulation of unaligned memory accesses.</p> +<dl class="section return"><dt>Returns</dt><dd>Irrelevant. </dd></dl> + +</div> +</div> +<a id="a07da42351229525998965b219e827460" name="a07da42351229525998965b219e827460"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a07da42351229525998965b219e827460">&#9670;&#160;</a></span>trap_handler_emulate_unaligned_lw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void trap_handler_emulate_unaligned_lw </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Emulate unaligned load-word operation</p> +<dl class="section note"><dt>Note</dt><dd>This is a RTE "second-level" trap handler.</dd></dl> +<dl class="section warning"><dt>Warning</dt><dd>Compressed load instructions are not supported here! </dd></dl> + +</div> +</div> +<h2 class="groupheader">Variable Documentation</h2> +<a id="a556f675911f865ead06c36072b1b9c3b" name="a556f675911f865ead06c36072b1b9c3b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a556f675911f865ead06c36072b1b9c3b">&#9670;&#160;</a></span>data_block</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">volatile uint32_t data_block[2]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Emulate unaligned load-word operation</p> +<dl class="section note"><dt>Note</dt><dd>This is a RTE "second-level" trap handler.</dd></dl> +<dl class="section warning"><dt>Warning</dt><dd>Compressed load instructions are not supported here! </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__gptmr_2main_8c.html b/sw/demo__gptmr_2main_8c.html new file mode 100644 index 0000000000..e38b6f42d3 --- /dev/null +++ b/sw/demo__gptmr_2main_8c.html @@ -0,0 +1,182 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_gptmr/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_b68ac2efc0c6ed3018151f7bb6c45670.html">demo_gptmr</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Simple GPTMR timer-match interrupt example. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a2bd89412466a65329711bfd5c29199c9" id="r_a2bd89412466a65329711bfd5c29199c9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2bd89412466a65329711bfd5c29199c9">gptmr_firq_handler</a> (void)</td></tr> +<tr class="separator:a2bd89412466a65329711bfd5c29199c9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Simple GPTMR timer-match interrupt example. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a2bd89412466a65329711bfd5c29199c9" name="a2bd89412466a65329711bfd5c29199c9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2bd89412466a65329711bfd5c29199c9">&#9670;&#160;</a></span>gptmr_firq_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void gptmr_firq_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>GPTMR FIRQ handler.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function has to be of type "void xyz(void)" and must not use any interrupt attributes! </dd></dl> + +</div> +</div> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>This program blinks an LED at GPIO.output(0) at 1Hz using the general purpose timer interrupt.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the GPTMR unit to be synthesized (and UART0 and GPIO).</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Should not return. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__hpm_2main_8c.html b/sw/demo__hpm_2main_8c.html new file mode 100644 index 0000000000..1c4b6ef532 --- /dev/null +++ b/sw/demo__hpm_2main_8c.html @@ -0,0 +1,161 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_hpm/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_93967190e0d2e549ceca77007097849b.html">demo_hpm</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Hardware performance monitor (HPM) example program. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Hardware performance monitor (HPM) example program. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the CPU Zihpm extension (with at least 2 regions) and UART0.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__neopixel_2main_8c.html b/sw/demo__neopixel_2main_8c.html new file mode 100644 index 0000000000..ff0d1e47dd --- /dev/null +++ b/sw/demo__neopixel_2main_8c.html @@ -0,0 +1,228 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_neopixel/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_d68bb921df3f2482fe9ace49b286ab86.html">demo_neopixel</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>NeoPixel (WS2812) interface demo using the processor's smart LED interface (NEOLED). +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa1dddb8d6b3b4d2f19afc3c09e2ff572" id="r_aa1dddb8d6b3b4d2f19afc3c09e2ff572"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa1dddb8d6b3b4d2f19afc3c09e2ff572">NUM_LEDS_24BIT</a>&#160;&#160;&#160;(12)</td></tr> +<tr class="separator:aa1dddb8d6b3b4d2f19afc3c09e2ff572"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1d1d5e7ff16f25b68fdf779befd298f7" id="r_a1d1d5e7ff16f25b68fdf779befd298f7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1d1d5e7ff16f25b68fdf779befd298f7">MAX_INTENSITY</a>&#160;&#160;&#160;(16)</td></tr> +<tr class="separator:a1d1d5e7ff16f25b68fdf779befd298f7"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a2736ec755f9e10c80bf66f727f870ffc" id="r_a2736ec755f9e10c80bf66f727f870ffc"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2736ec755f9e10c80bf66f727f870ffc">hsv2rgb</a> (int h, int v)</td></tr> +<tr class="separator:a2736ec755f9e10c80bf66f727f870ffc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>NeoPixel (WS2812) interface demo using the processor's smart LED interface (NEOLED). </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a1d1d5e7ff16f25b68fdf779befd298f7" name="a1d1d5e7ff16f25b68fdf779befd298f7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1d1d5e7ff16f25b68fdf779befd298f7">&#9670;&#160;</a></span>MAX_INTENSITY</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define MAX_INTENSITY&#160;&#160;&#160;(16)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Max intensity (0..255) </p> + +</div> +</div> +<a id="aa1dddb8d6b3b4d2f19afc3c09e2ff572" name="aa1dddb8d6b3b4d2f19afc3c09e2ff572"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa1dddb8d6b3b4d2f19afc3c09e2ff572">&#9670;&#160;</a></span>NUM_LEDS_24BIT</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NUM_LEDS_24BIT&#160;&#160;&#160;(12)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Number of RGB LEDs in stripe (24-bit data) </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a2736ec755f9e10c80bf66f727f870ffc" name="a2736ec755f9e10c80bf66f727f870ffc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2736ec755f9e10c80bf66f727f870ffc">&#9670;&#160;</a></span>hsv2rgb()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t hsv2rgb </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>h</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>v</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Convert HSV color to RGB.</p> +<dl class="section note"><dt>Note</dt><dd>Very simple version: using integer arithmetic and ignoring saturation (saturation is always MAX).</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>Hue (color angle), 0..359 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">v</td><td>Value (intensity), 0..255 </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>LSB-aligned 24-bit RGB data [G,R,B] </dd></dl> + +</div> +</div> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function This demo uses a 12-LED RGB ring</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the NEOLED controller to be synthesized (UART0 is optional).</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__newlib_2main_8c.html b/sw/demo__newlib_2main_8c.html new file mode 100644 index 0000000000..2934127ab5 --- /dev/null +++ b/sw/demo__newlib_2main_8c.html @@ -0,0 +1,185 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_newlib/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_23717ebbabf7a51c0558262947e0fe3b.html">demo_newlib</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Demo/test program for NEORV32's newlib C standard library support. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +<code>#include &lt;unistd.h&gt;</code><br /> +<code>#include &lt;time.h&gt;</code><br /> +<code>#include &lt;stdlib.h&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Print main's return code using a destructor</div></td></tr> +<tr class="memitem:a7076a1dfd3c18c91fcf665ce54b087b3" id="r_a7076a1dfd3c18c91fcf665ce54b087b3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7076a1dfd3c18c91fcf665ce54b087b3">main_destructor_test</a> (void)</td></tr> +<tr class="separator:a7076a1dfd3c18c91fcf665ce54b087b3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Demo/test program for NEORV32's newlib C standard library support. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function: Check some of newlib's core functions.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires UART0.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +<a id="a7076a1dfd3c18c91fcf665ce54b087b3" name="a7076a1dfd3c18c91fcf665ce54b087b3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7076a1dfd3c18c91fcf665ce54b087b3">&#9670;&#160;</a></span>main_destructor_test()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void main_destructor_test </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function: Check some of newlib's core functions.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires UART0.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__onewire_2main_8c.html b/sw/demo__onewire_2main_8c.html new file mode 100644 index 0000000000..24199dda66 --- /dev/null +++ b/sw/demo__onewire_2main_8c.html @@ -0,0 +1,270 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_onewire/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_3b3bafc48b460f797485cc75b94aa81c.html">demo_onewire</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Demo program for the NEORV32 1-Wire interface controller (ONEWIRE). +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +<code>#include &lt;string.h&gt;</code><br /> +<code>#include &quot;onewire_aux.h&quot;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:af25820ed386a66a0d6bb4dcdd2204704" id="r_af25820ed386a66a0d6bb4dcdd2204704"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af25820ed386a66a0d6bb4dcdd2204704">show_help</a> (void)</td></tr> +<tr class="separator:af25820ed386a66a0d6bb4dcdd2204704"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a29d5831498c2eaf0415d6f01efb9e7ce" id="r_a29d5831498c2eaf0415d6f01efb9e7ce"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a29d5831498c2eaf0415d6f01efb9e7ce">show_1wire_commands</a> (void)</td></tr> +<tr class="separator:a29d5831498c2eaf0415d6f01efb9e7ce"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a951a31029af34715f20856eb82432637" id="r_a951a31029af34715f20856eb82432637"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a951a31029af34715f20856eb82432637">read_byte</a> (void)</td></tr> +<tr class="separator:a951a31029af34715f20856eb82432637"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a28283848f09bf8feebc860a51545f487" id="r_a28283848f09bf8feebc860a51545f487"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a28283848f09bf8feebc860a51545f487">write_byte</a> (void)</td></tr> +<tr class="separator:a28283848f09bf8feebc860a51545f487"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac07c9cfd80ac2e24be9dac6cf943b7de" id="r_ac07c9cfd80ac2e24be9dac6cf943b7de"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac07c9cfd80ac2e24be9dac6cf943b7de">scan_bus</a> (void)</td></tr> +<tr class="separator:ac07c9cfd80ac2e24be9dac6cf943b7de"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:a8c86c6436e898f550d96b4ae9aa8c2cd" id="r_a8c86c6436e898f550d96b4ae9aa8c2cd"><td class="memItemLeft" align="right" valign="top"><a id="a8c86c6436e898f550d96b4ae9aa8c2cd" name="a8c86c6436e898f550d96b4ae9aa8c2cd"></a> +const char&#160;</td><td class="memItemRight" valign="bottom"><b>hex_c</b> [16] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}</td></tr> +<tr class="separator:a8c86c6436e898f550d96b4ae9aa8c2cd"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Demo program for the NEORV32 1-Wire interface controller (ONEWIRE). </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the ONEWIRE and UART0 modules. Only non-blocking ONEWIRE functions are used.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>!=0 if setup error </dd></dl> + +</div> +</div> +<a id="a951a31029af34715f20856eb82432637" name="a951a31029af34715f20856eb82432637"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a951a31029af34715f20856eb82432637">&#9670;&#160;</a></span>read_byte()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void read_byte </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Read full byte from bus. </p> + +</div> +</div> +<a id="ac07c9cfd80ac2e24be9dac6cf943b7de" name="ac07c9cfd80ac2e24be9dac6cf943b7de"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac07c9cfd80ac2e24be9dac6cf943b7de">&#9670;&#160;</a></span>scan_bus()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void scan_bus </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Scan bus for devices and print IDs. </p> + +</div> +</div> +<a id="a29d5831498c2eaf0415d6f01efb9e7ce" name="a29d5831498c2eaf0415d6f01efb9e7ce"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a29d5831498c2eaf0415d6f01efb9e7ce">&#9670;&#160;</a></span>show_1wire_commands()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void show_1wire_commands </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Show standard 1-wire commands. </p> + +</div> +</div> +<a id="af25820ed386a66a0d6bb4dcdd2204704" name="af25820ed386a66a0d6bb4dcdd2204704"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af25820ed386a66a0d6bb4dcdd2204704">&#9670;&#160;</a></span>show_help()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void show_help </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Show help menu. </p> + +</div> +</div> +<a id="a28283848f09bf8feebc860a51545f487" name="a28283848f09bf8feebc860a51545f487"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a28283848f09bf8feebc860a51545f487">&#9670;&#160;</a></span>write_byte()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void write_byte </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Write full byte to bus. </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__pwm_2main_8c.html b/sw/demo__pwm_2main_8c.html new file mode 100644 index 0000000000..81089392a1 --- /dev/null +++ b/sw/demo__pwm_2main_8c.html @@ -0,0 +1,178 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_pwm/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_b683da3a5fc966bff32ebf7cda721811.html">demo_pwm</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Simple PWM demo program. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2351f30f0895b552e5fe9944d69e645d" id="r_a2351f30f0895b552e5fe9944d69e645d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2351f30f0895b552e5fe9944d69e645d">MAX_DUTY</a>&#160;&#160;&#160;200</td></tr> +<tr class="separator:a2351f30f0895b552e5fe9944d69e645d"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Simple PWM demo program. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a2351f30f0895b552e5fe9944d69e645d" name="a2351f30f0895b552e5fe9944d69e645d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2351f30f0895b552e5fe9944d69e645d">&#9670;&#160;</a></span>MAX_DUTY</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define MAX_DUTY&#160;&#160;&#160;200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Maximum PWM output intensity (8-bit duty cycle) </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>This program generates a simple dimming sequence for PWM channels 0 to 3.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the PWM controller to be synthesized (the UART is optional).</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>!=0 if error. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__sdi_2main_8c.html b/sw/demo__sdi_2main_8c.html new file mode 100644 index 0000000000..e75b5ac0e2 --- /dev/null +++ b/sw/demo__sdi_2main_8c.html @@ -0,0 +1,202 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_sdi/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_c413aba6cb5da07a571465ba333950af.html">demo_sdi</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>SDI test program (direct access to the SDI module). +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +<code>#include &lt;string.h&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ae3dc843520a800d7ba2b5d6be03d9c3d" id="r_ae3dc843520a800d7ba2b5d6be03d9c3d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae3dc843520a800d7ba2b5d6be03d9c3d">sdi_put</a> (void)</td></tr> +<tr class="separator:ae3dc843520a800d7ba2b5d6be03d9c3d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa25f620a5631e862252be1d5429e8585" id="r_aa25f620a5631e862252be1d5429e8585"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa25f620a5631e862252be1d5429e8585">sdi_get</a> (void)</td></tr> +<tr class="separator:aa25f620a5631e862252be1d5429e8585"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>SDI test program (direct access to the SDI module). </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>This program provides an interactive console for the SDI module.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires UART0 and the SDI to be synthesized.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Irrelevant. </dd></dl> + +</div> +</div> +<a id="aa25f620a5631e862252be1d5429e8585" name="aa25f620a5631e862252be1d5429e8585"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa25f620a5631e862252be1d5429e8585">&#9670;&#160;</a></span>sdi_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void sdi_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Read data from SDI RX buffer. </p> + +</div> +</div> +<a id="ae3dc843520a800d7ba2b5d6be03d9c3d" name="ae3dc843520a800d7ba2b5d6be03d9c3d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae3dc843520a800d7ba2b5d6be03d9c3d">&#9670;&#160;</a></span>sdi_put()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void sdi_put </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Write data to SDI TX buffer. </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__slink_2main_8c.html b/sw/demo__slink_2main_8c.html new file mode 100644 index 0000000000..6f5e5de3d1 --- /dev/null +++ b/sw/demo__slink_2main_8c.html @@ -0,0 +1,182 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_slink/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_c2d46947bdd73c33f53326fc5ee3a272.html">demo_slink</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>SLINK demo program. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +<code>#include &lt;string.h&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a48c79e20ed1d4138d61b5593bdbe537a" id="r_a48c79e20ed1d4138d61b5593bdbe537a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a48c79e20ed1d4138d61b5593bdbe537a">slink_firq_handler</a> (void)</td></tr> +<tr class="separator:a48c79e20ed1d4138d61b5593bdbe537a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>SLINK demo program. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Simple SLINK demo program.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the UART0 and the SLINK to be synthesized.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>=! 0 if execution failed. </dd></dl> + +</div> +</div> +<a id="a48c79e20ed1d4138d61b5593bdbe537a" name="a48c79e20ed1d4138d61b5593bdbe537a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a48c79e20ed1d4138d61b5593bdbe537a">&#9670;&#160;</a></span>slink_firq_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void slink_firq_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SLINK interrupt handler. </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__spi_2main_8c.html b/sw/demo__spi_2main_8c.html new file mode 100644 index 0000000000..90b38ba238 --- /dev/null +++ b/sw/demo__spi_2main_8c.html @@ -0,0 +1,261 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_spi/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_4c113257314015688a865e1bb8429184.html">demo_spi</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>SPI bus explorer (execute SPI transactions by hand). +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +<code>#include &lt;string.h&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a6f94991b8943a141ed4124585222470d" id="r_a6f94991b8943a141ed4124585222470d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6f94991b8943a141ed4124585222470d">spi_cs</a> (uint32_t type)</td></tr> +<tr class="separator:a6f94991b8943a141ed4124585222470d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a13e10b34fbbffca6c31f0ce25b3f8432" id="r_a13e10b34fbbffca6c31f0ce25b3f8432"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a13e10b34fbbffca6c31f0ce25b3f8432">spi_trans</a> (void)</td></tr> +<tr class="separator:a13e10b34fbbffca6c31f0ce25b3f8432"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a755192be6c3cf9904564b0eee99de445" id="r_a755192be6c3cf9904564b0eee99de445"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a755192be6c3cf9904564b0eee99de445">spi_setup</a> (void)</td></tr> +<tr class="separator:a755192be6c3cf9904564b0eee99de445"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac582208281cd6fce4eb61c234f312ef6" id="r_ac582208281cd6fce4eb61c234f312ef6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac582208281cd6fce4eb61c234f312ef6">aux_print_hex_byte</a> (uint8_t byte)</td></tr> +<tr class="separator:ac582208281cd6fce4eb61c234f312ef6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:a4ebbc33db8ee81cb971eba8365696709" id="r_a4ebbc33db8ee81cb971eba8365696709"><td class="memItemLeft" align="right" valign="top"><a id="a4ebbc33db8ee81cb971eba8365696709" name="a4ebbc33db8ee81cb971eba8365696709"></a> +uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>spi_configured</b></td></tr> +<tr class="separator:a4ebbc33db8ee81cb971eba8365696709"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>SPI bus explorer (execute SPI transactions by hand). </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ac582208281cd6fce4eb61c234f312ef6" name="ac582208281cd6fce4eb61c234f312ef6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac582208281cd6fce4eb61c234f312ef6">&#9670;&#160;</a></span>aux_print_hex_byte()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void aux_print_hex_byte </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>byte</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print HEX byte.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">byte</td><td>Byte to be printed as 2-cahr hex value. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>This program provides an interactive console to communicate with SPI devices.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the UART and the SPI to be synthesized.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Irrelevant. </dd></dl> + +</div> +</div> +<a id="a6f94991b8943a141ed4124585222470d" name="a6f94991b8943a141ed4124585222470d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6f94991b8943a141ed4124585222470d">&#9670;&#160;</a></span>spi_cs()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void spi_cs </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>type</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable or disable chip-select line</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>0=disable, 1=enable </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a755192be6c3cf9904564b0eee99de445" name="a755192be6c3cf9904564b0eee99de445"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a755192be6c3cf9904564b0eee99de445">&#9670;&#160;</a></span>spi_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void spi_setup </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Configure SPI module </p> + +</div> +</div> +<a id="a13e10b34fbbffca6c31f0ce25b3f8432" name="a13e10b34fbbffca6c31f0ce25b3f8432"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a13e10b34fbbffca6c31f0ce25b3f8432">&#9670;&#160;</a></span>spi_trans()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void spi_trans </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI data transfer </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__spi__irq_2main_8c.html b/sw/demo__spi__irq_2main_8c.html new file mode 100644 index 0000000000..e62b2b5b05 --- /dev/null +++ b/sw/demo__spi__irq_2main_8c.html @@ -0,0 +1,192 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_spi_irq/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_8f848e36ac87ced1c361afcc0549ca32.html">demo_spi_irq</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Example of an ISR driven SPI transfer. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +<code>#include &lt;string.h&gt;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__spi__irq_8h_source.html">neorv32_spi_irq.h</a>&quot;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a7e266cc5247c999948dacc2102bd184a" id="r_a7e266cc5247c999948dacc2102bd184a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7e266cc5247c999948dacc2102bd184a">spi_irq_handler</a> (void)</td></tr> +<tr class="separator:a7e266cc5247c999948dacc2102bd184a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:a9f865a7dd1c92230d701ba10cd81ad78" id="r_a9f865a7dd1c92230d701ba10cd81ad78"><td class="memItemLeft" align="right" valign="top"><a id="a9f865a7dd1c92230d701ba10cd81ad78" name="a9f865a7dd1c92230d701ba10cd81ad78"></a> +<a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a>&#160;</td><td class="memItemRight" valign="bottom"><b>g_neorv32_spi</b></td></tr> +<tr class="separator:a9f865a7dd1c92230d701ba10cd81ad78"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Example of an ISR driven SPI transfer. </p> +<dl class="section author"><dt>Author</dt><dd>Andreas Kaeberlein </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>This program demonstrates the usage of an ISR driven SPI transfer</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the UART and the SPI to be synthesized.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Irrelevant. </dd></dl> + +</div> +</div> +<a id="a7e266cc5247c999948dacc2102bd184a" name="a7e266cc5247c999948dacc2102bd184a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7e266cc5247c999948dacc2102bd184a">&#9670;&#160;</a></span>spi_irq_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void spi_irq_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI Interrupt Handler</p> +<dl class="section note"><dt>Note</dt><dd>Captures/Transmits the data to the SPI core</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>void. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__trng_2main_8c.html b/sw/demo__trng_2main_8c.html new file mode 100644 index 0000000000..c640a4248e --- /dev/null +++ b/sw/demo__trng_2main_8c.html @@ -0,0 +1,261 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_trng/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_237db5b95db643499d4c20f0bc5f6a7d.html">demo_trng</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>True random number generator demo program. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a64205d97b57c99dc5e95b8621827f4a4" id="r_a64205d97b57c99dc5e95b8621827f4a4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a64205d97b57c99dc5e95b8621827f4a4">print_random_data</a> (void)</td></tr> +<tr class="separator:a64205d97b57c99dc5e95b8621827f4a4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af37eae672fee5e81f00a1dbf51b7e417" id="r_af37eae672fee5e81f00a1dbf51b7e417"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af37eae672fee5e81f00a1dbf51b7e417">repetition_count_test</a> (void)</td></tr> +<tr class="separator:af37eae672fee5e81f00a1dbf51b7e417"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a23a91e6fe2cc44f3c29baf0d331e05db" id="r_a23a91e6fe2cc44f3c29baf0d331e05db"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a23a91e6fe2cc44f3c29baf0d331e05db">adaptive_proportion_test</a> (void)</td></tr> +<tr class="separator:a23a91e6fe2cc44f3c29baf0d331e05db"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4e49f5e3feb4bd5755f919cd3310b506" id="r_a4e49f5e3feb4bd5755f919cd3310b506"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4e49f5e3feb4bd5755f919cd3310b506">generate_histogram</a> (void)</td></tr> +<tr class="separator:a4e49f5e3feb4bd5755f919cd3310b506"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abbde1237eed617466fb971a78c3acd1e" id="r_abbde1237eed617466fb971a78c3acd1e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abbde1237eed617466fb971a78c3acd1e">compute_rate</a> (void)</td></tr> +<tr class="separator:abbde1237eed617466fb971a78c3acd1e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a840291bc02cba5474a4cb46a9b9566fe" id="r_a840291bc02cba5474a4cb46a9b9566fe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a840291bc02cba5474a4cb46a9b9566fe">main</a> (void)</td></tr> +<tr class="separator:a840291bc02cba5474a4cb46a9b9566fe"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>True random number generator demo program. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a23a91e6fe2cc44f3c29baf0d331e05db" name="a23a91e6fe2cc44f3c29baf0d331e05db"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a23a91e6fe2cc44f3c29baf0d331e05db">&#9670;&#160;</a></span>adaptive_proportion_test()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void adaptive_proportion_test </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Run adaptive proportion test (NIST SP 800-90B) </p> + +</div> +</div> +<a id="abbde1237eed617466fb971a78c3acd1e" name="abbde1237eed617466fb971a78c3acd1e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abbde1237eed617466fb971a78c3acd1e">&#9670;&#160;</a></span>compute_rate()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void compute_rate </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Compute average random generation rate </p> + +</div> +</div> +<a id="a4e49f5e3feb4bd5755f919cd3310b506" name="a4e49f5e3feb4bd5755f919cd3310b506"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4e49f5e3feb4bd5755f919cd3310b506">&#9670;&#160;</a></span>generate_histogram()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void generate_histogram </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Generate and print histogram. Samples random data until a key is pressed. </p> + +</div> +</div> +<a id="a840291bc02cba5474a4cb46a9b9566fe" name="a840291bc02cba5474a4cb46a9b9566fe"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a840291bc02cba5474a4cb46a9b9566fe">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Simple true random number test/demo program.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the UART and the TRNG to be synthesized.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +<a id="a64205d97b57c99dc5e95b8621827f4a4" name="a64205d97b57c99dc5e95b8621827f4a4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a64205d97b57c99dc5e95b8621827f4a4">&#9670;&#160;</a></span>print_random_data()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void print_random_data </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print random numbers until a key is pressed. </p> + +</div> +</div> +<a id="af37eae672fee5e81f00a1dbf51b7e417" name="af37eae672fee5e81f00a1dbf51b7e417"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af37eae672fee5e81f00a1dbf51b7e417">&#9670;&#160;</a></span>repetition_count_test()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void repetition_count_test </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Run repetition count test (NIST SP 800-90B) </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__twi_2main_8c.html b/sw/demo__twi_2main_8c.html new file mode 100644 index 0000000000..0ccb40433f --- /dev/null +++ b/sw/demo__twi_2main_8c.html @@ -0,0 +1,248 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_twi/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_ebeff77b922fbb914a1494857a82a38e.html">demo_twi</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>TWI bus explorer. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +<code>#include &lt;string.h&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:aace46ee34e954f9ebee5873beb0785f1" id="r_aace46ee34e954f9ebee5873beb0785f1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aace46ee34e954f9ebee5873beb0785f1">scan_twi</a> (void)</td></tr> +<tr class="separator:aace46ee34e954f9ebee5873beb0785f1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acee0c1770467f85a150d072ac7e1252f" id="r_acee0c1770467f85a150d072ac7e1252f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acee0c1770467f85a150d072ac7e1252f">set_clock</a> (void)</td></tr> +<tr class="separator:acee0c1770467f85a150d072ac7e1252f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa94edd4f55a3ac18913f661f4bc16fb1" id="r_aa94edd4f55a3ac18913f661f4bc16fb1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa94edd4f55a3ac18913f661f4bc16fb1">send_twi</a> (void)</td></tr> +<tr class="separator:aa94edd4f55a3ac18913f661f4bc16fb1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2ebc688bc1dad328693fc0974b378fa0" id="r_a2ebc688bc1dad328693fc0974b378fa0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2ebc688bc1dad328693fc0974b378fa0">print_hex_byte</a> (uint8_t data)</td></tr> +<tr class="separator:a2ebc688bc1dad328693fc0974b378fa0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>TWI bus explorer. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>This program provides an interactive console to communicate with TWI devices.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the UART to be synthesized.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +<a id="a2ebc688bc1dad328693fc0974b378fa0" name="a2ebc688bc1dad328693fc0974b378fa0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2ebc688bc1dad328693fc0974b378fa0">&#9670;&#160;</a></span>print_hex_byte()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void print_hex_byte </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print byte as hex chars via UART0.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">data</td><td>8-bit data to be printed as two hex chars. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="aace46ee34e954f9ebee5873beb0785f1" name="aace46ee34e954f9ebee5873beb0785f1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aace46ee34e954f9ebee5873beb0785f1">&#9670;&#160;</a></span>scan_twi()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void scan_twi </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Scan 7-bit TWI address space and print results </p> + +</div> +</div> +<a id="aa94edd4f55a3ac18913f661f4bc16fb1" name="aa94edd4f55a3ac18913f661f4bc16fb1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa94edd4f55a3ac18913f661f4bc16fb1">&#9670;&#160;</a></span>send_twi()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void send_twi </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Read/write menu to transfer 1 byte from/to bus </p> + +</div> +</div> +<a id="acee0c1770467f85a150d072ac7e1252f" name="acee0c1770467f85a150d072ac7e1252f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acee0c1770467f85a150d072ac7e1252f">&#9670;&#160;</a></span>set_clock()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void set_clock </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>TWI clock setup </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__wdt_2main_8c.html b/sw/demo__wdt_2main_8c.html new file mode 100644 index 0000000000..ef4a1b7259 --- /dev/null +++ b/sw/demo__wdt_2main_8c.html @@ -0,0 +1,178 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_wdt/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_78d7bfa405ff3a31fa7539cfd8bc8262.html">demo_wdt</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Watchdog demo program. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a01af3905e60b1869f669315f4a1297f5" id="r_a01af3905e60b1869f669315f4a1297f5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a01af3905e60b1869f669315f4a1297f5">WDT_TIMEOUT_S</a>&#160;&#160;&#160;8</td></tr> +<tr class="separator:a01af3905e60b1869f669315f4a1297f5"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Watchdog demo program. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a01af3905e60b1869f669315f4a1297f5" name="a01af3905e60b1869f669315f4a1297f5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a01af3905e60b1869f669315f4a1297f5">&#9670;&#160;</a></span>WDT_TIMEOUT_S</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define WDT_TIMEOUT_S&#160;&#160;&#160;8</td> + </tr> + </table> +</div><div class="memdoc"> +<p>WDT timeout (until system reset) in seconds </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the WDT and UART0 to be synthesized.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__xip_2main_8c.html b/sw/demo__xip_2main_8c.html new file mode 100644 index 0000000000..d48b7176db --- /dev/null +++ b/sw/demo__xip_2main_8c.html @@ -0,0 +1,479 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_xip/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html">demo_xip</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#define-members">Macros</a> &#124; +<a href="#enum-members">Enumerations</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Interactive console program to upload and execute a XIP program. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr class="memitem:a0035ad41f622dbfc2412318a8ed39257" id="r_a0035ad41f622dbfc2412318a8ed39257"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0035ad41f622dbfc2412318a8ed39257">EXE_SIGNATURE</a>&#160;&#160;&#160;0x4788CAFE</td></tr> +<tr class="separator:a0035ad41f622dbfc2412318a8ed39257"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a23a9099a5f8fc9c6e253c0eecb2be8db" id="r_a23a9099a5f8fc9c6e253c0eecb2be8db"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a23a9099a5f8fc9c6e253c0eecb2be8db">FLASH_BASE</a>&#160;&#160;&#160;0x00400000</td></tr> +<tr class="separator:a23a9099a5f8fc9c6e253c0eecb2be8db"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af9b3c37c806499fc435302f5bce6a122" id="r_af9b3c37c806499fc435302f5bce6a122"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af9b3c37c806499fc435302f5bce6a122">FLASH_ABYTES</a>&#160;&#160;&#160;3</td></tr> +<tr class="separator:af9b3c37c806499fc435302f5bce6a122"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aec72efe062dbdb149ae6d4f8b1be6793" id="r_aec72efe062dbdb149ae6d4f8b1be6793"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aec72efe062dbdb149ae6d4f8b1be6793">XIP_CLK_PRSC</a>&#160;&#160;&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e">CLK_PRSC_128</a></td></tr> +<tr class="separator:aec72efe062dbdb149ae6d4f8b1be6793"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6b20d41d6252e9871430c242cb1a56e7" id="r_a6b20d41d6252e9871430c242cb1a56e7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>&#160;&#160;&#160;(7*1024)</td></tr> +<tr class="separator:a6b20d41d6252e9871430c242cb1a56e7"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a> +Enumerations</h2></td></tr> +<tr class="memitem:af30de1c8d8502ad374612d308cfbd12e" id="r_af30de1c8d8502ad374612d308cfbd12e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af30de1c8d8502ad374612d308cfbd12e">SPI_FLASH_CMD</a> { <br /> +&#160;&#160;<a class="el" href="#af30de1c8d8502ad374612d308cfbd12ea528cebc54176f6f4c0a8f7f16fb28ca1">SPI_FLASH_CMD_WRITE</a> = 0x02 +, <a class="el" href="#af30de1c8d8502ad374612d308cfbd12ea6c1994ba2cfd97e0c77dcdf8bbdfdfa6">SPI_FLASH_CMD_READ</a> = 0x03 +, <a class="el" href="#af30de1c8d8502ad374612d308cfbd12eaa91d3c1d788b21fc798a5976c9f0da77">SPI_FLASH_CMD_WRITE_DISABLE</a> = 0x04 +, <a class="el" href="#af30de1c8d8502ad374612d308cfbd12ea5fbc6551a10549b38e5ab4a76c38f214">SPI_FLASH_CMD_READ_STATUS</a> = 0x05 +, <br /> +&#160;&#160;<a class="el" href="#af30de1c8d8502ad374612d308cfbd12ea152e091e93778f217f8b766298351513">SPI_FLASH_CMD_WRITE_ENABLE</a> = 0x06 +, <a class="el" href="#af30de1c8d8502ad374612d308cfbd12eacd62141d6331f66e31bd252e2a92b836">SPI_FLASH_CMD_SECTOR_ERASE</a> = 0xD8 +<br /> + }</td></tr> +<tr class="separator:af30de1c8d8502ad374612d308cfbd12e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adccf1bb8f1f203cb1350f7f2eb15a08e" id="r_adccf1bb8f1f203cb1350f7f2eb15a08e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adccf1bb8f1f203cb1350f7f2eb15a08e">SPI_FLASH_SREG</a> { <a class="el" href="#adccf1bb8f1f203cb1350f7f2eb15a08eac84de63bbea3989c71bcc92d1d01cfa4">SPI_FLASH_SREG_WIP</a> = 0 +, <a class="el" href="#adccf1bb8f1f203cb1350f7f2eb15a08ea90f3b76faed13819ee13e574d1bff0c1">SPI_FLASH_SREG_WEL</a> = 1 + }</td></tr> +<tr class="separator:adccf1bb8f1f203cb1350f7f2eb15a08e"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Function prototypes</div></td></tr> +<tr class="memitem:a23bd7bd7b0808d919fd09ac0a8258498" id="r_a23bd7bd7b0808d919fd09ac0a8258498"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a23bd7bd7b0808d919fd09ac0a8258498">xip_flash_access_check</a> (void)</td></tr> +<tr class="separator:a23bd7bd7b0808d919fd09ac0a8258498"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9e0b2714126b6699ddb65485c93293e4" id="r_a9e0b2714126b6699ddb65485c93293e4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9e0b2714126b6699ddb65485c93293e4">xip_flash_erase_sector</a> (uint32_t base_addr)</td></tr> +<tr class="separator:a9e0b2714126b6699ddb65485c93293e4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4ddfa8fdc072cadeef18a4a10bc8b174" id="r_a4ddfa8fdc072cadeef18a4a10bc8b174"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4ddfa8fdc072cadeef18a4a10bc8b174">xip_flash_program</a> (uint32_t *src, uint32_t base_addr, uint32_t size)</td></tr> +<tr class="separator:a4ddfa8fdc072cadeef18a4a10bc8b174"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0458656f8a108ff31f4bbbd005f029a0" id="r_a0458656f8a108ff31f4bbbd005f029a0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0458656f8a108ff31f4bbbd005f029a0">uart_get_executable</a> (uint32_t *dst, uint32_t *size)</td></tr> +<tr class="separator:a0458656f8a108ff31f4bbbd005f029a0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3043d09bdc155f57f45cd91e0cd4d15b" id="r_a3043d09bdc155f57f45cd91e0cd4d15b"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3043d09bdc155f57f45cd91e0cd4d15b">uart_get_word</a> (void)</td></tr> +<tr class="separator:a3043d09bdc155f57f45cd91e0cd4d15b"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">RAM storage for executable</h2></td></tr> +<tr class="memitem:acc95e55a622d79c2a398397d1f9b8033" id="r_acc95e55a622d79c2a398397d1f9b8033"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acc95e55a622d79c2a398397d1f9b8033">ram_buffer</a> [<a class="el" href="#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>/4]</td></tr> +<tr class="separator:acc95e55a622d79c2a398397d1f9b8033"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Interactive console program to upload and execute a XIP program. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a6b20d41d6252e9871430c242cb1a56e7" name="a6b20d41d6252e9871430c242cb1a56e7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6b20d41d6252e9871430c242cb1a56e7">&#9670;&#160;</a></span>BUFFER_SIZE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BUFFER_SIZE&#160;&#160;&#160;(7*1024)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Executable RAM buffer size in bytes </p> + +</div> +</div> +<a id="a0035ad41f622dbfc2412318a8ed39257" name="a0035ad41f622dbfc2412318a8ed39257"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0035ad41f622dbfc2412318a8ed39257">&#9670;&#160;</a></span>EXE_SIGNATURE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define EXE_SIGNATURE&#160;&#160;&#160;0x4788CAFE</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Valid executable identification signature </p> + +</div> +</div> +<a id="af9b3c37c806499fc435302f5bce6a122" name="af9b3c37c806499fc435302f5bce6a122"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af9b3c37c806499fc435302f5bce6a122">&#9670;&#160;</a></span>FLASH_ABYTES</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define FLASH_ABYTES&#160;&#160;&#160;3</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Flash address bytes </p> + +</div> +</div> +<a id="a23a9099a5f8fc9c6e253c0eecb2be8db" name="a23a9099a5f8fc9c6e253c0eecb2be8db"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a23a9099a5f8fc9c6e253c0eecb2be8db">&#9670;&#160;</a></span>FLASH_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define FLASH_BASE&#160;&#160;&#160;0x00400000</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Flash base address (32-bit) </p> + +</div> +</div> +<a id="aec72efe062dbdb149ae6d4f8b1be6793" name="aec72efe062dbdb149ae6d4f8b1be6793"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aec72efe062dbdb149ae6d4f8b1be6793">&#9670;&#160;</a></span>XIP_CLK_PRSC</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define XIP_CLK_PRSC&#160;&#160;&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e">CLK_PRSC_128</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>XIP SPI clock prescaler select </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="af30de1c8d8502ad374612d308cfbd12e" name="af30de1c8d8502ad374612d308cfbd12e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af30de1c8d8502ad374612d308cfbd12e">&#9670;&#160;</a></span>SPI_FLASH_CMD</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#af30de1c8d8502ad374612d308cfbd12e">SPI_FLASH_CMD</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI flash commands </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="af30de1c8d8502ad374612d308cfbd12ea528cebc54176f6f4c0a8f7f16fb28ca1" name="af30de1c8d8502ad374612d308cfbd12ea528cebc54176f6f4c0a8f7f16fb28ca1"></a>SPI_FLASH_CMD_WRITE&#160;</td><td class="fielddoc"><p>Write data </p> +</td></tr> +<tr><td class="fieldname"><a id="af30de1c8d8502ad374612d308cfbd12ea6c1994ba2cfd97e0c77dcdf8bbdfdfa6" name="af30de1c8d8502ad374612d308cfbd12ea6c1994ba2cfd97e0c77dcdf8bbdfdfa6"></a>SPI_FLASH_CMD_READ&#160;</td><td class="fielddoc"><p>Read data </p> +</td></tr> +<tr><td class="fieldname"><a id="af30de1c8d8502ad374612d308cfbd12eaa91d3c1d788b21fc798a5976c9f0da77" name="af30de1c8d8502ad374612d308cfbd12eaa91d3c1d788b21fc798a5976c9f0da77"></a>SPI_FLASH_CMD_WRITE_DISABLE&#160;</td><td class="fielddoc"><p>Disable write access </p> +</td></tr> +<tr><td class="fieldname"><a id="af30de1c8d8502ad374612d308cfbd12ea5fbc6551a10549b38e5ab4a76c38f214" name="af30de1c8d8502ad374612d308cfbd12ea5fbc6551a10549b38e5ab4a76c38f214"></a>SPI_FLASH_CMD_READ_STATUS&#160;</td><td class="fielddoc"><p>Get status register </p> +</td></tr> +<tr><td class="fieldname"><a id="af30de1c8d8502ad374612d308cfbd12ea152e091e93778f217f8b766298351513" name="af30de1c8d8502ad374612d308cfbd12ea152e091e93778f217f8b766298351513"></a>SPI_FLASH_CMD_WRITE_ENABLE&#160;</td><td class="fielddoc"><p>Enable write access </p> +</td></tr> +<tr><td class="fieldname"><a id="af30de1c8d8502ad374612d308cfbd12eacd62141d6331f66e31bd252e2a92b836" name="af30de1c8d8502ad374612d308cfbd12eacd62141d6331f66e31bd252e2a92b836"></a>SPI_FLASH_CMD_SECTOR_ERASE&#160;</td><td class="fielddoc"><p>Erase complete sector </p> +</td></tr> +</table> + +</div> +</div> +<a id="adccf1bb8f1f203cb1350f7f2eb15a08e" name="adccf1bb8f1f203cb1350f7f2eb15a08e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adccf1bb8f1f203cb1350f7f2eb15a08e">&#9670;&#160;</a></span>SPI_FLASH_SREG</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#adccf1bb8f1f203cb1350f7f2eb15a08e">SPI_FLASH_SREG</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI flash status register </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="adccf1bb8f1f203cb1350f7f2eb15a08eac84de63bbea3989c71bcc92d1d01cfa4" name="adccf1bb8f1f203cb1350f7f2eb15a08eac84de63bbea3989c71bcc92d1d01cfa4"></a>SPI_FLASH_SREG_WIP&#160;</td><td class="fielddoc"><p>Write-in-progress data </p> +</td></tr> +<tr><td class="fieldname"><a id="adccf1bb8f1f203cb1350f7f2eb15a08ea90f3b76faed13819ee13e574d1bff0c1" name="adccf1bb8f1f203cb1350f7f2eb15a08ea90f3b76faed13819ee13e574d1bff0c1"></a>SPI_FLASH_SREG_WEL&#160;</td><td class="fielddoc"><p>Write-enable latch </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the XIP module and UART0.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +<a id="a0458656f8a108ff31f4bbbd005f029a0" name="a0458656f8a108ff31f4bbbd005f029a0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0458656f8a108ff31f4bbbd005f029a0">&#9670;&#160;</a></span>uart_get_executable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int uart_get_executable </td> + <td>(</td> + <td class="paramtype">uint32_t *</td> <td class="paramname"><span class="paramname"><em>dst</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t *</td> <td class="paramname"><span class="paramname"><em>length</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get NEORV32 executable via UART.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">dst</td><td>Pointer to uin32_t data array where the executable will be stored. </td></tr> + <tr><td class="paramdir">[out]</td><td class="paramname">length</td><td>Pointer to a uin32_t to store the executable size in bytes. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Returns 0 on success. </dd></dl> + +</div> +</div> +<a id="a3043d09bdc155f57f45cd91e0cd4d15b" name="a3043d09bdc155f57f45cd91e0cd4d15b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3043d09bdc155f57f45cd91e0cd4d15b">&#9670;&#160;</a></span>uart_get_word()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t uart_get_word </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get 32-bit word from UART.</p> +<dl class="section return"><dt>Returns</dt><dd>32-bit data word. </dd></dl> + +</div> +</div> +<a id="a23bd7bd7b0808d919fd09ac0a8258498" name="a23bd7bd7b0808d919fd09ac0a8258498"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a23bd7bd7b0808d919fd09ac0a8258498">&#9670;&#160;</a></span>xip_flash_access_check()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int xip_flash_access_check </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check SPI flash connection by toggling the status register's write enable latch.</p> +<dl class="section return"><dt>Returns</dt><dd>Returns 0 on success. </dd></dl> + +</div> +</div> +<a id="a9e0b2714126b6699ddb65485c93293e4" name="a9e0b2714126b6699ddb65485c93293e4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9e0b2714126b6699ddb65485c93293e4">&#9670;&#160;</a></span>xip_flash_erase_sector()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void xip_flash_erase_sector </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>base_addr</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Erase sector starting at base address.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">base_addr</td><td>Base address of sector to erase. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a4ddfa8fdc072cadeef18a4a10bc8b174" name="a4ddfa8fdc072cadeef18a4a10bc8b174"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4ddfa8fdc072cadeef18a4a10bc8b174">&#9670;&#160;</a></span>xip_flash_program()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void xip_flash_program </td> + <td>(</td> + <td class="paramtype">uint32_t *</td> <td class="paramname"><span class="paramname"><em>src</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>base_addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>size</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Helper function to program the XIP flash via the direct SPI access feature of the XIP module.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function can only be used BEFORE the XIP-mode is activated! </dd></dl> +<dl class="section note"><dt>Note</dt><dd>This function is blocking and performs individual writes for each byte (little-endian byte order!).</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">src</td><td>Pointer to data that will be copied to flash (32-bit). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">base_addr</td><td>Image base address (in flash). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">size</td><td>Image size in bytes. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Returns 0 if write was successful. </dd></dl> + +</div> +</div> +<h2 class="groupheader">Variable Documentation</h2> +<a id="acc95e55a622d79c2a398397d1f9b8033" name="acc95e55a622d79c2a398397d1f9b8033"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acc95e55a622d79c2a398397d1f9b8033">&#9670;&#160;</a></span>ram_buffer</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t ram_buffer[<a class="el" href="#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>/4]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the XIP module and UART0.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/demo__xirq_2main_8c.html b/sw/demo__xirq_2main_8c.html new file mode 100644 index 0000000000..94cbf281b7 --- /dev/null +++ b/sw/demo__xirq_2main_8c.html @@ -0,0 +1,241 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_xirq/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_5534fa9035f54ab438a41c43d6f7fc7a.html">demo_xirq</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>External interrupt controller (XIRQ) demo program (using hardware-assisted prioritization). +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a8874ccfc0b56171c359b5c2ceaf2bd80" id="r_a8874ccfc0b56171c359b5c2ceaf2bd80"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8874ccfc0b56171c359b5c2ceaf2bd80">xirq_handler_ch0</a> (void)</td></tr> +<tr class="separator:a8874ccfc0b56171c359b5c2ceaf2bd80"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abfe0c0bc47a683ba55df2aed63a12d4b" id="r_abfe0c0bc47a683ba55df2aed63a12d4b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abfe0c0bc47a683ba55df2aed63a12d4b">xirq_handler_ch1</a> (void)</td></tr> +<tr class="separator:abfe0c0bc47a683ba55df2aed63a12d4b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae8e3b3236aa2303c2b5e6e421b72cf73" id="r_ae8e3b3236aa2303c2b5e6e421b72cf73"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae8e3b3236aa2303c2b5e6e421b72cf73">xirq_handler_ch2</a> (void)</td></tr> +<tr class="separator:ae8e3b3236aa2303c2b5e6e421b72cf73"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a99e9ae3088f39995c852b2c53ec21266" id="r_a99e9ae3088f39995c852b2c53ec21266"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a99e9ae3088f39995c852b2c53ec21266">xirq_handler_ch3</a> (void)</td></tr> +<tr class="separator:a99e9ae3088f39995c852b2c53ec21266"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>External interrupt controller (XIRQ) demo program (using hardware-assisted prioritization). </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the XIRQ and the UART to be synthesized.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +<a id="a8874ccfc0b56171c359b5c2ceaf2bd80" name="a8874ccfc0b56171c359b5c2ceaf2bd80"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8874ccfc0b56171c359b5c2ceaf2bd80">&#9670;&#160;</a></span>xirq_handler_ch0()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void xirq_handler_ch0 </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>XIRQ handler channel 0. </p><dl class="section warning"><dt>Warning</dt><dd>This function has to be of type "void xyz(void)" and must not use any interrupt attributes! </dd></dl> + +</div> +</div> +<a id="abfe0c0bc47a683ba55df2aed63a12d4b" name="abfe0c0bc47a683ba55df2aed63a12d4b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abfe0c0bc47a683ba55df2aed63a12d4b">&#9670;&#160;</a></span>xirq_handler_ch1()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void xirq_handler_ch1 </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>XIRQ handler channel 1. </p><dl class="section warning"><dt>Warning</dt><dd>This function has to be of type "void xyz(void)" and must not use any interrupt attributes! </dd></dl> + +</div> +</div> +<a id="ae8e3b3236aa2303c2b5e6e421b72cf73" name="ae8e3b3236aa2303c2b5e6e421b72cf73"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae8e3b3236aa2303c2b5e6e421b72cf73">&#9670;&#160;</a></span>xirq_handler_ch2()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void xirq_handler_ch2 </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>XIRQ handler channel 2. </p><dl class="section warning"><dt>Warning</dt><dd>This function has to be of type "void xyz(void)" and must not use any interrupt attributes! </dd></dl> + +</div> +</div> +<a id="a99e9ae3088f39995c852b2c53ec21266" name="a99e9ae3088f39995c852b2c53ec21266"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a99e9ae3088f39995c852b2c53ec21266">&#9670;&#160;</a></span>xirq_handler_ch3()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void xirq_handler_ch3 </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>XIRQ handler channel 3. </p><dl class="section warning"><dt>Warning</dt><dd>This function has to be of type "void xyz(void)" and must not use any interrupt attributes! </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dhry_8h_source.html b/sw/dhry_8h_source.html new file mode 100644 index 0000000000..2dfb3f6473 --- /dev/null +++ b/sw/dhry_8h_source.html @@ -0,0 +1,557 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/dhrystone/dhry.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_b5eb9f7d151d147efb5dbda58439e4e7.html">dhrystone</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">dhry.h</div></div> +</div><!--header--> +<div class="contents"> +<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> ****************************************************************************</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> *</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * &quot;DHRYSTONE&quot; Benchmark Program</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * -----------------------------</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> *</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * Version: C, Version 2.1</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> *</span></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> * File: dhry.h (part 1 of 3)</span></div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> *</span></div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> * Date: May 25, 1988</span></div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> *</span></div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * Author: Reinhold P. Weicker</span></div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * Siemens AG, E STE 35</span></div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * Postfach 3240</span></div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * 8520 Erlangen</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> * Germany (West)</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> * Phone: [xxx-49]-9131-7-20330</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment"> * (8-17 Central European Time)</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment"> * Usenet: ..!mcvax!unido!estevax!weicker</span></div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment"> *</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment"> * Original Version (in Ada) published in</span></div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment"> * &quot;Communications of the ACM&quot; vol. 27., no. 10 (Oct. 1984),</span></div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment"> * pp. 1013 - 1030, together with the statistics</span></div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment"> * on which the distribution of statements etc. is based.</span></div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment"> *</span></div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment"> * In this C version, the following C library functions are used:</span></div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment"> * - strcpy, strcmp (inside the measurement loop)</span></div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment"> * - printf, scanf (outside the measurement loop)</span></div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment"> * In addition, Berkeley UNIX system calls &quot;times ()&quot; or &quot;time ()&quot;</span></div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment"> * are used for execution time measurement. For measurements</span></div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment"> * on other systems, these calls have to be changed.</span></div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment"> *</span></div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment"> * Collection of Results:</span></div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment"> * Reinhold Weicker (address see above) and</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment"> *</span></div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment"> * Rick Richardson</span></div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment"> * PC Research. Inc.</span></div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment"> * 94 Apple Orchard Drive</span></div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment"> * Tinton Falls, NJ 07724</span></div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment"> * Phone: (201) 389-8963 (9-17 EST)</span></div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment"> * Usenet: ...!uunet!pcrat!rick</span></div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="comment"> *</span></div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment"> * Please send results to Rick Richardson and/or Reinhold Weicker.</span></div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment"> * Complete information should be given on hardware and software used.</span></div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment"> * Hardware information includes: Machine type, CPU, type and size</span></div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment"> * of caches; for microprocessors: clock frequency, memory speed</span></div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment"> * (number of wait states).</span></div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment"> * Software information includes: Compiler (and runtime library)</span></div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment"> * manufacturer and version, compilation switches, OS version.</span></div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment"> * The Operating System version may give an indication about the</span></div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment"> * compiler; Dhrystone itself performs no OS calls in the measurement loop.</span></div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment"> *</span></div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment"> * The complete output generated by the program should be mailed</span></div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment"> * such that at least some checks for correctness can be made.</span></div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="comment"> *</span></div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment"> ***************************************************************************</span></div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment"> *</span></div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment"> * History: This version C/2.1 has been made for two reasons:</span></div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment"> *</span></div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment"> * 1) There is an obvious need for a common C version of</span></div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment"> * Dhrystone, since C is at present the most popular system</span></div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment"> * programming language for the class of processors</span></div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"> * (microcomputers, minicomputers) where Dhrystone is used most.</span></div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment"> * There should be, as far as possible, only one C version of</span></div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> * Dhrystone such that results can be compared without</span></div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> * restrictions. In the past, the C versions distributed</span></div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment"> * by Rick Richardson (Version 1.1) and by Reinhold Weicker</span></div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment"> * had small (though not significant) differences.</span></div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment"> *</span></div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="comment"> * 2) As far as it is possible without changes to the Dhrystone</span></div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="comment"> * statistics, optimizing compilers should be prevented from</span></div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="comment"> * removing significant statements.</span></div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="comment"> *</span></div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="comment"> * This C version has been developed in cooperation with</span></div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="comment"> * Rick Richardson (Tinton Falls, NJ), it incorporates many</span></div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment"> * ideas from the &quot;Version 1.1&quot; distributed previously by</span></div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment"> * him over the UNIX network Usenet.</span></div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="comment"> * I also thank Chaim Benedelac (National Semiconductor),</span></div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment"> * David Ditzel (SUN), Earl Killian and John Mashey (MIPS),</span></div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment"> * Alan Smith and Rafael Saavedra-Barrera (UC at Berkeley)</span></div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment"> * for their help with comments on earlier versions of the</span></div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment"> * benchmark.</span></div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="comment"> *</span></div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="comment"> * Changes: In the initialization part, this version follows mostly</span></div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="comment"> * Rick Richardson&#39;s version distributed via Usenet, not the</span></div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="comment"> * version distributed earlier via floppy disk by Reinhold Weicker.</span></div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="comment"> * As a concession to older compilers, names have been made</span></div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="comment"> * unique within the first 8 characters.</span></div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="comment"> * Inside the measurement loop, this version follows the</span></div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="comment"> * version previously distributed by Reinhold Weicker.</span></div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="comment"> *</span></div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="comment"> * At several places in the benchmark, code has been added,</span></div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="comment"> * but within the measurement loop only in branches that</span></div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment"> * are not executed. The intention is that optimizing compilers</span></div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment"> * should be prevented from moving code out of the measurement</span></div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="comment"> * loop, or from removing code altogether. Since the statements</span></div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="comment"> * that are executed within the measurement loop have NOT been</span></div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment"> * changed, the numbers defining the &quot;Dhrystone distribution&quot;</span></div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment"> * (distribution of statements, operand types and locality)</span></div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"> * still hold. Except for sophisticated optimizing compilers,</span></div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="comment"> * execution times for this version should be the same as</span></div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="comment"> * for previous versions.</span></div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment"> *</span></div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="comment"> * Since it has proven difficult to subtract the time for the</span></div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="comment"> * measurement loop overhead in a correct way, the loop check</span></div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="comment"> * has been made a part of the benchmark. This does have</span></div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="comment"> * an impact - though a very minor one - on the distribution</span></div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="comment"> * statistics which have been updated for this version.</span></div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="comment"> *</span></div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment"> * All changes within the measurement loop are described</span></div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="comment"> * and discussed in the companion paper &quot;Rationale for</span></div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment"> * Dhrystone version 2&quot;.</span></div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="comment"> *</span></div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="comment"> * Because of the self-imposed limitation that the order and</span></div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span><span class="comment"> * distribution of the executed statements should not be</span></div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="comment"> * changed, there are still cases where optimizing compilers</span></div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="comment"> * may not generate code for some statements. To a certain</span></div> +<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="comment"> * degree, this is unavoidable for small synthetic benchmarks.</span></div> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment"> * Users of the benchmark are advised to check code listings</span></div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment"> * whether code is generated for all statements of Dhrystone.</span></div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment"> *</span></div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment"> * Version 2.1 is identical to version 2.0 distributed via</span></div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="comment"> * the UNIX network Usenet in March 1988 except that it corrects</span></div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="comment"> * some minor deficiencies that were found by users of version 2.0.</span></div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="comment"> * The only change within the measurement loop is that a</span></div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="comment"> * non-executed &quot;else&quot; part was added to the &quot;if&quot; statement in</span></div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="comment"> * Func_3, and a non-executed &quot;else&quot; part removed from Proc_3.</span></div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span><span class="comment"> *</span></div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span><span class="comment"> ***************************************************************************</span></div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="comment"> *</span></div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="comment"> * Defines: The following &quot;Defines&quot; are possible:</span></div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="comment"> * -DREG=register (default: Not defined)</span></div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="comment"> * As an approximation to what an average C programmer</span></div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="comment"> * might do, the &quot;register&quot; storage class is applied</span></div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="comment"> * (if enabled by -DREG=register)</span></div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span><span class="comment"> * - for local variables, if they are used (dynamically)</span></div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="comment"> * five or more times</span></div> +<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span><span class="comment"> * - for parameters if they are used (dynamically)</span></div> +<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="comment"> * six or more times</span></div> +<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="comment"> * Note that an optimal &quot;register&quot; strategy is</span></div> +<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="comment"> * compiler-dependent, and that &quot;register&quot; declarations</span></div> +<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="comment"> * do not necessarily lead to faster execution.</span></div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="comment"> * -DNOSTRUCTASSIGN (default: Not defined)</span></div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="comment"> * Define if the C compiler does not support</span></div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="comment"> * assignment of structures.</span></div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="comment"> * -DNOENUMS (default: Not defined)</span></div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="comment"> * Define if the C compiler does not support</span></div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="comment"> * enumeration types.</span></div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="comment"> * -DTIMES (default)</span></div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="comment"> * -DTIME</span></div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="comment"> * The &quot;times&quot; function of UNIX (returning process times)</span></div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="comment"> * or the &quot;time&quot; function (returning wallclock time)</span></div> +<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="comment"> * is used for measurement.</span></div> +<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="comment"> * For single user machines, &quot;time ()&quot; is adequate. For</span></div> +<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="comment"> * multi-user machines where you cannot get single-user</span></div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="comment"> * access, use the &quot;times ()&quot; function. If you have</span></div> +<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="comment"> * neither, use a stopwatch in the dead of night.</span></div> +<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="comment"> * &quot;printf&quot;s are provided marking the points &quot;Start Timer&quot;</span></div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="comment"> * and &quot;Stop Timer&quot;. DO NOT use the UNIX &quot;time(1)&quot;</span></div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="comment"> * command, as this will measure the total time to</span></div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="comment"> * run this program, which will (erroneously) include</span></div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span><span class="comment"> * the time to allocate storage (malloc) and to perform</span></div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span><span class="comment"> * the initialization.</span></div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="comment"> * -DHZ=nnn</span></div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span><span class="comment"> * In Berkeley UNIX, the function &quot;times&quot; returns process</span></div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="comment"> * time in 1/HZ seconds, with HZ = 60 for most systems.</span></div> +<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="comment"> * CHECK YOUR SYSTEM DESCRIPTION BEFORE YOU JUST APPLY</span></div> +<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="comment"> * A VALUE.</span></div> +<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="comment"> *</span></div> +<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="comment"> ***************************************************************************</span></div> +<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="comment"> *</span></div> +<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span><span class="comment"> * Compilation model and measurement (IMPORTANT):</span></div> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="comment"> *</span></div> +<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="comment"> * This C version of Dhrystone consists of three files:</span></div> +<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span><span class="comment"> * - dhry.h (this file, containing global definitions and comments)</span></div> +<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="comment"> * - dhry_1.c (containing the code corresponding to Ada package Pack_1)</span></div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="comment"> * - dhry_2.c (containing the code corresponding to Ada package Pack_2)</span></div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="comment"> *</span></div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="comment"> * The following &quot;ground rules&quot; apply for measurements:</span></div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="comment"> * - Separate compilation</span></div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="comment"> * - No procedure merging</span></div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="comment"> * - Otherwise, compiler optimizations are allowed but should be indicated</span></div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="comment"> * - Default results are those without register declarations</span></div> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="comment"> * See the companion paper &quot;Rationale for Dhrystone Version 2&quot; for a more</span></div> +<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="comment"> * detailed discussion of these ground rules.</span></div> +<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="comment"> *</span></div> +<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="comment"> * For 16-Bit processors (e.g. 80186, 80286), times for all compilation</span></div> +<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="comment"> * models (&quot;small&quot;, &quot;medium&quot;, &quot;large&quot; etc.) should be given if possible,</span></div> +<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="comment"> * together with a definition of these models for the compiler system used.</span></div> +<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span><span class="comment"> *</span></div> +<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><span class="comment"> **************************************************************************</span></div> +<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span><span class="comment"> *</span></div> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="comment"> * Dhrystone (C version) statistics:</span></div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span><span class="comment"> *</span></div> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="comment"> * [Comment from the first distribution, updated for version 2.</span></div> +<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span><span class="comment"> * Note that because of language differences, the numbers are slightly</span></div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="comment"> * different from the Ada version.]</span></div> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span><span class="comment"> *</span></div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span><span class="comment"> * The following program contains statements of a high level programming</span></div> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span><span class="comment"> * language (here: C) in a distribution considered representative:</span></div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span><span class="comment"> *</span></div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span><span class="comment"> * assignments 52 (51.0 %)</span></div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="comment"> * control statements 33 (32.4 %)</span></div> +<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span><span class="comment"> * procedure, function calls 17 (16.7 %)</span></div> +<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span><span class="comment"> *</span></div> +<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span><span class="comment"> * 103 statements are dynamically executed. The program is balanced with</span></div> +<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span><span class="comment"> * respect to the three aspects:</span></div> +<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span><span class="comment"> *</span></div> +<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span><span class="comment"> * - statement type</span></div> +<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span><span class="comment"> * - operand type</span></div> +<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="comment"> * - operand locality</span></div> +<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span><span class="comment"> * operand global, local, parameter, or constant.</span></div> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span><span class="comment"> *</span></div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span><span class="comment"> * The combination of these three aspects is balanced only approximately.</span></div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span><span class="comment"> *</span></div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span><span class="comment"> * 1. Statement Type:</span></div> +<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="comment"> * ----------------- number</span></div> +<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span><span class="comment"> *</span></div> +<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span><span class="comment"> * V1 = V2 9</span></div> +<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span><span class="comment"> * (incl. V1 = F(..)</span></div> +<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span><span class="comment"> * V = Constant 12</span></div> +<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="comment"> * Assignment, 7</span></div> +<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span><span class="comment"> * with array element</span></div> +<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span><span class="comment"> * Assignment, 6</span></div> +<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span><span class="comment"> * with record component</span></div> +<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span><span class="comment"> * --</span></div> +<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span><span class="comment"> * 34 34</span></div> +<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span><span class="comment"> *</span></div> +<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="comment"> * X = Y +|-|&quot;&amp;&amp;&quot;|&quot;|&quot; Z 5</span></div> +<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span><span class="comment"> * X = Y +|-|&quot;==&quot; Constant 6</span></div> +<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span><span class="comment"> * X = X +|- 1 3</span></div> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span><span class="comment"> * X = Y *|/ Z 2</span></div> +<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span><span class="comment"> * X = Expression, 1</span></div> +<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span><span class="comment"> * two operators</span></div> +<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span><span class="comment"> * X = Expression, 1</span></div> +<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span><span class="comment"> * three operators</span></div> +<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span><span class="comment"> * --</span></div> +<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span><span class="comment"> * 18 18</span></div> +<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><span class="comment"> *</span></div> +<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span><span class="comment"> * if .... 14</span></div> +<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span><span class="comment"> * with &quot;else&quot; 7</span></div> +<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span><span class="comment"> * without &quot;else&quot; 7</span></div> +<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span><span class="comment"> * executed 3</span></div> +<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span><span class="comment"> * not executed 4</span></div> +<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span><span class="comment"> * for ... 7 | counted every time</span></div> +<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span><span class="comment"> * while ... 4 | the loop condition</span></div> +<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="comment"> * do ... while 1 | is evaluated</span></div> +<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span><span class="comment"> * switch ... 1</span></div> +<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span><span class="comment"> * break 1</span></div> +<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span><span class="comment"> * declaration with 1</span></div> +<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span><span class="comment"> * initialization</span></div> +<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span><span class="comment"> * --</span></div> +<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="comment"> * 34 34</span></div> +<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="comment"> *</span></div> +<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="comment"> * P (...) procedure call 11</span></div> +<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span><span class="comment"> * user procedure 10</span></div> +<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span><span class="comment"> * library procedure 1</span></div> +<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span><span class="comment"> * X = F (...)</span></div> +<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span><span class="comment"> * function call 6</span></div> +<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span><span class="comment"> * user function 5</span></div> +<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span><span class="comment"> * library function 1</span></div> +<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span><span class="comment"> * --</span></div> +<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span><span class="comment"> * 17 17</span></div> +<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span><span class="comment"> * ---</span></div> +<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span><span class="comment"> * 103</span></div> +<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span><span class="comment"> *</span></div> +<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span><span class="comment"> * The average number of parameters in procedure or function calls</span></div> +<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span><span class="comment"> * is 1.82 (not counting the function values aX *</span></div> +<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span><span class="comment"> *</span></div> +<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span><span class="comment"> * 2. Operators</span></div> +<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span><span class="comment"> * ------------</span></div> +<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span><span class="comment"> * number approximate</span></div> +<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span><span class="comment"> * percentage</span></div> +<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span><span class="comment"> *</span></div> +<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span><span class="comment"> * Arithmetic 32 50.8</span></div> +<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span><span class="comment"> *</span></div> +<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span><span class="comment"> * + 21 33.3</span></div> +<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span><span class="comment"> * - 7 11.1</span></div> +<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span><span class="comment"> * * 3 4.8</span></div> +<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span><span class="comment"> * / (int div) 1 1.6</span></div> +<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span><span class="comment"> *</span></div> +<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span><span class="comment"> * Comparison 27 42.8</span></div> +<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="comment"> *</span></div> +<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span><span class="comment"> * == 9 14.3</span></div> +<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span><span class="comment"> * /= 4 6.3</span></div> +<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span><span class="comment"> * &gt; 1 1.6</span></div> +<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span><span class="comment"> * &lt; 3 4.8</span></div> +<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span><span class="comment"> * &gt;= 1 1.6</span></div> +<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span><span class="comment"> * &lt;= 9 14.3</span></div> +<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span><span class="comment"> *</span></div> +<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span><span class="comment"> * Logic 4 6.3</span></div> +<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span><span class="comment"> *</span></div> +<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><span class="comment"> * &amp;&amp; (AND-THEN) 1 1.6</span></div> +<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span><span class="comment"> * | (OR) 1 1.6</span></div> +<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="comment"> * ! (NOT) 2 3.2</span></div> +<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span><span class="comment"> *</span></div> +<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span><span class="comment"> * -- -----</span></div> +<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span><span class="comment"> * 63 100.1</span></div> +<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span><span class="comment"> *</span></div> +<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span><span class="comment"> *</span></div> +<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span><span class="comment"> * 3. Operand Type (counted once per operand reference):</span></div> +<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span><span class="comment"> * ---------------</span></div> +<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span><span class="comment"> * number approximate</span></div> +<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span><span class="comment"> * percentage</span></div> +<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span><span class="comment"> *</span></div> +<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span><span class="comment"> * Integer 175 72.3 %</span></div> +<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span><span class="comment"> * Character 45 18.6 %</span></div> +<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span><span class="comment"> * Pointer 12 5.0 %</span></div> +<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span><span class="comment"> * String30 6 2.5 %</span></div> +<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span><span class="comment"> * Array 2 0.8 %</span></div> +<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span><span class="comment"> * Record 2 0.8 %</span></div> +<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span><span class="comment"> * --- -------</span></div> +<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span><span class="comment"> * 242 100.0 %</span></div> +<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span><span class="comment"> *</span></div> +<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span><span class="comment"> * When there is an access path leading to the final operand (e.g. a record</span></div> +<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span><span class="comment"> * component), only the final data type on the access path is counted.</span></div> +<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span><span class="comment"> *</span></div> +<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span><span class="comment"> *</span></div> +<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span><span class="comment"> * 4. Operand Locality:</span></div> +<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span><span class="comment"> * -------------------</span></div> +<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span><span class="comment"> * number approximate</span></div> +<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span><span class="comment"> * percentage</span></div> +<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span><span class="comment"> *</span></div> +<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span><span class="comment"> * local variable 114 47.1 %</span></div> +<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span><span class="comment"> * global variable 22 9.1 %</span></div> +<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span><span class="comment"> * parameter 45 18.6 %</span></div> +<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span><span class="comment"> * value 23 9.5 %</span></div> +<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span><span class="comment"> * reference 22 9.1 %</span></div> +<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span><span class="comment"> * function result 6 2.5 %</span></div> +<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span><span class="comment"> * constant 55 22.7 %</span></div> +<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span><span class="comment"> * --- -------</span></div> +<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span><span class="comment"> * 242 100.0 %</span></div> +<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span><span class="comment"> *</span></div> +<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span><span class="comment"> *</span></div> +<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span><span class="comment"> * The program does not compute anything meaningful, but it is syntactically</span></div> +<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span><span class="comment"> * and semantically correct. All variables have a value assigned to them</span></div> +<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span><span class="comment"> * before they are used as a source operand.</span></div> +<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span><span class="comment"> *</span></div> +<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span><span class="comment"> * There has been no explicit effort to account for the effects of a</span></div> +<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span><span class="comment"> * cache, or to balance the use of long or short displacements for code or</span></div> +<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span><span class="comment"> * data.</span></div> +<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span><span class="comment"> *</span></div> +<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span><span class="comment"> ***************************************************************************</span></div> +<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span><span class="comment"> */</span></div> +<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> </div> +<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span><span class="preprocessor">#ifndef dhrystone_h</span></div> +<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span><span class="preprocessor">#define dhrystone_h</span></div> +<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> </div> +<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span><span class="comment">/* Compiler and system dependent definitions: */</span></div> +<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> </div> +<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span><span class="preprocessor">#ifndef TIME</span></div> +<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span><span class="preprocessor">#undef TIMES</span></div> +<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span><span class="preprocessor">#define TIMES</span></div> +<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="comment">/* Use times(2) time function unless */</span></div> +<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="comment">/* explicitly defined otherwise */</span></div> +<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> </div> +<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span><span class="comment">//#ifdef MSC_CLOCK</span></div> +<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span><span class="comment">//#undef HZ</span></div> +<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span><span class="comment">//#undef TIMES</span></div> +<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span><span class="comment">//#include &lt;time.h&gt;</span></div> +<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span><span class="comment">//#define HZ CLK_TCK</span></div> +<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span><span class="comment">//#endif</span></div> +<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span><span class="comment">// /* Use Microsoft C hi-res clock */</span></div> +<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> </div> +<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span><span class="preprocessor">#define HZ SYSINFO_CLK</span></div> +<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> </div> +<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span><span class="preprocessor">#ifdef TIMES</span></div> +<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="preprocessor">#include &lt;sys/types.h&gt;</span></div> +<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span><span class="preprocessor">#include &lt;sys/times.h&gt;</span></div> +<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="comment">/* for &quot;times&quot; */</span></div> +<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> </div> +<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span><span class="preprocessor">#define Mic_secs_Per_Second 1000000</span></div> +<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <span class="comment">/* Berkeley UNIX C returns process times in seconds/HZ */</span></div> +<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> </div> +<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span><span class="preprocessor">#ifdef NOSTRUCTASSIGN</span></div> +<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span><span class="preprocessor">#define structassign(d, s) memcpy(&amp;(d), &amp;(s), sizeof(d))</span></div> +<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span><span class="preprocessor">#else</span></div> +<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span><span class="preprocessor">#define structassign(d, s) d = s</span></div> +<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> </div> +<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span><span class="preprocessor">#ifdef NOENUM</span></div> +<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span><span class="preprocessor">#define Ident_1 0</span></div> +<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span><span class="preprocessor">#define Ident_2 1</span></div> +<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span><span class="preprocessor">#define Ident_3 2</span></div> +<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span><span class="preprocessor">#define Ident_4 3</span></div> +<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span><span class="preprocessor">#define Ident_5 4</span></div> +<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> <span class="keyword">typedef</span> <span class="keywordtype">int</span> Enumeration;</div> +<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span><span class="preprocessor">#else</span></div> +<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5}</div> +<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> Enumeration;</div> +<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="comment">/* for boolean and enumeration types in Ada, Pascal */</span></div> +<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> </div> +<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span><span class="comment">/* General definitions: */</span></div> +<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> </div> +<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span><span class="preprocessor">#include &lt;stdio.h&gt;</span></div> +<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="comment">/* for strcpy, strcmp */</span></div> +<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> </div> +<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span><span class="preprocessor">#define Null 0</span></div> +<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="comment">/* Value of a Null pointer */</span></div> +<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span><span class="preprocessor">#define true 1</span></div> +<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span><span class="preprocessor">#define false 0</span></div> +<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> </div> +<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span><span class="keyword">typedef</span> <span class="keywordtype">int</span> One_Thirty;</div> +<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span><span class="keyword">typedef</span> <span class="keywordtype">int</span> One_Fifty;</div> +<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span><span class="keyword">typedef</span> <span class="keywordtype">char</span> Capital_Letter;</div> +<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span><span class="keyword">typedef</span> <span class="keywordtype">int</span> Boolean;</div> +<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span><span class="keyword">typedef</span> <span class="keywordtype">char</span> Str_30 [31];</div> +<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span><span class="keyword">typedef</span> <span class="keywordtype">int</span> Arr_1_Dim [50];</div> +<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span><span class="keyword">typedef</span> <span class="keywordtype">int</span> Arr_2_Dim [50] [50];</div> +<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> </div> +<div class="foldopen" id="foldopen00415" data-start="{" data-end="};"> +<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"><a class="line" href="structrecord.html"> 415</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code hl_struct" href="structrecord.html">record</a></div> +<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> {</div> +<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="keyword">struct </span><a class="code hl_struct" href="structrecord.html">record</a> *Ptr_Comp;</div> +<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> Enumeration Discr;</div> +<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="keyword">union </span>{</div> +<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> <span class="keyword">struct </span>{</div> +<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> Enumeration Enum_Comp;</div> +<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> <span class="keywordtype">int</span> Int_Comp;</div> +<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <span class="keywordtype">char</span> Str_Comp [31];</div> +<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> } var_1;</div> +<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> <span class="keyword">struct </span>{</div> +<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> Enumeration E_Comp_2;</div> +<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> <span class="keywordtype">char</span> Str_2_Comp [31];</div> +<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> } var_2;</div> +<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <span class="keyword">struct </span>{</div> +<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> <span class="keywordtype">char</span> Ch_1_Comp;</div> +<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> <span class="keywordtype">char</span> Ch_2_Comp;</div> +<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> } var_3;</div> +<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> } variant;</div> +<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> } <a class="code hl_struct" href="structrecord.html">Rec_Type</a>, *<a class="code hl_struct" href="structrecord.html">Rec_Pointer</a>;</div> +</div> +<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> </div> +<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> </div> +<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span><span class="comment">// function prototypes</span></div> +<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span>Enumeration Func_1 (Ch_1_Par_Val, Ch_2_Par_Val);</div> +<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span>Boolean Func_2 (Str_1_Par_Ref, Str_2_Par_Ref);</div> +<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span>Boolean Func_3 (Enum_Par_Val);</div> +<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span><span class="keywordtype">void</span> Proc_1 (Ptr_Val_Par);</div> +<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span><span class="keywordtype">void</span> Proc_2 (Int_Par_Ref);</div> +<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span><span class="keywordtype">void</span> Proc_3 (Ptr_Ref_Par);</div> +<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span><span class="keywordtype">void</span> Proc_4 (<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span><span class="keywordtype">void</span> Proc_5 (<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span><span class="keywordtype">void</span> Proc_6 (Enum_Val_Par, Enum_Ref_Par);</div> +<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span><span class="keywordtype">void</span> Proc_7 (Int_1_Par_Val, Int_2_Par_Val, Int_Par_Ref);</div> +<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span><span class="keywordtype">void</span> Proc_8 (Arr_1_Par_Ref, Arr_2_Par_Ref, Int_1_Par_Val, Int_2_Par_Val);</div> +<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span><span class="keywordtype">int</span> strcmp(<span class="keyword">const</span> <span class="keywordtype">char</span> *p1, <span class="keyword">const</span> <span class="keywordtype">char</span> *p2);</div> +<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> </div> +<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span><span class="preprocessor">#endif </span><span class="comment">// dhrystone_h</span></div> +<div class="ttc" id="astructrecord_html"><div class="ttname"><a href="structrecord.html">record</a></div><div class="ttdef"><b>Definition</b> dhry.h:416</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_01cde3d98944a579dc3b5e43a5311a79.html b/sw/dir_01cde3d98944a579dc3b5e43a5311a79.html new file mode 100644 index 0000000000..2ce498b8f6 --- /dev/null +++ b/sw/dir_01cde3d98944a579dc3b5e43a5311a79.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_cfs Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_01cde3d98944a579dc3b5e43a5311a79.html">demo_cfs</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_cfs Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__cfs_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__cfs_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Simple demo program for the <em>default</em> custom functions subsystem (CFS) module. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_01fcd3835fb4e7d9331b722d86291b65.html b/sw/dir_01fcd3835fb4e7d9331b722d86291b65.html new file mode 100644 index 0000000000..631f60ad18 --- /dev/null +++ b/sw/dir_01fcd3835fb4e7d9331b722d86291b65.html @@ -0,0 +1,109 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">sw Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a> +Directories</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_4316bb0e553b51b8b65560981547ce0f.html">bootloader</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_09a89dfa1596b6613cf2c29528a32844.html b/sw/dir_09a89dfa1596b6613cf2c29528a32844.html new file mode 100644 index 0000000000..2ae890ceaa --- /dev/null +++ b/sw/dir_09a89dfa1596b6613cf2c29528a32844.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_cfu Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_09a89dfa1596b6613cf2c29528a32844.html">demo_cfu</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_cfu Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__cfu_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__cfu_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Example program showing how to use the CFU's custom instructions (XTEA example). <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_0c6ac14e2254a316d41123f98feeb67b.html b/sw/dir_0c6ac14e2254a316d41123f98feeb67b.html new file mode 100644 index 0000000000..4529a9ace2 --- /dev/null +++ b/sw/dir_0c6ac14e2254a316d41123f98feeb67b.html @@ -0,0 +1,182 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">source Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__aux_8c.html">neorv32_aux.c</a></td></tr> +<tr class="memdesc:neorv32__aux_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">General auxiliary functions source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__cfs_8c.html">neorv32_cfs.c</a></td></tr> +<tr class="memdesc:neorv32__cfs_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Custom Functions Subsystem (CFS) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__clint_8c.html">neorv32_clint.c</a></td></tr> +<tr class="memdesc:neorv32__clint_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hardware Local Interruptor (CLINT) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__cpu_8c.html">neorv32_cpu.c</a></td></tr> +<tr class="memdesc:neorv32__cpu_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">CPU Core Functions HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__cpu__amo_8c.html">neorv32_cpu_amo.c</a></td></tr> +<tr class="memdesc:neorv32__cpu__amo_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__cpu__cfu_8c.html">neorv32_cpu_cfu.c</a></td></tr> +<tr class="memdesc:neorv32__cpu__cfu_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">CPU Core custom functions unit HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__crc_8c.html">neorv32_crc.c</a></td></tr> +<tr class="memdesc:neorv32__crc_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cyclic redundancy check unit (CRC) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__gpio_8c.html">neorv32_gpio.c</a></td></tr> +<tr class="memdesc:neorv32__gpio_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">General purpose input/output port unit (GPIO) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__gptmr_8c.html">neorv32_gptmr.c</a></td></tr> +<tr class="memdesc:neorv32__gptmr_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">General purpose timer (GPTMR) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__neoled_8c.html">neorv32_neoled.c</a></td></tr> +<tr class="memdesc:neorv32__neoled_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Smart LED Interface (NEOLED) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__newlib_8c.html">neorv32_newlib.c</a></td></tr> +<tr class="memdesc:neorv32__newlib_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">NEORV32-specific Newlib system calls. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__onewire_8c.html">neorv32_onewire.c</a></td></tr> +<tr class="memdesc:neorv32__onewire_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">1-Wire Interface Controller (ONEWIRE) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__pwm_8c.html">neorv32_pwm.c</a></td></tr> +<tr class="memdesc:neorv32__pwm_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pulse-Width Modulation Controller (PWM) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__rte_8c.html">neorv32_rte.c</a></td></tr> +<tr class="memdesc:neorv32__rte_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">NEORV32 Runtime Environment. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__sdi_8c.html">neorv32_sdi.c</a></td></tr> +<tr class="memdesc:neorv32__sdi_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serial data interface controller (SDI) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__slink_8c.html">neorv32_slink.c</a></td></tr> +<tr class="memdesc:neorv32__slink_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stream Link Interface HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__spi_8c.html">neorv32_spi.c</a></td></tr> +<tr class="memdesc:neorv32__spi_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serial peripheral interface controller (SPI) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__sysinfo_8c.html">neorv32_sysinfo.c</a></td></tr> +<tr class="memdesc:neorv32__sysinfo_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">System Information Memory (SYSINFO) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__trng_8c.html">neorv32_trng.c</a></td></tr> +<tr class="memdesc:neorv32__trng_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">True Random Number Generator (TRNG) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__twd_8c.html">neorv32_twd.c</a></td></tr> +<tr class="memdesc:neorv32__twd_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Two-Wire Device Controller (TWD) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__twi_8c.html">neorv32_twi.c</a></td></tr> +<tr class="memdesc:neorv32__twi_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Two-Wire Interface Controller (TWI) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__uart_8c.html">neorv32_uart.c</a></td></tr> +<tr class="memdesc:neorv32__uart_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Universal asynchronous receiver/transmitter (UART0/UART1) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__wdt_8c.html">neorv32_wdt.c</a></td></tr> +<tr class="memdesc:neorv32__wdt_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct Memory Access Controller (DMA) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__xip_8c.html">neorv32_xip.c</a></td></tr> +<tr class="memdesc:neorv32__xip_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Execute in place module (XIP) HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__xirq_8c.html">neorv32_xirq.c</a></td></tr> +<tr class="memdesc:neorv32__xirq_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">External Interrupt controller HW driver source file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_0d2921e55a1172a4726516961ee96ab5.html b/sw/dir_0d2921e55a1172a4726516961ee96ab5.html new file mode 100644 index 0000000000..fc7b4138ab --- /dev/null +++ b/sw/dir_0d2921e55a1172a4726516961ee96ab5.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/bus_explorer Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_0d2921e55a1172a4726516961ee96ab5.html">bus_explorer</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">bus_explorer Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bus__explorer_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:bus__explorer_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interactive memory inspector. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_0f35fd52d2216117815d19d974239550.html b/sw/dir_0f35fd52d2216117815d19d974239550.html new file mode 100644 index 0000000000..dfa5795133 --- /dev/null +++ b/sw/dir_0f35fd52d2216117815d19d974239550.html @@ -0,0 +1,113 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/performance_tests Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_0f35fd52d2216117815d19d974239550.html">performance_tests</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">performance_tests Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a> +Directories</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_f05036e2ccd24a7119a5bbccebab20b2.html">I</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_6a888d76b0f727dc821f77838927e542.html">M</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_4bd1267d34feeec0f679c16f884588e7.html">Zfinx</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_23212395b5ee0866d2fdd629e0ddeae8.html b/sw/dir_23212395b5ee0866d2fdd629e0ddeae8.html new file mode 100644 index 0000000000..bb874fa216 --- /dev/null +++ b/sw/dir_23212395b5ee0866d2fdd629e0ddeae8.html @@ -0,0 +1,112 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/float_corner_test Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_23212395b5ee0866d2fdd629e0ddeae8.html">float_corner_test</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">float_corner_test Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="float__corner__test_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:float__corner__test_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="float__corner__test_2neorv32__zfinx__extension__intrinsics_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>neorv32_zfinx_extension_intrinsics.h</b></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_23717ebbabf7a51c0558262947e0fe3b.html b/sw/dir_23717ebbabf7a51c0558262947e0fe3b.html new file mode 100644 index 0000000000..c543165474 --- /dev/null +++ b/sw/dir_23717ebbabf7a51c0558262947e0fe3b.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_newlib Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_23717ebbabf7a51c0558262947e0fe3b.html">demo_newlib</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_newlib Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__newlib_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__newlib_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Demo/test program for NEORV32's newlib C standard library support. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_237db5b95db643499d4c20f0bc5f6a7d.html b/sw/dir_237db5b95db643499d4c20f0bc5f6a7d.html new file mode 100644 index 0000000000..448014b50c --- /dev/null +++ b/sw/dir_237db5b95db643499d4c20f0bc5f6a7d.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_trng Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_237db5b95db643499d4c20f0bc5f6a7d.html">demo_trng</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_trng Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__trng_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__trng_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">True random number generator demo program. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_2ba96d3140b089dada6fb9f817b7975f.html b/sw/dir_2ba96d3140b089dada6fb9f817b7975f.html new file mode 100644 index 0000000000..6a58fbd6b8 --- /dev/null +++ b/sw/dir_2ba96d3140b089dada6fb9f817b7975f.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_emulate_unaligned Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_2ba96d3140b089dada6fb9f817b7975f.html">demo_emulate_unaligned</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_emulate_unaligned Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__emulate__unaligned_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__emulate__unaligned_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Demo program for emulating unaligned memory accesses using the NEORV32 run-time environment (RTE). <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_3b3bafc48b460f797485cc75b94aa81c.html b/sw/dir_3b3bafc48b460f797485cc75b94aa81c.html new file mode 100644 index 0000000000..f2fcbf45c6 --- /dev/null +++ b/sw/dir_3b3bafc48b460f797485cc75b94aa81c.html @@ -0,0 +1,112 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_onewire Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_3b3bafc48b460f797485cc75b94aa81c.html">demo_onewire</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_onewire Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__onewire_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__onewire_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Demo program for the NEORV32 1-Wire interface controller (ONEWIRE). <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="onewire__aux_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>onewire_aux.h</b></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_4316bb0e553b51b8b65560981547ce0f.html b/sw/dir_4316bb0e553b51b8b65560981547ce0f.html new file mode 100644 index 0000000000..e644a04563 --- /dev/null +++ b/sw/dir_4316bb0e553b51b8b65560981547ce0f.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/bootloader Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_4316bb0e553b51b8b65560981547ce0f.html">bootloader</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">bootloader Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bootloader_8c.html">bootloader.c</a></td></tr> +<tr class="memdesc:bootloader_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default NEORV32 bootloader. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_449d8ba5f8b78dc90092f20d15a2386a.html b/sw/dir_449d8ba5f8b78dc90092f20d15a2386a.html new file mode 100644 index 0000000000..3c1059f7ec --- /dev/null +++ b/sw/dir_449d8ba5f8b78dc90092f20d15a2386a.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/atomic_test Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_449d8ba5f8b78dc90092f20d15a2386a.html">atomic_test</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">atomic_test Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="atomic__test_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:atomic__test_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Test program for the NEORV32 'A' ISA extension - check the emulation of the AMO (read-modify-write) operations. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_46981071cfd8ec44311b09fdcf6c06a8.html b/sw/dir_46981071cfd8ec44311b09fdcf6c06a8.html new file mode 100644 index 0000000000..8d3f8d0909 --- /dev/null +++ b/sw/dir_46981071cfd8ec44311b09fdcf6c06a8.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/game_of_life Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_46981071cfd8ec44311b09fdcf6c06a8.html">game_of_life</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">game_of_life Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="game__of__life_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:game__of__life_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Conway's game of life in a UART terminal. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_4bd1267d34feeec0f679c16f884588e7.html b/sw/dir_4bd1267d34feeec0f679c16f884588e7.html new file mode 100644 index 0000000000..37e89c894e --- /dev/null +++ b/sw/dir_4bd1267d34feeec0f679c16f884588e7.html @@ -0,0 +1,103 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/performance_tests/Zfinx Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_0f35fd52d2216117815d19d974239550.html">performance_tests</a></li><li class="navelem"><a class="el" href="dir_4bd1267d34feeec0f679c16f884588e7.html">Zfinx</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">Zfinx Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_4c113257314015688a865e1bb8429184.html b/sw/dir_4c113257314015688a865e1bb8429184.html new file mode 100644 index 0000000000..ef519fba70 --- /dev/null +++ b/sw/dir_4c113257314015688a865e1bb8429184.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_spi Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_4c113257314015688a865e1bb8429184.html">demo_spi</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_spi Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__spi_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__spi_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">SPI bus explorer (execute SPI transactions by hand). <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_5534fa9035f54ab438a41c43d6f7fc7a.html b/sw/dir_5534fa9035f54ab438a41c43d6f7fc7a.html new file mode 100644 index 0000000000..3f6b72ae27 --- /dev/null +++ b/sw/dir_5534fa9035f54ab438a41c43d6f7fc7a.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_xirq Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_5534fa9035f54ab438a41c43d6f7fc7a.html">demo_xirq</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_xirq Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__xirq_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__xirq_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">External interrupt controller (XIRQ) demo program (using hardware-assisted prioritization). <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_6a888d76b0f727dc821f77838927e542.html b/sw/dir_6a888d76b0f727dc821f77838927e542.html new file mode 100644 index 0000000000..f93a6eeae2 --- /dev/null +++ b/sw/dir_6a888d76b0f727dc821f77838927e542.html @@ -0,0 +1,103 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/performance_tests/M Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_0f35fd52d2216117815d19d974239550.html">performance_tests</a></li><li class="navelem"><a class="el" href="dir_6a888d76b0f727dc821f77838927e542.html">M</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">M Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_752b1e5d3973bf735fa78bf6b4727df9.html b/sw/dir_752b1e5d3973bf735fa78bf6b4727df9.html new file mode 100644 index 0000000000..51ae22b646 --- /dev/null +++ b/sw/dir_752b1e5d3973bf735fa78bf6b4727df9.html @@ -0,0 +1,194 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">include Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32_8h.html">neorv32.h</a></td></tr> +<tr class="memdesc:neorv32_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Main NEORV32 core library / driver / HAL include file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__aux_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__aux_8h.html">neorv32_aux.h</a></td></tr> +<tr class="memdesc:neorv32__aux_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">General auxiliary functions header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__cfs_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__cfs_8h.html">neorv32_cfs.h</a></td></tr> +<tr class="memdesc:neorv32__cfs_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Custom Functions Subsystem (CFS) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__clint_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__clint_8h.html">neorv32_clint.h</a></td></tr> +<tr class="memdesc:neorv32__clint_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hardware Local Interruptor (CLINT) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__cpu_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__cpu_8h.html">neorv32_cpu.h</a></td></tr> +<tr class="memdesc:neorv32__cpu_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">CPU Core Functions HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__cpu__amo_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__cpu__amo_8h.html">neorv32_cpu_amo.h</a></td></tr> +<tr class="memdesc:neorv32__cpu__amo_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__cpu__cfu_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__cpu__cfu_8h.html">neorv32_cpu_cfu.h</a></td></tr> +<tr class="memdesc:neorv32__cpu__cfu_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">CPU Core custom functions unit HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__cpu__csr_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__cpu__csr_8h.html">neorv32_cpu_csr.h</a></td></tr> +<tr class="memdesc:neorv32__cpu__csr_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Control and Status Registers (CSR) definitions. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__crc_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__crc_8h.html">neorv32_crc.h</a></td></tr> +<tr class="memdesc:neorv32__crc_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cyclic redundancy check unit (CRC) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__dma_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__dma_8h.html">neorv32_dma.h</a></td></tr> +<tr class="memdesc:neorv32__dma_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct Memory Access Controller (DMA) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__gpio_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__gpio_8h.html">neorv32_gpio.h</a></td></tr> +<tr class="memdesc:neorv32__gpio_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">General purpose input/output port unit (GPIO) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__gptmr_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__gptmr_8h.html">neorv32_gptmr.h</a></td></tr> +<tr class="memdesc:neorv32__gptmr_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">General purpose timer (GPTMR) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__intrinsics_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__intrinsics_8h.html">neorv32_intrinsics.h</a></td></tr> +<tr class="memdesc:neorv32__intrinsics_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper macros for custom "intrinsics" / instructions. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__legacy_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__legacy_8h.html">neorv32_legacy.h</a></td></tr> +<tr class="memdesc:neorv32__legacy_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Legacy compatibility layer. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__neoled_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__neoled_8h.html">neorv32_neoled.h</a></td></tr> +<tr class="memdesc:neorv32__neoled_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Smart LED Interface (NEOLED) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__onewire_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__onewire_8h.html">neorv32_onewire.h</a></td></tr> +<tr class="memdesc:neorv32__onewire_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">1-Wire Interface Controller (ONEWIRE) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__pwm_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__pwm_8h.html">neorv32_pwm.h</a></td></tr> +<tr class="memdesc:neorv32__pwm_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pulse-Width Modulation Controller (PWM) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__rte_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__rte_8h.html">neorv32_rte.h</a></td></tr> +<tr class="memdesc:neorv32__rte_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">NEORV32 Runtime Environment. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__sdi_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__sdi_8h.html">neorv32_sdi.h</a></td></tr> +<tr class="memdesc:neorv32__sdi_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serial data interface controller (SPPI) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__slink_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__slink_8h.html">neorv32_slink.h</a></td></tr> +<tr class="memdesc:neorv32__slink_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stream Link Interface HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__spi_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__spi_8h.html">neorv32_spi.h</a></td></tr> +<tr class="memdesc:neorv32__spi_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serial peripheral interface controller (SPI) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__sysinfo_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__sysinfo_8h.html">neorv32_sysinfo.h</a></td></tr> +<tr class="memdesc:neorv32__sysinfo_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">System Information Memory (SYSINFO) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__trng_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__trng_8h.html">neorv32_trng.h</a></td></tr> +<tr class="memdesc:neorv32__trng_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">True Random Number Generator (TRNG) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__twd_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__twd_8h.html">neorv32_twd.h</a></td></tr> +<tr class="memdesc:neorv32__twd_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Two-Wire Device Controller (TWD) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__twi_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__twi_8h.html">neorv32_twi.h</a></td></tr> +<tr class="memdesc:neorv32__twi_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Two-Wire Interface Controller (TWI) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__uart_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__uart_8h.html">neorv32_uart.h</a></td></tr> +<tr class="memdesc:neorv32__uart_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Universal asynchronous receiver/transmitter (UART0/UART1) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__wdt_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__wdt_8h.html">neorv32_wdt.h</a></td></tr> +<tr class="memdesc:neorv32__wdt_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Watchdog Timer (WDT) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__xip_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__xip_8h.html">neorv32_xip.h</a></td></tr> +<tr class="memdesc:neorv32__xip_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Execute in place module (XIP) HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__xirq_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__xirq_8h.html">neorv32_xirq.h</a></td></tr> +<tr class="memdesc:neorv32__xirq_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">External Interrupt controller HW driver header file. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_78d7bfa405ff3a31fa7539cfd8bc8262.html b/sw/dir_78d7bfa405ff3a31fa7539cfd8bc8262.html new file mode 100644 index 0000000000..33bc9abd4e --- /dev/null +++ b/sw/dir_78d7bfa405ff3a31fa7539cfd8bc8262.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_wdt Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_78d7bfa405ff3a31fa7539cfd8bc8262.html">demo_wdt</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_wdt Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__wdt_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__wdt_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Watchdog demo program. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_7a2c74f70a4cdf2e836a07048e2f71dd.html b/sw/dir_7a2c74f70a4cdf2e836a07048e2f71dd.html new file mode 100644 index 0000000000..0ac71cff6f --- /dev/null +++ b/sw/dir_7a2c74f70a4cdf2e836a07048e2f71dd.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/processor_check Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_7a2c74f70a4cdf2e836a07048e2f71dd.html">processor_check</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">processor_check Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="processor__check_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:processor__check_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">CPU/Processor test/verification program. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_7d04193005ada6f9450f847f4adb6b5b.html b/sw/dir_7d04193005ada6f9450f847f4adb6b5b.html new file mode 100644 index 0000000000..6a2d148a22 --- /dev/null +++ b/sw/dir_7d04193005ada6f9450f847f4adb6b5b.html @@ -0,0 +1,111 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">lib Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a> +Directories</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_8c514361e1f16692c783b23503f30f16.html b/sw/dir_8c514361e1f16692c783b23503f30f16.html new file mode 100644 index 0000000000..d9317691d9 --- /dev/null +++ b/sw/dir_8c514361e1f16692c783b23503f30f16.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_dma Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_8c514361e1f16692c783b23503f30f16.html">demo_dma</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_dma Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__dma_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__dma_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">DMA demo program. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_8f848e36ac87ced1c361afcc0549ca32.html b/sw/dir_8f848e36ac87ced1c361afcc0549ca32.html new file mode 100644 index 0000000000..1c867e3f59 --- /dev/null +++ b/sw/dir_8f848e36ac87ced1c361afcc0549ca32.html @@ -0,0 +1,115 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_spi_irq Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_8f848e36ac87ced1c361afcc0549ca32.html">demo_spi_irq</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_spi_irq Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a> +Directories</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_9d04cdc586d6978be343bda7adcdc371.html">drv</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__spi__irq_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__spi__irq_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Example of an ISR driven SPI transfer. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_93967190e0d2e549ceca77007097849b.html b/sw/dir_93967190e0d2e549ceca77007097849b.html new file mode 100644 index 0000000000..ea0f6bc44a --- /dev/null +++ b/sw/dir_93967190e0d2e549ceca77007097849b.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_hpm Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_93967190e0d2e549ceca77007097849b.html">demo_hpm</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_hpm Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__hpm_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__hpm_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hardware performance monitor (HPM) example program. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_9a1c128d67c35790e92af404beb936aa.html b/sw/dir_9a1c128d67c35790e92af404beb936aa.html new file mode 100644 index 0000000000..e0325da6b2 --- /dev/null +++ b/sw/dir_9a1c128d67c35790e92af404beb936aa.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_blink_led Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_9a1c128d67c35790e92af404beb936aa.html">demo_blink_led</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_blink_led Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__blink__led_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__blink__led_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimal blinking LED demo program using the lowest 8 bits of the GPIO.output port. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_9d04cdc586d6978be343bda7adcdc371.html b/sw/dir_9d04cdc586d6978be343bda7adcdc371.html new file mode 100644 index 0000000000..31742b6cc7 --- /dev/null +++ b/sw/dir_9d04cdc586d6978be343bda7adcdc371.html @@ -0,0 +1,113 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_spi_irq/drv Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_8f848e36ac87ced1c361afcc0549ca32.html">demo_spi_irq</a></li><li class="navelem"><a class="el" href="dir_9d04cdc586d6978be343bda7adcdc371.html">drv</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">drv Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__spi__irq_8c.html">neorv32_spi_irq.c</a></td></tr> +<tr class="memdesc:neorv32__spi__irq_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Addition to <a class="el" href="neorv32__spi_8c.html" title="Serial peripheral interface controller (SPI) HW driver source file.">neorv32_spi.c</a>, which provides an IRQ driven data flow. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="neorv32__spi__irq_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="neorv32__spi__irq_8h.html">neorv32_spi_irq.h</a></td></tr> +<tr class="memdesc:neorv32__spi__irq_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Addition to <a class="el" href="neorv32__spi_8h.html" title="Serial peripheral interface controller (SPI) HW driver header file.">neorv32_spi.h</a>, which provides an IRQ driven data flow. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_b5eb9f7d151d147efb5dbda58439e4e7.html b/sw/dir_b5eb9f7d151d147efb5dbda58439e4e7.html new file mode 100644 index 0000000000..4b1d013370 --- /dev/null +++ b/sw/dir_b5eb9f7d151d147efb5dbda58439e4e7.html @@ -0,0 +1,109 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/dhrystone Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_b5eb9f7d151d147efb5dbda58439e4e7.html">dhrystone</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">dhrystone Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dhry_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>dhry.h</b></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_b683da3a5fc966bff32ebf7cda721811.html b/sw/dir_b683da3a5fc966bff32ebf7cda721811.html new file mode 100644 index 0000000000..761653d2ce --- /dev/null +++ b/sw/dir_b683da3a5fc966bff32ebf7cda721811.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_pwm Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_b683da3a5fc966bff32ebf7cda721811.html">demo_pwm</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_pwm Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__pwm_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__pwm_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Simple PWM demo program. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_b68ac2efc0c6ed3018151f7bb6c45670.html b/sw/dir_b68ac2efc0c6ed3018151f7bb6c45670.html new file mode 100644 index 0000000000..31ec763eef --- /dev/null +++ b/sw/dir_b68ac2efc0c6ed3018151f7bb6c45670.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_gptmr Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_b68ac2efc0c6ed3018151f7bb6c45670.html">demo_gptmr</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_gptmr Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__gptmr_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__gptmr_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Simple GPTMR timer-match interrupt example. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html b/sw/dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html new file mode 100644 index 0000000000..bf6c0e5cd6 --- /dev/null +++ b/sw/dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_xip Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html">demo_xip</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_xip Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__xip_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__xip_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interactive console program to upload and execute a XIP program. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_bf935196a1ea0ca9cb42aae56d70946a.html b/sw/dir_bf935196a1ea0ca9cb42aae56d70946a.html new file mode 100644 index 0000000000..3d76cacef0 --- /dev/null +++ b/sw/dir_bf935196a1ea0ca9cb42aae56d70946a.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_crc Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_bf935196a1ea0ca9cb42aae56d70946a.html">demo_crc</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_crc Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__crc_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__crc_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">CRC demo program. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_c2d46947bdd73c33f53326fc5ee3a272.html b/sw/dir_c2d46947bdd73c33f53326fc5ee3a272.html new file mode 100644 index 0000000000..64493ae630 --- /dev/null +++ b/sw/dir_c2d46947bdd73c33f53326fc5ee3a272.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_slink Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_c2d46947bdd73c33f53326fc5ee3a272.html">demo_slink</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_slink Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__slink_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__slink_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">SLINK demo program. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_c413aba6cb5da07a571465ba333950af.html b/sw/dir_c413aba6cb5da07a571465ba333950af.html new file mode 100644 index 0000000000..3c9fb88c75 --- /dev/null +++ b/sw/dir_c413aba6cb5da07a571465ba333950af.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_sdi Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_c413aba6cb5da07a571465ba333950af.html">demo_sdi</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_sdi Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__sdi_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__sdi_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">SDI test program (direct access to the SDI module). <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_d4640980cbf1943e4a4aee6e8b810c7a.html b/sw/dir_d4640980cbf1943e4a4aee6e8b810c7a.html new file mode 100644 index 0000000000..e3b340f2ca --- /dev/null +++ b/sw/dir_d4640980cbf1943e4a4aee6e8b810c7a.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/hello_world Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_d4640980cbf1943e4a4aee6e8b810c7a.html">hello_world</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">hello_world Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hello__world_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:hello__world_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Classic 'hello world' demo program. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_d68bb921df3f2482fe9ace49b286ab86.html b/sw/dir_d68bb921df3f2482fe9ace49b286ab86.html new file mode 100644 index 0000000000..1167bdb577 --- /dev/null +++ b/sw/dir_d68bb921df3f2482fe9ace49b286ab86.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_neopixel Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_d68bb921df3f2482fe9ace49b286ab86.html">demo_neopixel</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_neopixel Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__neopixel_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__neopixel_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">NeoPixel (WS2812) interface demo using the processor's smart LED interface (NEOLED). <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_e9ffd83269fb7f0c372f5ffbe8545008.html b/sw/dir_e9ffd83269fb7f0c372f5ffbe8545008.html new file mode 100644 index 0000000000..4996babe22 --- /dev/null +++ b/sw/dir_e9ffd83269fb7f0c372f5ffbe8545008.html @@ -0,0 +1,113 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/floating_point_test Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_e9ffd83269fb7f0c372f5ffbe8545008.html">floating_point_test</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">floating_point_test Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="floating__point__test_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:floating__point__test_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html">neorv32_zfinx_extension_intrinsics.h</a></td></tr> +<tr class="memdesc:floating__point__test_2neorv32__zfinx__extension__intrinsics_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">"Intrinsic" library for the NEORV32 single-precision floating-point in x registers (Zfinx) extension <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_ebeff77b922fbb914a1494857a82a38e.html b/sw/dir_ebeff77b922fbb914a1494857a82a38e.html new file mode 100644 index 0000000000..e0473e7454 --- /dev/null +++ b/sw/dir_ebeff77b922fbb914a1494857a82a38e.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_twi Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_ebeff77b922fbb914a1494857a82a38e.html">demo_twi</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_twi Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__twi_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__twi_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">TWI bus explorer. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_eea6eb9fd693422884580f70321908d2.html b/sw/dir_eea6eb9fd693422884580f70321908d2.html new file mode 100644 index 0000000000..fe25427154 --- /dev/null +++ b/sw/dir_eea6eb9fd693422884580f70321908d2.html @@ -0,0 +1,103 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/eclipse Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_eea6eb9fd693422884580f70321908d2.html">eclipse</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">eclipse Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_f05036e2ccd24a7119a5bbccebab20b2.html b/sw/dir_f05036e2ccd24a7119a5bbccebab20b2.html new file mode 100644 index 0000000000..bb88e418b9 --- /dev/null +++ b/sw/dir_f05036e2ccd24a7119a5bbccebab20b2.html @@ -0,0 +1,103 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/performance_tests/I Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_0f35fd52d2216117815d19d974239550.html">performance_tests</a></li><li class="navelem"><a class="el" href="dir_f05036e2ccd24a7119a5bbccebab20b2.html">I</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">I Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html b/sw/dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html new file mode 100644 index 0000000000..a4775cb5f3 --- /dev/null +++ b/sw/dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html @@ -0,0 +1,169 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">example Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a> +Directories</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_449d8ba5f8b78dc90092f20d15a2386a.html">atomic_test</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_0d2921e55a1172a4726516961ee96ab5.html">bus_explorer</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_9a1c128d67c35790e92af404beb936aa.html">demo_blink_led</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_01cde3d98944a579dc3b5e43a5311a79.html">demo_cfs</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_09a89dfa1596b6613cf2c29528a32844.html">demo_cfu</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_f28130cc1bab3a9396f0ef9d1631e47b.html">demo_clint</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_bf935196a1ea0ca9cb42aae56d70946a.html">demo_crc</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8c514361e1f16692c783b23503f30f16.html">demo_dma</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_2ba96d3140b089dada6fb9f817b7975f.html">demo_emulate_unaligned</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b68ac2efc0c6ed3018151f7bb6c45670.html">demo_gptmr</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_93967190e0d2e549ceca77007097849b.html">demo_hpm</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_d68bb921df3f2482fe9ace49b286ab86.html">demo_neopixel</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_23717ebbabf7a51c0558262947e0fe3b.html">demo_newlib</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_3b3bafc48b460f797485cc75b94aa81c.html">demo_onewire</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b683da3a5fc966bff32ebf7cda721811.html">demo_pwm</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_c413aba6cb5da07a571465ba333950af.html">demo_sdi</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_c2d46947bdd73c33f53326fc5ee3a272.html">demo_slink</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_4c113257314015688a865e1bb8429184.html">demo_spi</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8f848e36ac87ced1c361afcc0549ca32.html">demo_spi_irq</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_237db5b95db643499d4c20f0bc5f6a7d.html">demo_trng</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_ebeff77b922fbb914a1494857a82a38e.html">demo_twi</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_78d7bfa405ff3a31fa7539cfd8bc8262.html">demo_wdt</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html">demo_xip</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_5534fa9035f54ab438a41c43d6f7fc7a.html">demo_xirq</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b5eb9f7d151d147efb5dbda58439e4e7.html">dhrystone</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_eea6eb9fd693422884580f70321908d2.html">eclipse</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_23212395b5ee0866d2fdd629e0ddeae8.html">float_corner_test</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e9ffd83269fb7f0c372f5ffbe8545008.html">floating_point_test</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_46981071cfd8ec44311b09fdcf6c06a8.html">game_of_life</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_d4640980cbf1943e4a4aee6e8b810c7a.html">hello_world</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7a2c74f70a4cdf2e836a07048e2f71dd.html">processor_check</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/dir_f28130cc1bab3a9396f0ef9d1631e47b.html b/sw/dir_f28130cc1bab3a9396f0ef9d1631e47b.html new file mode 100644 index 0000000000..aa906eac4a --- /dev/null +++ b/sw/dir_f28130cc1bab3a9396f0ef9d1631e47b.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_clint Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_f28130cc1bab3a9396f0ef9d1631e47b.html">demo_clint</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">demo_clint Directory Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a> +Files</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="icondoc"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="demo__clint_2main_8c.html">main.c</a></td></tr> +<tr class="memdesc:demo__clint_2main_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Simple core local interruptor (CLINT) usage example. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/doc.svg b/sw/doc.svg new file mode 100644 index 0000000000..0b928a5317 --- /dev/null +++ b/sw/doc.svg @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"> +<g style="fill:#4665A2"> +<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/> +</g> +<g style="fill:#D8DFEE;stroke-width:0"> +<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" /> +<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" /> +</g> +</svg> diff --git a/sw/docd.svg b/sw/docd.svg new file mode 100644 index 0000000000..ac18b27552 --- /dev/null +++ b/sw/docd.svg @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"> +<g style="fill:#C4CFE5"> +<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/> +</g> +<g style="fill:#4665A2;stroke-width:0"> +<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" /> +<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" /> +</g> +</svg> diff --git a/sw/doxygen.css b/sw/doxygen.css new file mode 100644 index 0000000000..574b333572 --- /dev/null +++ b/sw/doxygen.css @@ -0,0 +1,2247 @@ +/* The standard CSS for doxygen 1.12.0*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='10px' width='5px' fill='grey'><text x='0' y='5' font-size='10'>&%238595;</text></svg>"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--fragment-copy-ok-color: #2EC82E; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #f8d1cc; +--warning-color-hl: #b61825; +--warning-color-text: #75070f; +--note-color-bg: #faf3d8; +--note-color-hl: #f3a600; +--note-color-text: #5f4204; +--todo-color-bg: #e4f3ff; +--todo-color-hl: #1879C4; +--todo-color-text: #274a5c; +--test-color-bg: #e8e8ff; +--test-color-hl: #3939C4; +--test-color-text: #1a1a5c; +--deprecated-color-bg: #ecf0f3; +--deprecated-color-hl: #5b6269; +--deprecated-color-text: #43454a; +--bug-color-bg: #e4dafd; +--bug-color-hl: #5b2bdd; +--bug-color-text: #2a0d72; +--invariant-color-bg: #d8f1e3; +--invariant-color-hl: #44b86f; +--invariant-color-text: #265532; +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='10px' width='5px'><text x='0' y='5' font-size='10' fill='grey'>&%238595;</text></svg>"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: #090D16; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--fragment-copy-ok-color: #0EA80E; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #2e1917; +--warning-color-hl: #ad2617; +--warning-color-text: #f5b1aa; +--note-color-bg: #3b2e04; +--note-color-hl: #f1b602; +--note-color-text: #ceb670; +--todo-color-bg: #163750; +--todo-color-hl: #1982D2; +--todo-color-text: #dcf0fa; +--test-color-bg: #121258; +--test-color-hl: #4242cf; +--test-color-text: #c0c0da; +--deprecated-color-bg: #2e323b; +--deprecated-color-hl: #738396; +--deprecated-color-text: #abb0bd; +--bug-color-bg: #2a2536; +--bug-color-hl: #7661b3; +--bug-color-text: #ae9ed6; +--invariant-color-bg: #303a35; +--invariant-color-hl: #76ce96; +--invariant-color-text: #cceed5; +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : var(--nav-background-color); +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid var(--fragment-border-color); + border-radius: 4px; + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: var(--font-family-monospace); +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: auto; + fill: var(--fragment-foreground-color); + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid var(--fragment-foreground-color); + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: var(--fragment-copy-ok-color); +} + +.clipboard.success { + border-color: var(--fragment-copy-ok-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: var(--memdef-param-name-color); + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: var(--font-family-monospace); +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: var(--warning-color-bg); + border-left: 8px solid var(--warning-color-hl); + color: var(--warning-color-text); +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: var(--warning-color-hl); +} + +dl.note, dl.remark { + background: var(--note-color-bg); + border-left: 8px solid var(--note-color-hl); + color: var(--note-color-text); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-hl); +} + +dl.todo { + background: var(--todo-color-bg); + border-left: 8px solid var(--todo-color-hl); + color: var(--todo-color-text); +} + +dl.todo dt { + color: var(--todo-color-hl); +} + +dl.test { + background: var(--test-color-bg); + border-left: 8px solid var(--test-color-hl); + color: var(--test-color-text); +} + +dl.test dt { + color: var(--test-color-hl); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.bug { + background: var(--bug-color-bg); + border-left: 8px solid var(--bug-color-hl); + color: var(--bug-color-text); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.deprecated { + background: var(--deprecated-color-bg); + border-left: 8px solid var(--deprecated-color-hl); + color: var(--deprecated-color-text); +} + +dl.deprecated dt a { + color: var(--deprecated-color-hl) !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color-bg); + border-left: 8px solid var(--invariant-color-hl); + color: var(--invariant-color-text); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-hl); +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/sw/doxygen.svg b/sw/doxygen.svg new file mode 100644 index 0000000000..79a7635407 --- /dev/null +++ b/sw/doxygen.svg @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" viewBox="0 0 104 31" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <linearGradient id="a"> + <stop stop-color="#5373B4" offset="0"/> + <stop stop-color="#7C95C6" offset="1"/> + </linearGradient> + <linearGradient id="d" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientUnits="userSpaceOnUse" xlink:href="#a"/> + <linearGradient id="c" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientTransform="matrix(.6816 0 0 1.0248 72.391 -.91809)" gradientUnits="userSpaceOnUse" xlink:href="#a"/> + <linearGradient id="b" x1="56.295" x2="56.295" y1="24.622" y2="26.574" gradientUnits="userSpaceOnUse" xlink:href="#a"/> + <linearGradient id="e" x1="49.067" x2="48.956" y1="19.719" y2="9.5227" gradientTransform="matrix(.97968 0 0 1.0207 -.25579 -.25579)" gradientUnits="userSpaceOnUse"> + <stop stop-color="#C0CCE3" offset="0"/> + <stop stop-color="#EEF1F7" offset="1"/> + </linearGradient> + <filter id="f" x="-.010676" y="-.045304" width="1.0214" height="1.0906" color-interpolation-filters="sRGB"> + <feGaussianBlur stdDeviation="0.45293203"/> + </filter> + </defs> + <g> + <path transform="translate(-2.5759 -27.848)" d="m13.609 32.203v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23645 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88018-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35277 3.7988-1.0566 1.0471-0.70387 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.92299-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.4611 0.28066 1.7988 0.84375 0.33777 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5976v-8.3926c0-0.84464-0.0765-1.6106-0.22851-2.2969-0.13511-0.70387-0.37971-1.2925-0.73438-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.063 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07028-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06051 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3438h-0.05078l-2.9648-9.3438zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914 0.38844 0.24635 0.6991 0.57184 0.93555 0.97656 0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13253 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10134 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88814-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70105 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.4927-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89025 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74023 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" filter="url(#f)" opacity=".3" stroke="#969696"/> + <path d="m0.97202 24.161 43.605-0.0019 0.0508 3.3061-43.6 0.04174z" fill="url(#d)" stroke="#000" stroke-width=".5"/> + <path d="m10.283 3.5547v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23644 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88017-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35278 3.7988-1.0566 1.0471-0.70386 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.923-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.461 0.28066 1.7988 0.84375 0.33778 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5977v-8.3926c0-0.84464-0.0765-1.6106-0.22852-2.2969-0.13511-0.70387-0.3797-1.2925-0.73437-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.062 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07027-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06052 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3437h-0.05078l-2.9648-9.3437zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914s0.6991 0.57184 0.93555 0.97656c0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13254 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10133 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88813-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70106 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.49271-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89026 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74024 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" fill="url(#e)" stroke="#4665A2" stroke-width=".7"/> + <path d="m52.988 27.291c0.99602-1.0359 1.3944-1.8725 1.7928-3.1076l3.8247-0.03984c0.3113 1.6096 0.82413 2.5137 1.6335 3.1474z" fill="url(#b)" stroke="#000" stroke-width=".5"/> + <path d="m73.89 24.04 28.885-0.2011-0.12476 3.3879-31.033 0.16229c1.2621-1.0234 1.9665-2.2859 2.2724-3.3491z" fill="url(#c)" stroke="#000" stroke-width=".41788"/> + </g> +</svg> diff --git a/sw/doxygen_crawl.html b/sw/doxygen_crawl.html new file mode 100644 index 0000000000..b60e794ca3 --- /dev/null +++ b/sw/doxygen_crawl.html @@ -0,0 +1,2256 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<title>Validator / crawler helper</title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +</head> +<body> +<a href="onewire__aux_8h_source.html"/> +<a href="neorv32__spi__irq_8h_source.html"/> +<a href="dhry_8h_source.html"/> +<a href="float__corner__test_2neorv32__zfinx__extension__intrinsics_8h_source.html"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h_source.html"/> +<a href="neorv32_8h_source.html"/> +<a href="neorv32__aux_8h_source.html"/> +<a href="neorv32__cfs_8h_source.html"/> +<a href="neorv32__clint_8h_source.html"/> +<a href="neorv32__cpu_8h_source.html"/> +<a href="neorv32__cpu__amo_8h_source.html"/> +<a href="neorv32__cpu__cfu_8h_source.html"/> +<a href="neorv32__cpu__csr_8h_source.html"/> +<a href="neorv32__crc_8h_source.html"/> +<a href="neorv32__dma_8h_source.html"/> +<a href="neorv32__gpio_8h_source.html"/> +<a href="neorv32__gptmr_8h_source.html"/> +<a href="neorv32__intrinsics_8h_source.html"/> +<a href="neorv32__legacy_8h_source.html"/> +<a href="neorv32__neoled_8h_source.html"/> +<a href="neorv32__onewire_8h_source.html"/> +<a href="neorv32__pwm_8h_source.html"/> +<a href="neorv32__rte_8h_source.html"/> +<a href="neorv32__sdi_8h_source.html"/> +<a href="neorv32__slink_8h_source.html"/> +<a href="neorv32__spi_8h_source.html"/> +<a href="neorv32__sysinfo_8h_source.html"/> +<a href="neorv32__trng_8h_source.html"/> +<a href="neorv32__twd_8h_source.html"/> +<a href="neorv32__twi_8h_source.html"/> +<a href="neorv32__uart_8h_source.html"/> +<a href="neorv32__wdt_8h_source.html"/> +<a href="neorv32__xip_8h_source.html"/> +<a href="neorv32__xirq_8h_source.html"/> +<a href="bootloader_8c.html"/> +<a href="atomic__test_2main_8c.html"/> +<a href="bus__explorer_2main_8c.html"/> +<a href="demo__blink__led_2main_8c.html"/> +<a href="demo__cfs_2main_8c.html"/> +<a href="demo__cfu_2main_8c.html"/> +<a href="demo__clint_2main_8c.html"/> +<a href="demo__crc_2main_8c.html"/> +<a href="demo__dma_2main_8c.html"/> +<a href="demo__emulate__unaligned_2main_8c.html"/> +<a href="demo__gptmr_2main_8c.html"/> +<a href="demo__hpm_2main_8c.html"/> +<a href="demo__neopixel_2main_8c.html"/> +<a href="demo__newlib_2main_8c.html"/> +<a href="demo__onewire_2main_8c.html"/> +<a href="demo__pwm_2main_8c.html"/> +<a href="demo__sdi_2main_8c.html"/> +<a href="demo__slink_2main_8c.html"/> +<a href="demo__spi_2main_8c.html"/> +<a href="demo__spi__irq_2main_8c.html"/> +<a href="demo__trng_2main_8c.html"/> +<a href="demo__twi_2main_8c.html"/> +<a href="demo__wdt_2main_8c.html"/> +<a href="demo__xip_2main_8c.html"/> +<a href="demo__xirq_2main_8c.html"/> +<a href="float__corner__test_2main_8c.html"/> +<a href="floating__point__test_2main_8c.html"/> +<a href="game__of__life_2main_8c.html"/> +<a href="hello__world_2main_8c.html"/> +<a href="processor__check_2main_8c.html"/> +<a href="neorv32__spi__irq_8c.html"/> +<a href="neorv32__spi__irq_8h.html"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html"/> +<a href="neorv32_8h.html"/> +<a href="neorv32__aux_8h.html"/> +<a href="neorv32__cfs_8h.html"/> +<a href="neorv32__clint_8h.html"/> +<a href="neorv32__cpu_8h.html"/> +<a href="neorv32__cpu__amo_8h.html"/> +<a href="neorv32__cpu__cfu_8h.html"/> +<a href="neorv32__cpu__csr_8h.html"/> +<a href="neorv32__crc_8h.html"/> +<a href="neorv32__dma_8h.html"/> +<a href="neorv32__gpio_8h.html"/> +<a href="neorv32__gptmr_8h.html"/> +<a href="neorv32__intrinsics_8h.html"/> +<a href="neorv32__legacy_8h.html"/> +<a href="neorv32__neoled_8h.html"/> +<a href="neorv32__onewire_8h.html"/> +<a href="neorv32__pwm_8h.html"/> +<a href="neorv32__rte_8h.html"/> +<a href="neorv32__sdi_8h.html"/> +<a href="neorv32__slink_8h.html"/> +<a href="neorv32__spi_8h.html"/> +<a href="neorv32__sysinfo_8h.html"/> +<a href="neorv32__trng_8h.html"/> +<a href="neorv32__twd_8h.html"/> +<a href="neorv32__twi_8h.html"/> +<a href="neorv32__uart_8h.html"/> +<a href="neorv32__wdt_8h.html"/> +<a href="neorv32__xip_8h.html"/> +<a href="neorv32__xirq_8h.html"/> +<a href="neorv32__aux_8c.html"/> +<a href="neorv32__cfs_8c.html"/> +<a href="neorv32__clint_8c.html"/> +<a href="neorv32__cpu_8c.html"/> +<a href="neorv32__cpu__amo_8c.html"/> +<a href="neorv32__cpu__cfu_8c.html"/> +<a href="neorv32__crc_8c.html"/> +<a href="neorv32__gpio_8c.html"/> +<a href="neorv32__gptmr_8c.html"/> +<a href="neorv32__neoled_8c.html"/> +<a href="neorv32__newlib_8c.html"/> +<a href="neorv32__onewire_8c.html"/> +<a href="neorv32__pwm_8c.html"/> +<a href="neorv32__rte_8c.html"/> +<a href="neorv32__sdi_8c.html"/> +<a href="neorv32__slink_8c.html"/> +<a href="neorv32__spi_8c.html"/> +<a href="neorv32__sysinfo_8c.html"/> +<a href="neorv32__trng_8c.html"/> +<a href="neorv32__twd_8c.html"/> +<a href="neorv32__twi_8c.html"/> +<a href="neorv32__uart_8c.html"/> +<a href="neorv32__wdt_8c.html"/> +<a href="neorv32__xip_8c.html"/> +<a href="neorv32__xirq_8c.html"/> +<a href="md_README.html"/> +<a href="structdate__t.html"/> +<a href="unionfloat__conv__t.html"/> +<a href="structneorv32__cfs__t.html"/> +<a href="structneorv32__clint__t.html"/> +<a href="structneorv32__crc__t.html"/> +<a href="structneorv32__dma__t.html"/> +<a href="structneorv32__gpio__t.html"/> +<a href="structneorv32__gptmr__t.html"/> +<a href="structneorv32__neoled__t.html"/> +<a href="structneorv32__onewire__t.html"/> +<a href="structneorv32__pwm__t.html"/> +<a href="structneorv32__sdi__t.html"/> +<a href="structneorv32__slink__t.html"/> +<a href="structneorv32__spi__t.html"/> +<a href="structneorv32__sysinfo__t.html"/> +<a href="structneorv32__trng__t.html"/> +<a href="structneorv32__twd__t.html"/> +<a href="structneorv32__twi__t.html"/> +<a href="structneorv32__uart__t.html"/> +<a href="structneorv32__wdt__t.html"/> +<a href="structneorv32__xip__t.html"/> +<a href="structneorv32__xirq__t.html"/> +<a href="structrecord.html"/> +<a href="unionsubwords16__t.html"/> +<a href="unionsubwords32__t.html"/> +<a href="unionsubwords64__t.html"/> +<a href="structt__neorv32__spi.html"/> +<a href="dir_449d8ba5f8b78dc90092f20d15a2386a.html"/> +<a href="dir_4316bb0e553b51b8b65560981547ce0f.html"/> +<a href="dir_0d2921e55a1172a4726516961ee96ab5.html"/> +<a href="dir_9a1c128d67c35790e92af404beb936aa.html"/> +<a href="dir_01cde3d98944a579dc3b5e43a5311a79.html"/> +<a href="dir_09a89dfa1596b6613cf2c29528a32844.html"/> +<a href="dir_f28130cc1bab3a9396f0ef9d1631e47b.html"/> +<a href="dir_bf935196a1ea0ca9cb42aae56d70946a.html"/> +<a href="dir_8c514361e1f16692c783b23503f30f16.html"/> +<a href="dir_2ba96d3140b089dada6fb9f817b7975f.html"/> +<a href="dir_b68ac2efc0c6ed3018151f7bb6c45670.html"/> +<a href="dir_93967190e0d2e549ceca77007097849b.html"/> +<a href="dir_d68bb921df3f2482fe9ace49b286ab86.html"/> +<a href="dir_23717ebbabf7a51c0558262947e0fe3b.html"/> +<a href="dir_3b3bafc48b460f797485cc75b94aa81c.html"/> +<a href="dir_b683da3a5fc966bff32ebf7cda721811.html"/> +<a href="dir_c413aba6cb5da07a571465ba333950af.html"/> +<a href="dir_c2d46947bdd73c33f53326fc5ee3a272.html"/> +<a href="dir_4c113257314015688a865e1bb8429184.html"/> +<a href="dir_8f848e36ac87ced1c361afcc0549ca32.html"/> +<a href="dir_237db5b95db643499d4c20f0bc5f6a7d.html"/> +<a href="dir_ebeff77b922fbb914a1494857a82a38e.html"/> +<a href="dir_78d7bfa405ff3a31fa7539cfd8bc8262.html"/> +<a href="dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html"/> +<a href="dir_5534fa9035f54ab438a41c43d6f7fc7a.html"/> +<a href="dir_b5eb9f7d151d147efb5dbda58439e4e7.html"/> +<a href="dir_9d04cdc586d6978be343bda7adcdc371.html"/> +<a href="dir_eea6eb9fd693422884580f70321908d2.html"/> +<a href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html"/> +<a href="dir_23212395b5ee0866d2fdd629e0ddeae8.html"/> +<a href="dir_e9ffd83269fb7f0c372f5ffbe8545008.html"/> +<a href="dir_46981071cfd8ec44311b09fdcf6c06a8.html"/> +<a href="dir_d4640980cbf1943e4a4aee6e8b810c7a.html"/> +<a href="dir_f05036e2ccd24a7119a5bbccebab20b2.html"/> +<a href="dir_752b1e5d3973bf735fa78bf6b4727df9.html"/> +<a href="dir_7d04193005ada6f9450f847f4adb6b5b.html"/> +<a href="dir_6a888d76b0f727dc821f77838927e542.html"/> +<a href="dir_0f35fd52d2216117815d19d974239550.html"/> +<a href="dir_7a2c74f70a4cdf2e836a07048e2f71dd.html"/> +<a href="dir_0c6ac14e2254a316d41123f98feeb67b.html"/> +<a href="dir_01fcd3835fb4e7d9331b722d86291b65.html"/> +<a href="dir_4bd1267d34feeec0f679c16f884588e7.html"/> +<a href="index.html"/> +<a href="doxygen_crawl.html"/> +<a href="pages.html"/> +<a href="annotated.html"/> +<a href="classes.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="functions_vars.html"/> +<a href="files.html"/> +<a href="globals.html"/> +<a href="globals_a.html"/> +<a href="globals_b.html"/> +<a href="globals_c.html"/> +<a href="globals_d.html"/> +<a href="globals_e.html"/> +<a href="globals_f.html"/> +<a href="globals_g.html"/> +<a href="globals_h.html"/> +<a href="globals_i.html"/> +<a href="globals_k.html"/> +<a href="globals_m.html"/> +<a href="globals_n.html"/> +<a href="globals_o.html"/> +<a href="globals_p.html"/> +<a href="globals_r.html"/> +<a href="globals_s.html"/> +<a href="globals_t.html"/> +<a href="globals_u.html"/> +<a href="globals_v.html"/> +<a href="globals_w.html"/> +<a href="globals_x.html"/> +<a href="globals_func.html"/> +<a href="globals_func_a.html"/> +<a href="globals_func_b.html"/> +<a href="globals_func_c.html"/> +<a href="globals_func_d.html"/> +<a href="globals_func_g.html"/> +<a href="globals_func_h.html"/> +<a href="globals_func_m.html"/> +<a href="globals_func_n.html"/> +<a href="globals_func_p.html"/> +<a href="globals_func_r.html"/> +<a href="globals_func_s.html"/> +<a href="globals_func_t.html"/> +<a href="globals_func_u.html"/> +<a href="globals_func_v.html"/> +<a href="globals_func_w.html"/> +<a href="globals_func_x.html"/> +<a href="globals_vars.html"/> +<a href="globals_vars.html"/> +<a href="globals_vars.html"/> +<a href="globals_vars.html"/> +<a href="globals_vars.html"/> +<a href="globals_vars.html"/> +<a href="globals_vars.html"/> +<a href="globals_vars.html"/> +<a href="globals_vars.html"/> +<a href="globals_vars.html"/> +<a href="globals_vars.html"/> +<a href="globals_vars.html"/> +<a href="globals_vars.html"/> +<a href="globals_enum.html"/> +<a href="globals_enum.html"/> +<a href="globals_enum.html"/> +<a href="globals_enum.html"/> +<a href="globals_enum.html"/> +<a href="globals_eval.html"/> +<a href="globals_eval_d.html"/> +<a href="globals_eval_e.html"/> +<a href="globals_eval_f.html"/> +<a href="globals_eval_g.html"/> +<a href="globals_eval_h.html"/> +<a href="globals_eval_n.html"/> +<a href="globals_eval_o.html"/> +<a href="globals_eval_p.html"/> +<a href="globals_eval_r.html"/> +<a href="globals_eval_s.html"/> +<a href="globals_eval_t.html"/> +<a href="globals_eval_u.html"/> +<a href="globals_eval_w.html"/> +<a href="globals_eval_x.html"/> +<a href="globals_defs.html"/> +<a href="globals_defs_b.html"/> +<a href="globals_defs_c.html"/> +<a href="globals_defs_d.html"/> +<a href="globals_defs_e.html"/> +<a href="globals_defs_f.html"/> +<a href="globals_defs_g.html"/> +<a href="globals_defs_i.html"/> +<a href="globals_defs_m.html"/> +<a href="globals_defs_n.html"/> +<a href="globals_defs_o.html"/> +<a href="globals_defs_p.html"/> +<a href="globals_defs_r.html"/> +<a href="globals_defs_s.html"/> +<a href="globals_defs_t.html"/> +<a href="globals_defs_u.html"/> +<a href="globals_defs_w.html"/> +<a href="globals_defs_x.html"/> +<a href="annotated.html"/> +<a href="atomic__test_2main_8c.html"/> +<a href="atomic__test_2main_8c.html#a4f4c6d8481b4100f90955ba5a70428a4"/> +<a href="atomic__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e"/> +<a href="atomic__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013"/> +<a href="atomic__test_2main_8c.html#a9141e95a5f98420ddf8a43e6d20ff6dc"/> +<a href="atomic__test_2main_8c.html#a99377a057d14aaa9b45f8cab890e8cf7"/> +<a href="atomic__test_2main_8c.html#aafcbf639ae4f66e5dfe9dea511a59f9d"/> +<a href="atomic__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="atomic__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="bootloader_8c.html"/> +<a href="bootloader_8c.html#a0035ad41f622dbfc2412318a8ed39257"/> +<a href="bootloader_8c.html#a005966cd0b32f3d5c041028c4b1c99f5"/> +<a href="bootloader_8c.html#a006c27b7d80897b78ab8cd83a391331f"/> +<a href="bootloader_8c.html#a00924a8ba223b2ca0e7031259b292c84"/> +<a href="bootloader_8c.html#a089a71f836911c71b3f73fdd3b4b890b"/> +<a href="bootloader_8c.html#a09e72e2debdd94929b2be4c7713d5e17"/> +<a href="bootloader_8c.html#a0d877f0611dfcee32a483c8a3660eb1b"/> +<a href="bootloader_8c.html#a0e5a66f68ecc7a6f42088f349707e852"/> +<a href="bootloader_8c.html#a0f9fcfdf758260b9b79b6eda063dd87a"/> +<a href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feb"/> +<a href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feba61100996f309c45b8b628ade2e3acc7f"/> +<a href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febabc27a855096a70dca0f8bc148a123be4"/> +<a href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febacc430caa4bff2fef4568c757893fe2fe"/> +<a href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febaea032c54a21057710ef2021638972ce6"/> +<a href="bootloader_8c.html#a18936dc79b9e5aa84df016b046a6b977"/> +<a href="bootloader_8c.html#a1919595ed2232aebb3e774b916ab1662"/> +<a href="bootloader_8c.html#a1fac9153314479ad0ad495d752f0224a"/> +<a href="bootloader_8c.html#a1fbdccc60f05756213c9f3d64bac6d47"/> +<a href="bootloader_8c.html#a20e93d623ce07939c3fdd53898f9d583"/> +<a href="bootloader_8c.html#a2cf31934b909299fb93bb5eebdbc7c9e"/> +<a href="bootloader_8c.html#a2f5cc04cf9c85f5d2958b384e053053b"/> +<a href="bootloader_8c.html#a3bdfe2f25b1bfb42f80624ffff22ab01"/> +<a href="bootloader_8c.html#a402ea961bfc2ffeee61e3a7c330b1559"/> +<a href="bootloader_8c.html#a418adcf57119600c3580fd2297d28de0"/> +<a href="bootloader_8c.html#a5fa6b109bf211d1768f84c9d38eef240"/> +<a href="bootloader_8c.html#a6a8caddda6e729d747726471b0b0f742"/> +<a href="bootloader_8c.html#a6fea855ffe2fa0cd5ea9f98c0d5adc4d"/> +<a href="bootloader_8c.html#a709071a651213770b4efe6e6e055ec3d"/> +<a href="bootloader_8c.html#a70b7d5c3b3ae97e4e72e84c4bc28fb8a"/> +<a href="bootloader_8c.html#a717c72166af7c2ff7e73bd0b47128338"/> +<a href="bootloader_8c.html#a82d26a2d6293ed7fd44a5c622adfbd45"/> +<a href="bootloader_8c.html#a840291bc02cba5474a4cb46a9b9566fe"/> +<a href="bootloader_8c.html#a9642e28ef2baec5b356ad9a70970d0e6"/> +<a href="bootloader_8c.html#a97299f563ebc1fca4c663b025a15136f"/> +<a href="bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa133cd87673ce9a612da494583e03dae9"/> +<a href="bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa22e8c983d74430ea0930e37781e88bf9"/> +<a href="bootloader_8c.html#a999b04603115ce08b0cb33e333312480"/> +<a href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088"/> +<a href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a2d77ed1c715fb969a1faa01c71625f2d"/> +<a href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a471ebe6c0766abc6fa4e82a09bfdb985"/> +<a href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a684d6723fa25e7651e13d99fb249363c"/> +<a href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088ad41014563cb3ca69ab69b94d43e97caa"/> +<a href="bootloader_8c.html#aa2132454aada86216009f3af206899b1"/> +<a href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fed"/> +<a href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda152e091e93778f217f8b766298351513"/> +<a href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda25bf16cd42b1fd1d95e0957b5be137d2"/> +<a href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda31c8d698c551d081a0adeafb988ed49e"/> +<a href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda5fbc6551a10549b38e5ab4a76c38f214"/> +<a href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda6c1994ba2cfd97e0c77dcdf8bbdfdfa6"/> +<a href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedaa91d3c1d788b21fc798a5976c9f0da77"/> +<a href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedacd62141d6331f66e31bd252e2a92b836"/> +<a href="bootloader_8c.html#aa7afbe8348ebd1a876a4d247553292e9"/> +<a href="bootloader_8c.html#aa9696325b450773c7a87c991abca3a54"/> +<a href="bootloader_8c.html#ababfffe8e7036179e150ad3b9bda3a74"/> +<a href="bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83"/> +<a href="bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83a98526cd8f81d570c57d98193b32cf114"/> +<a href="bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83ab149261ddf3f08e44e9d2538e384f58f"/> +<a href="bootloader_8c.html#ac18819795adb6dbdd52b0587e7fbb569"/> +<a href="bootloader_8c.html#ac58d9f7dc79a549bde1cb50f619c19af"/> +<a href="bootloader_8c.html#ae8de91537ac2782f0f0ebc3b2d4fb1df"/> +<a href="bootloader_8c.html#aea75cf0485ce0a4ea320eba994859686"/> +<a href="bootloader_8c.html#af13b4b3d5e6597feacf331e6d16b08e9"/> +<a href="bootloader_8c.html#af1c2f103ac6e3183f08b39099fab2be9"/> +<a href="bootloader_8c.html#af6cf19e40e97afb5a7c29f7b439d091d"/> +<a href="bootloader_8c.html#af6fcb607a9c320da869b72aa30893a69"/> +<a href="bootloader_8c.html#afe60a31c8561952f2f734fd67e6f7406"/> +<a href="bootloader_8c.html#aff6b53dd58cea43d24393a9a2f79e772"/> +<a href="bus__explorer_2main_8c.html"/> +<a href="bus__explorer_2main_8c.html#a02640a99db37b8d92b9edffc9720a210"/> +<a href="bus__explorer_2main_8c.html#a2b6196c2e97a7f7702c0068780304ec1"/> +<a href="bus__explorer_2main_8c.html#a6405739c6012158151eb082c31c312da"/> +<a href="bus__explorer_2main_8c.html#a96729fb5279642ac56c8e6a513789b45"/> +<a href="bus__explorer_2main_8c.html#ac582208281cd6fce4eb61c234f312ef6"/> +<a href="bus__explorer_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="bus__explorer_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="bus__explorer_2main_8c.html#afc9b1ab3db46eccf51d55c715fa2fbd4"/> +<a href="classes.html"/> +<a href="demo__blink__led_2main_8c.html"/> +<a href="demo__blink__led_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__cfs_2main_8c.html"/> +<a href="demo__cfs_2main_8c.html#a906949f076e3e0d0082af3c3b1acb518"/> +<a href="demo__cfs_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__cfs_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__cfu_2main_8c.html"/> +<a href="demo__cfu_2main_8c.html#a094212e3731a9aecbd278fac243de6ec"/> +<a href="demo__cfu_2main_8c.html#a0e980c5d81b1eca90b8073e54099bdb0"/> +<a href="demo__cfu_2main_8c.html#a26da64691624f3c899f2394a427d6593"/> +<a href="demo__cfu_2main_8c.html#a2d3853c367c3bce99e787c0df445030a"/> +<a href="demo__cfu_2main_8c.html#a2e2ccb9136736a673dbef71f207e97a0"/> +<a href="demo__cfu_2main_8c.html#a33b2d9298edf94c5961e67a59c371d00"/> +<a href="demo__cfu_2main_8c.html#a36801eebef583b6c3438709144834e3e"/> +<a href="demo__cfu_2main_8c.html#a72ba1460776ad684028448ca51810bbe"/> +<a href="demo__cfu_2main_8c.html#a8dc502bf508491eed1f39c4acf040efb"/> +<a href="demo__cfu_2main_8c.html#a9ad2780a4cfe0d9cb4f1a846a92063ae"/> +<a href="demo__cfu_2main_8c.html#ab5c498f9da12ab2d6ddc89bf4a46dec6"/> +<a href="demo__cfu_2main_8c.html#ac637695e266f3af7799e352b374412ad"/> +<a href="demo__cfu_2main_8c.html#acb6dd9d6ab74ac94f174a11ff3ad76af"/> +<a href="demo__cfu_2main_8c.html#ad424a26173bd8d84b8d1cae94a55f248"/> +<a href="demo__cfu_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__cfu_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__cfu_2main_8c.html#aee8dde13fe2f5ac52dd6075e2fe1eab5"/> +<a href="demo__clint_2main_8c.html"/> +<a href="demo__clint_2main_8c.html#a56e848c71747fc350f1697e84797871f"/> +<a href="demo__clint_2main_8c.html#a8e5e335f226a7dac74e2f117f07bebf6"/> +<a href="demo__clint_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__crc_2main_8c.html"/> +<a href="demo__crc_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__crc_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__dma_2main_8c.html"/> +<a href="demo__dma_2main_8c.html#a8ad0c7bfd07edb6d42d86b166347206b"/> +<a href="demo__dma_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__dma_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__dma_2main_8c.html#aefcc5abb86a652587ff69be120a66487"/> +<a href="demo__emulate__unaligned_2main_8c.html"/> +<a href="demo__emulate__unaligned_2main_8c.html#a07da42351229525998965b219e827460"/> +<a href="demo__emulate__unaligned_2main_8c.html#a4407b4d6eae3ba7fe9538b1242a7e165"/> +<a href="demo__emulate__unaligned_2main_8c.html#a556f675911f865ead06c36072b1b9c3b"/> +<a href="demo__emulate__unaligned_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__emulate__unaligned_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__gptmr_2main_8c.html"/> +<a href="demo__gptmr_2main_8c.html#a2bd89412466a65329711bfd5c29199c9"/> +<a href="demo__gptmr_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__gptmr_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__hpm_2main_8c.html"/> +<a href="demo__hpm_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__hpm_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__neopixel_2main_8c.html"/> +<a href="demo__neopixel_2main_8c.html#a1d1d5e7ff16f25b68fdf779befd298f7"/> +<a href="demo__neopixel_2main_8c.html#a2736ec755f9e10c80bf66f727f870ffc"/> +<a href="demo__neopixel_2main_8c.html#aa1dddb8d6b3b4d2f19afc3c09e2ff572"/> +<a href="demo__neopixel_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__neopixel_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__newlib_2main_8c.html"/> +<a href="demo__newlib_2main_8c.html#a7076a1dfd3c18c91fcf665ce54b087b3"/> +<a href="demo__newlib_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__newlib_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__onewire_2main_8c.html"/> +<a href="demo__onewire_2main_8c.html#a28283848f09bf8feebc860a51545f487"/> +<a href="demo__onewire_2main_8c.html#a29d5831498c2eaf0415d6f01efb9e7ce"/> +<a href="demo__onewire_2main_8c.html#a951a31029af34715f20856eb82432637"/> +<a href="demo__onewire_2main_8c.html#ac07c9cfd80ac2e24be9dac6cf943b7de"/> +<a href="demo__onewire_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__onewire_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__onewire_2main_8c.html#af25820ed386a66a0d6bb4dcdd2204704"/> +<a href="demo__pwm_2main_8c.html"/> +<a href="demo__pwm_2main_8c.html#a2351f30f0895b552e5fe9944d69e645d"/> +<a href="demo__pwm_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__pwm_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__sdi_2main_8c.html"/> +<a href="demo__sdi_2main_8c.html#aa25f620a5631e862252be1d5429e8585"/> +<a href="demo__sdi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__sdi_2main_8c.html#ae3dc843520a800d7ba2b5d6be03d9c3d"/> +<a href="demo__sdi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__slink_2main_8c.html"/> +<a href="demo__slink_2main_8c.html#a48c79e20ed1d4138d61b5593bdbe537a"/> +<a href="demo__slink_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__slink_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__spi_2main_8c.html"/> +<a href="demo__spi_2main_8c.html#a13e10b34fbbffca6c31f0ce25b3f8432"/> +<a href="demo__spi_2main_8c.html#a6f94991b8943a141ed4124585222470d"/> +<a href="demo__spi_2main_8c.html#a755192be6c3cf9904564b0eee99de445"/> +<a href="demo__spi_2main_8c.html#ac582208281cd6fce4eb61c234f312ef6"/> +<a href="demo__spi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__spi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__spi__irq_2main_8c.html"/> +<a href="demo__spi__irq_2main_8c.html#a7e266cc5247c999948dacc2102bd184a"/> +<a href="demo__spi__irq_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__spi__irq_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__trng_2main_8c.html"/> +<a href="demo__trng_2main_8c.html#a23a91e6fe2cc44f3c29baf0d331e05db"/> +<a href="demo__trng_2main_8c.html#a4e49f5e3feb4bd5755f919cd3310b506"/> +<a href="demo__trng_2main_8c.html#a64205d97b57c99dc5e95b8621827f4a4"/> +<a href="demo__trng_2main_8c.html#a840291bc02cba5474a4cb46a9b9566fe"/> +<a href="demo__trng_2main_8c.html#abbde1237eed617466fb971a78c3acd1e"/> +<a href="demo__trng_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__trng_2main_8c.html#af37eae672fee5e81f00a1dbf51b7e417"/> +<a href="demo__twi_2main_8c.html"/> +<a href="demo__twi_2main_8c.html#a2ebc688bc1dad328693fc0974b378fa0"/> +<a href="demo__twi_2main_8c.html#aa94edd4f55a3ac18913f661f4bc16fb1"/> +<a href="demo__twi_2main_8c.html#aace46ee34e954f9ebee5873beb0785f1"/> +<a href="demo__twi_2main_8c.html#acee0c1770467f85a150d072ac7e1252f"/> +<a href="demo__twi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__twi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__wdt_2main_8c.html"/> +<a href="demo__wdt_2main_8c.html#a01af3905e60b1869f669315f4a1297f5"/> +<a href="demo__wdt_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__wdt_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__xip_2main_8c.html"/> +<a href="demo__xip_2main_8c.html#a0035ad41f622dbfc2412318a8ed39257"/> +<a href="demo__xip_2main_8c.html#a0458656f8a108ff31f4bbbd005f029a0"/> +<a href="demo__xip_2main_8c.html#a23a9099a5f8fc9c6e253c0eecb2be8db"/> +<a href="demo__xip_2main_8c.html#a23bd7bd7b0808d919fd09ac0a8258498"/> +<a href="demo__xip_2main_8c.html#a3043d09bdc155f57f45cd91e0cd4d15b"/> +<a href="demo__xip_2main_8c.html#a4ddfa8fdc072cadeef18a4a10bc8b174"/> +<a href="demo__xip_2main_8c.html#a6b20d41d6252e9871430c242cb1a56e7"/> +<a href="demo__xip_2main_8c.html#a9e0b2714126b6699ddb65485c93293e4"/> +<a href="demo__xip_2main_8c.html#acc95e55a622d79c2a398397d1f9b8033"/> +<a href="demo__xip_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08e"/> +<a href="demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08ea90f3b76faed13819ee13e574d1bff0c1"/> +<a href="demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08eac84de63bbea3989c71bcc92d1d01cfa4"/> +<a href="demo__xip_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__xip_2main_8c.html#aec72efe062dbdb149ae6d4f8b1be6793"/> +<a href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12e"/> +<a href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea152e091e93778f217f8b766298351513"/> +<a href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea528cebc54176f6f4c0a8f7f16fb28ca1"/> +<a href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea5fbc6551a10549b38e5ab4a76c38f214"/> +<a href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea6c1994ba2cfd97e0c77dcdf8bbdfdfa6"/> +<a href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eaa91d3c1d788b21fc798a5976c9f0da77"/> +<a href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eacd62141d6331f66e31bd252e2a92b836"/> +<a href="demo__xip_2main_8c.html#af9b3c37c806499fc435302f5bce6a122"/> +<a href="demo__xirq_2main_8c.html"/> +<a href="demo__xirq_2main_8c.html#a8874ccfc0b56171c359b5c2ceaf2bd80"/> +<a href="demo__xirq_2main_8c.html#a99e9ae3088f39995c852b2c53ec21266"/> +<a href="demo__xirq_2main_8c.html#abfe0c0bc47a683ba55df2aed63a12d4b"/> +<a href="demo__xirq_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="demo__xirq_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="demo__xirq_2main_8c.html#ae8e3b3236aa2303c2b5e6e421b72cf73"/> +<a href="dhry_8h_source.html"/> +<a href="dir_01cde3d98944a579dc3b5e43a5311a79.html"/> +<a href="dir_01fcd3835fb4e7d9331b722d86291b65.html"/> +<a href="dir_09a89dfa1596b6613cf2c29528a32844.html"/> +<a href="dir_0c6ac14e2254a316d41123f98feeb67b.html"/> +<a href="dir_0d2921e55a1172a4726516961ee96ab5.html"/> +<a href="dir_23212395b5ee0866d2fdd629e0ddeae8.html"/> +<a href="dir_23717ebbabf7a51c0558262947e0fe3b.html"/> +<a href="dir_237db5b95db643499d4c20f0bc5f6a7d.html"/> +<a href="dir_2ba96d3140b089dada6fb9f817b7975f.html"/> +<a href="dir_3b3bafc48b460f797485cc75b94aa81c.html"/> +<a href="dir_4316bb0e553b51b8b65560981547ce0f.html"/> +<a href="dir_449d8ba5f8b78dc90092f20d15a2386a.html"/> +<a href="dir_46981071cfd8ec44311b09fdcf6c06a8.html"/> +<a href="dir_4c113257314015688a865e1bb8429184.html"/> +<a href="dir_5534fa9035f54ab438a41c43d6f7fc7a.html"/> +<a href="dir_752b1e5d3973bf735fa78bf6b4727df9.html"/> +<a href="dir_78d7bfa405ff3a31fa7539cfd8bc8262.html"/> +<a href="dir_7a2c74f70a4cdf2e836a07048e2f71dd.html"/> +<a href="dir_7d04193005ada6f9450f847f4adb6b5b.html"/> +<a href="dir_8c514361e1f16692c783b23503f30f16.html"/> +<a href="dir_8f848e36ac87ced1c361afcc0549ca32.html"/> +<a href="dir_93967190e0d2e549ceca77007097849b.html"/> +<a href="dir_9a1c128d67c35790e92af404beb936aa.html"/> +<a href="dir_9d04cdc586d6978be343bda7adcdc371.html"/> +<a href="dir_b5eb9f7d151d147efb5dbda58439e4e7.html"/> +<a href="dir_b683da3a5fc966bff32ebf7cda721811.html"/> +<a href="dir_b68ac2efc0c6ed3018151f7bb6c45670.html"/> +<a href="dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html"/> +<a href="dir_bf935196a1ea0ca9cb42aae56d70946a.html"/> +<a href="dir_c2d46947bdd73c33f53326fc5ee3a272.html"/> +<a href="dir_c413aba6cb5da07a571465ba333950af.html"/> +<a href="dir_d4640980cbf1943e4a4aee6e8b810c7a.html"/> +<a href="dir_d68bb921df3f2482fe9ace49b286ab86.html"/> +<a href="dir_e9ffd83269fb7f0c372f5ffbe8545008.html"/> +<a href="dir_ebeff77b922fbb914a1494857a82a38e.html"/> +<a href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html"/> +<a href="dir_f28130cc1bab3a9396f0ef9d1631e47b.html"/> +<a href="files.html"/> +<a href="float__corner__test_2main_8c.html"/> +<a href="float__corner__test_2main_8c.html#a1740720aa8ce1a30fcf642be9140d203"/> +<a href="float__corner__test_2main_8c.html#a2d16b9e484b7af7897c7ae83f945ceca"/> +<a href="float__corner__test_2main_8c.html#a4ee0f6d28896a97d2c0cad866e77b874"/> +<a href="float__corner__test_2main_8c.html#a6969308bd3633928893a2666f1df66fc"/> +<a href="float__corner__test_2main_8c.html#a73c70bd0fb6d695cb113eaeb50923e3e"/> +<a href="float__corner__test_2main_8c.html#a7e134923925fa24fd1090281c3a416c3"/> +<a href="float__corner__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e"/> +<a href="float__corner__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013"/> +<a href="float__corner__test_2main_8c.html#a923de9c3e55322d85522740c0d0ff867"/> +<a href="float__corner__test_2main_8c.html#a941ef8d24fd8e8fe4536626b2ce72410"/> +<a href="float__corner__test_2main_8c.html#a94f0b0908f48f383145ed61ef8eb0713"/> +<a href="float__corner__test_2main_8c.html#a97323ecaf1ae85e68a736b06bc3b58f8"/> +<a href="float__corner__test_2main_8c.html#aa3b6c4d49be7372de9e771a0475306ac"/> +<a href="float__corner__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="float__corner__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="float__corner__test_2main_8c.html#aed386f612417aeeeac8b08db27d515e4"/> +<a href="float__corner__test_2neorv32__zfinx__extension__intrinsics_8h_source.html"/> +<a href="floating__point__test_2main_8c.html"/> +<a href="floating__point__test_2main_8c.html#a1740720aa8ce1a30fcf642be9140d203"/> +<a href="floating__point__test_2main_8c.html#a1a1af220e72c69b03d13b2df53650e10"/> +<a href="floating__point__test_2main_8c.html#a2d16b9e484b7af7897c7ae83f945ceca"/> +<a href="floating__point__test_2main_8c.html#a4ee0f6d28896a97d2c0cad866e77b874"/> +<a href="floating__point__test_2main_8c.html#a6969308bd3633928893a2666f1df66fc"/> +<a href="floating__point__test_2main_8c.html#a73c70bd0fb6d695cb113eaeb50923e3e"/> +<a href="floating__point__test_2main_8c.html#a7e134923925fa24fd1090281c3a416c3"/> +<a href="floating__point__test_2main_8c.html#a7ec330b668b5b24d666d7769ccecfee3"/> +<a href="floating__point__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e"/> +<a href="floating__point__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013"/> +<a href="floating__point__test_2main_8c.html#a923de9c3e55322d85522740c0d0ff867"/> +<a href="floating__point__test_2main_8c.html#a941ef8d24fd8e8fe4536626b2ce72410"/> +<a href="floating__point__test_2main_8c.html#a94f0b0908f48f383145ed61ef8eb0713"/> +<a href="floating__point__test_2main_8c.html#a97323ecaf1ae85e68a736b06bc3b58f8"/> +<a href="floating__point__test_2main_8c.html#aa3b6c4d49be7372de9e771a0475306ac"/> +<a href="floating__point__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="floating__point__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="floating__point__test_2main_8c.html#aed386f612417aeeeac8b08db27d515e4"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a03aba9c70c5286dacebaeb0ef5219cc9"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a05d0d5a8eb9422e93448efdeb679cabf"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0c985e626ed1d69314f4e3a0f1f58624"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0f2260b7b5793a95c49670379fc89617"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a10a05bface37bff32c78ed0746845794"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a12498d635f422f607b9b83facf3050dd"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a17e2b7a399c956d548a609185084ea3c"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a1ceb3450f1e5c62d3079cd0e93c03501"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2103eb86052f6f8e24a8a848ffc6528a"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2235d91cdac03bf8071003a5c59b9dd0"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a292365fe41a7a661e61ae746306ba5e9"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2b802122d53a2ce517b3d39fec34d7e0"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3064a5c57b5f45d57c4d19eb798724f6"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a39212f2e2bb0f1752092a1732f93edf3"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3bc6ee3059a7e99b187c4ea5e217715b"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a4b151fcb252fc7b894f247f5af6a1809"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a523fa0fb6f521311c7f44692c586b3ee"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a639fc7bd75933888540e9cceb67221a0"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a791f880781a1bcea1861471be7d1a851"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a7cb3c6570b911cd1dfb7b6e798cc1d21"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a833638b346722dfa9d7d5c8d60998ec8"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a837b7330f9d568791687ae1384b8ef28"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a85aa18294a58997db2c324184196669c"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a872cd30fb61190bd1ac719d25b01f5a3"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87a106e0d24a3183712e438d2bcbfa2d"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87c1ce499e5e43554cb0f407cf0d3f7f"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a98caf7f310820052ae96ce0f45e6cd26"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a9d676567276439875c9b1a15b892b555"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa4010772a986d03929ba7a43dfdcddd9"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa6473bc2d2721b57277b83a3ae0cfdb6"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aad9fc7337e09081cf8c5bff8c28776c8"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ab6a9d15643e3085ff80c7883f183a42b"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abbdb403cdeef414fa2f867b702d5f6eb"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abf7f9e466906306d9755fd5bc7946e3c"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac5fdef0607602fa0bdb93b3535fd709e"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac8bb4450b39854ab07839e8f3505361c"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ace5d95b855ec1aa8eacdb5bbeea58197"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ad43e8bdf4a6fbe229d22d24680f2be80"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#adb83fab39d91e9291da2b7b07830cf82"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ae41a0bf9d28c35f4d6db7177ccf8ee06"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aeaf46a17b671278be2bf804159827a40"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af4ddfae45807d4e41f758672ee14cf7b"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af8473ba61abab8ae2e3ecbaf22d70e89"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af9b16a32d2bb13c8af5a678271d74889"/> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aff3acd90bcfbda96945f95a0e0bae12b"/> +<a href="functions.html"/> +<a href="functions_vars.html"/> +<a href="game__of__life_2main_8c.html"/> +<a href="game__of__life_2main_8c.html#a3f33bf77abbf35c245956489f8f7e3a7"/> +<a href="game__of__life_2main_8c.html#a5315eb56128f1ca40d9f4d477c345dd7"/> +<a href="game__of__life_2main_8c.html#a6bd541a19c62ea9ec620eaad3f218d16"/> +<a href="game__of__life_2main_8c.html#a78c5b500f0f057bcaedf6fedeca7c537"/> +<a href="game__of__life_2main_8c.html#a819f10c5b644a07eeb069b6e7f12050e"/> +<a href="game__of__life_2main_8c.html#a840291bc02cba5474a4cb46a9b9566fe"/> +<a href="game__of__life_2main_8c.html#a977190adaa24a3f49fca1540b51d25a0"/> +<a href="game__of__life_2main_8c.html#a9a455dea83a25f656fcc5217ad513dac"/> +<a href="game__of__life_2main_8c.html#aac4bec7738b12f5a4b4d7a3a6cb1ab8d"/> +<a href="game__of__life_2main_8c.html#abe6bebcf1cb4f5b4d522c1706eb48663"/> +<a href="game__of__life_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="game__of__life_2main_8c.html#ae0b5214cf0cd93049e9df8a95a09d826"/> +<a href="game__of__life_2main_8c.html#aed77778557404b38bebb05b5830368b4"/> +<a href="game__of__life_2main_8c.html#afa6488273e16792d9c3da5e40e3f572d"/> +<a href="globals.html"/> +<a href="globals_a.html"/> +<a href="globals_b.html"/> +<a href="globals_c.html"/> +<a href="globals_d.html"/> +<a href="globals_defs.html"/> +<a href="globals_defs_b.html"/> +<a href="globals_defs_c.html"/> +<a href="globals_defs_d.html"/> +<a href="globals_defs_e.html"/> +<a href="globals_defs_f.html"/> +<a href="globals_defs_g.html"/> +<a href="globals_defs_i.html"/> +<a href="globals_defs_m.html"/> +<a href="globals_defs_n.html"/> +<a href="globals_defs_o.html"/> +<a href="globals_defs_p.html"/> +<a href="globals_defs_r.html"/> +<a href="globals_defs_s.html"/> +<a href="globals_defs_t.html"/> +<a href="globals_defs_u.html"/> +<a href="globals_defs_w.html"/> +<a href="globals_defs_x.html"/> +<a href="globals_e.html"/> +<a href="globals_enum.html"/> +<a href="globals_eval.html"/> +<a href="globals_eval_d.html"/> +<a href="globals_eval_e.html"/> +<a href="globals_eval_f.html"/> +<a href="globals_eval_g.html"/> +<a href="globals_eval_h.html"/> +<a href="globals_eval_n.html"/> +<a href="globals_eval_o.html"/> +<a href="globals_eval_p.html"/> +<a href="globals_eval_r.html"/> +<a href="globals_eval_s.html"/> +<a href="globals_eval_t.html"/> +<a href="globals_eval_u.html"/> +<a href="globals_eval_w.html"/> +<a href="globals_eval_x.html"/> +<a href="globals_f.html"/> +<a href="globals_func.html"/> +<a href="globals_func_a.html"/> +<a href="globals_func_b.html"/> +<a href="globals_func_c.html"/> +<a href="globals_func_d.html"/> +<a href="globals_func_g.html"/> +<a href="globals_func_h.html"/> +<a href="globals_func_m.html"/> +<a href="globals_func_n.html"/> +<a href="globals_func_p.html"/> +<a href="globals_func_r.html"/> +<a href="globals_func_s.html"/> +<a href="globals_func_t.html"/> +<a href="globals_func_u.html"/> +<a href="globals_func_v.html"/> +<a href="globals_func_w.html"/> +<a href="globals_func_x.html"/> +<a href="globals_g.html"/> +<a href="globals_h.html"/> +<a href="globals_i.html"/> +<a href="globals_k.html"/> +<a href="globals_m.html"/> +<a href="globals_n.html"/> +<a href="globals_o.html"/> +<a href="globals_p.html"/> +<a href="globals_r.html"/> +<a href="globals_s.html"/> +<a href="globals_t.html"/> +<a href="globals_u.html"/> +<a href="globals_v.html"/> +<a href="globals_vars.html"/> +<a href="globals_w.html"/> +<a href="globals_x.html"/> +<a href="hello__world_2main_8c.html"/> +<a href="hello__world_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f"/> +<a href="hello__world_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="md_README.html"/> +<a href="md_README.html#autotoc_md0"/> +<a href="md_README.html#autotoc_md1"/> +<a href="md_README.html#autotoc_md10"/> +<a href="md_README.html#autotoc_md11"/> +<a href="md_README.html#autotoc_md12"/> +<a href="md_README.html#autotoc_md13"/> +<a href="md_README.html#autotoc_md2"/> +<a href="md_README.html#autotoc_md3"/> +<a href="md_README.html#autotoc_md4"/> +<a href="md_README.html#autotoc_md5"/> +<a href="md_README.html#autotoc_md6"/> +<a href="md_README.html#autotoc_md7"/> +<a href="md_README.html#autotoc_md8"/> +<a href="md_README.html#autotoc_md9"/> +<a href="neorv32_8h.html"/> +<a href="neorv32_8h.html#a000b37f710043fe21e49b2fdbc039d94"/> +<a href="neorv32_8h.html#a0039bae3454a22e71d64e70d674f5d6a"/> +<a href="neorv32_8h.html#a0913144fce247e24ccd0f178b9ac32b7"/> +<a href="neorv32_8h.html#a095f41fbefaa7acc1bfdd65cd3ce06ea"/> +<a href="neorv32_8h.html#a0991b1a5ba1e8c3550eb9770d43589d0"/> +<a href="neorv32_8h.html#a0a59186908b498cb92273b7767966e26"/> +<a href="neorv32_8h.html#a0afc1a759116d4d73a199ef769bced47"/> +<a href="neorv32_8h.html#a0b738b26abb2b951f1f5c5d9525d7701"/> +<a href="neorv32_8h.html#a0e2377055bdc0f416b5ae4385610600d"/> +<a href="neorv32_8h.html#a0eaa3dcfb1db0c72534046feb9fa9b60"/> +<a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73"/> +<a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee"/> +<a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17"/> +<a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da"/> +<a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1"/> +<a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e"/> +<a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79"/> +<a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9"/> +<a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05"/> +<a href="neorv32_8h.html#a142f4a1c754edfab292706618d427b94"/> +<a href="neorv32_8h.html#a16b9a7444833b5581df073661deb8f3a"/> +<a href="neorv32_8h.html#a1ac29f2f7bace5ba92b2b68a4541a60c"/> +<a href="neorv32_8h.html#a1eb0cb7fed7e154e15cb4009880a879c"/> +<a href="neorv32_8h.html#a1fa2b25383e6d05cf26f3517091ddbbf"/> +<a href="neorv32_8h.html#a232fe0eb5665373b6e2b464bdc228df2"/> +<a href="neorv32_8h.html#a26a1defe18ce222b8b4ed1c760344700"/> +<a href="neorv32_8h.html#a2e70d3a4e2973d224643813fcf315a20"/> +<a href="neorv32_8h.html#a3012986cdd5748ee96bcc74cd7108dea"/> +<a href="neorv32_8h.html#a30cf20b6d704c50cc5c46238bb43646f"/> +<a href="neorv32_8h.html#a32904e45632a47e21f7c9d873720cdc5"/> +<a href="neorv32_8h.html#a3853ef999f99ca062e6025038811d0f0"/> +<a href="neorv32_8h.html#a3dc1579e0bd1718b8f24cda6b54ae43a"/> +<a href="neorv32_8h.html#a3e7aaa405a7d1fcd71a36c4b6b5a4081"/> +<a href="neorv32_8h.html#a41d6f97daef61641da96b9f72f6b272f"/> +<a href="neorv32_8h.html#a445543c36d1f78477aa8ea4841c720a1"/> +<a href="neorv32_8h.html#a48b80113ca718fbdc50d75e1ec96a1ff"/> +<a href="neorv32_8h.html#a4a3164d123ddddd07750f868e67d82d8"/> +<a href="neorv32_8h.html#a4a741408a4bb0938e03b99555306db9c"/> +<a href="neorv32_8h.html#a4c1cd9ec9f80da2080e5d0d35cc524dd"/> +<a href="neorv32_8h.html#a4cc50287c7a53982761a8116396ff7dd"/> +<a href="neorv32_8h.html#a4e039d13b8d3f20453e1bb6b40512e43"/> +<a href="neorv32_8h.html#a4fff18e72d10377cdcb8d2ac0a617a5d"/> +<a href="neorv32_8h.html#a559fdce92e8af5efc426c8fc48d14f99"/> +<a href="neorv32_8h.html#a568b54ba7dfdae736d8d685dc4d32113"/> +<a href="neorv32_8h.html#a5aa936f38782232c7ed3eab1283ee536"/> +<a href="neorv32_8h.html#a5c48d5c4effb47cdb019aa2da7c84526"/> +<a href="neorv32_8h.html#a68611c0dfbe331739eff10230ac3fede"/> +<a href="neorv32_8h.html#a68925ca3f482f148caedd36118fd8d79"/> +<a href="neorv32_8h.html#a6af270d7ae8b1cde30e44eb9142491d3"/> +<a href="neorv32_8h.html#a6b55ce6abe6b141000a6bb00949169e9"/> +<a href="neorv32_8h.html#a6c118c1784d8446360b00cde97437ca7"/> +<a href="neorv32_8h.html#a7a849638eff31f2e1955bdc53d4fc84d"/> +<a href="neorv32_8h.html#a7cd6e1c5a9213256b277d8ef74bfb564"/> +<a href="neorv32_8h.html#a7fbe28901775e284d5700086f0b0bfcd"/> +<a href="neorv32_8h.html#a7fd1e24d4de2eed7bf9cd5391562c7f4"/> +<a href="neorv32_8h.html#a83c212f1f5d8ee2a5921b3b2b19e9cc4"/> +<a href="neorv32_8h.html#a866768963f8648363dce40de9f34d61b"/> +<a href="neorv32_8h.html#a8680ab1f14e512f21913572b35cbbf77"/> +<a href="neorv32_8h.html#a8ac9e39bd62e9c5d7bcde0d44716b958"/> +<a href="neorv32_8h.html#a8bb1918679e32e898af2d485cfa44afb"/> +<a href="neorv32_8h.html#a8d0409818600c0b2acfe8253e8f027b8"/> +<a href="neorv32_8h.html#a8d0b612e52b77395a05d4f18af6fcf00"/> +<a href="neorv32_8h.html#a942a897be2d4ae6820bee0f7bb3a0ff1"/> +<a href="neorv32_8h.html#a95387d3482ec8e5c1d734805fdf64fa5"/> +<a href="neorv32_8h.html#a9af9742516d8f0e43cee33882ea41157"/> +<a href="neorv32_8h.html#a9b316ec038bd94ada42c9dab57a0a3cb"/> +<a href="neorv32_8h.html#a9bf0149681677f7d87abf8f62e2d9a3d"/> +<a href="neorv32_8h.html#a9dc37695ca169bc0eb93898e7aeeee58"/> +<a href="neorv32_8h.html#aa01bea676e878a9e87ca10ce2d91e51f"/> +<a href="neorv32_8h.html#aa0ff72ea560d7e1462787dc31bd467cf"/> +<a href="neorv32_8h.html#aa466dc5eace7351bd438606f0f7475a7"/> +<a href="neorv32_8h.html#aa8d3a83ffad1e71f0832a5da78d62008"/> +<a href="neorv32_8h.html#aaa2cb9e7075a852870fd67eff2861b18"/> +<a href="neorv32_8h.html#aac38deeef36de0a474ab238a3054f860"/> +<a href="neorv32_8h.html#aae182648a2c23d070b9db0295388e001"/> +<a href="neorv32_8h.html#aae6b2ae3fba20ff80bfb59735f179c26"/> +<a href="neorv32_8h.html#ab1522f52c3c24ba2245dfa2783932d42"/> +<a href="neorv32_8h.html#ab1c351f5ea19ac9ea864155be9cc0b4b"/> +<a href="neorv32_8h.html#ab1fdaedb2c4c8753ef3be87c82568dda"/> +<a href="neorv32_8h.html#ab2f58f746febb29a9828447c733f8043"/> +<a href="neorv32_8h.html#ab4846cd153e8a23deec45d81cc8372a2"/> +<a href="neorv32_8h.html#ab4a2ac455d7426992de6877ea7325f21"/> +<a href="neorv32_8h.html#ab50df423fdba86bb83bc5d90a4c3bb20"/> +<a href="neorv32_8h.html#ab5e6dc57886cd5ed98b86f22fc37d7cc"/> +<a href="neorv32_8h.html#ab61a869973c8d027360f9c1f47fb5b01"/> +<a href="neorv32_8h.html#ab8fcd3f80c373eb0f9d0fc6bf64ca626"/> +<a href="neorv32_8h.html#ac4060532b7aa390623f54720460a2680"/> +<a href="neorv32_8h.html#ac8b656bd05c05176638ea3f922228ca5"/> +<a href="neorv32_8h.html#ac8e98b2af75c8e31f9815dee3dcbaf8e"/> +<a href="neorv32_8h.html#aca22a64c8c580dfde1676732d97ead7c"/> +<a href="neorv32_8h.html#aca6cfc3f580c4dfe1e213009ee450c58"/> +<a href="neorv32_8h.html#ace46f95dec73b33bf2535eb653bf8f65"/> +<a href="neorv32_8h.html#ace79ee46daf3a1b689d9fe79dfcd6627"/> +<a href="neorv32_8h.html#ad00097ae9632a0f11c0dab96e272cff5"/> +<a href="neorv32_8h.html#ad0b9eb2ee1f411d7fccdf4fe263214e1"/> +<a href="neorv32_8h.html#ad2e81443af8a4ce2db3a4e3c1a8fb784"/> +<a href="neorv32_8h.html#addbe29166bb77bc045ad0e3db68e57e9"/> +<a href="neorv32_8h.html#aded7d7f5f4ba3a6d90f9a29e62a8cfab"/> +<a href="neorv32_8h.html#ae0978315beac8399f96f520bda81c7fe"/> +<a href="neorv32_8h.html#ae6ef7c715931df8bdc331577da14119b"/> +<a href="neorv32_8h.html#ae8588cca20d5e36f74c5207c376389a1"/> +<a href="neorv32_8h.html#afe0cb262d517c7da73d6b5dc78886334"/> +<a href="neorv32_8h.html#afef7a6b121a788560b29e2ee2a58c725"/> +<a href="neorv32_8h.html#aff756a395771f22c5f412f23f177ea7d"/> +<a href="neorv32__aux_8c.html"/> +<a href="neorv32__aux_8c.html#a05a5482da3b72a5bdf2181e754143d79"/> +<a href="neorv32__aux_8c.html#a885a81838a91b57797e849cb835c6887"/> +<a href="neorv32__aux_8c.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c"/> +<a href="neorv32__aux_8c.html#af72230251bc58d3142353849f63d5667"/> +<a href="neorv32__aux_8c.html#aff31dd983f75f70eeae331c65acaa50e"/> +<a href="neorv32__aux_8h.html"/> +<a href="neorv32__aux_8h.html#a05a5482da3b72a5bdf2181e754143d79"/> +<a href="neorv32__aux_8h.html#a885a81838a91b57797e849cb835c6887"/> +<a href="neorv32__aux_8h.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c"/> +<a href="neorv32__aux_8h.html#af72230251bc58d3142353849f63d5667"/> +<a href="neorv32__aux_8h.html#aff31dd983f75f70eeae331c65acaa50e"/> +<a href="neorv32__cfs_8c.html"/> +<a href="neorv32__cfs_8c.html#abac96dfaefe433eca1c0b93fa6183d2e"/> +<a href="neorv32__cfs_8h.html"/> +<a href="neorv32__cfs_8h.html#a6c101b306bd096f78d351e39b308d3e2"/> +<a href="neorv32__cfs_8h.html#abac96dfaefe433eca1c0b93fa6183d2e"/> +<a href="neorv32__clint_8c.html"/> +<a href="neorv32__clint_8c.html#a197e7946193987bf04a08aa0563462bf"/> +<a href="neorv32__clint_8c.html#a1d6526b096fbf99fdde2632bff7ce8df"/> +<a href="neorv32__clint_8c.html#a4478c86505e3a22b774208006060b8a4"/> +<a href="neorv32__clint_8c.html#a6655e1e21cc94cda4e5c21544a72c758"/> +<a href="neorv32__clint_8c.html#a89aa592a96260e68f99df71a194facaa"/> +<a href="neorv32__clint_8c.html#a94364eb5e89145b5e2b61ac6d3eeccd4"/> +<a href="neorv32__clint_8c.html#abe9bcd07591e9c2d3e27435809bf4bdd"/> +<a href="neorv32__clint_8c.html#af1e2ff4ce5f3a20b07eeaac50685110a"/> +<a href="neorv32__clint_8c.html#af8e6985da6cd629a0572edd8c70cd888"/> +<a href="neorv32__clint_8h.html"/> +<a href="neorv32__clint_8h.html#a197e7946193987bf04a08aa0563462bf"/> +<a href="neorv32__clint_8h.html#a1d6526b096fbf99fdde2632bff7ce8df"/> +<a href="neorv32__clint_8h.html#a4478c86505e3a22b774208006060b8a4"/> +<a href="neorv32__clint_8h.html#a6655e1e21cc94cda4e5c21544a72c758"/> +<a href="neorv32__clint_8h.html#a89aa592a96260e68f99df71a194facaa"/> +<a href="neorv32__clint_8h.html#a94364eb5e89145b5e2b61ac6d3eeccd4"/> +<a href="neorv32__clint_8h.html#aa85ecb43f16fa798c5e583f08d29ca3e"/> +<a href="neorv32__clint_8h.html#abe9bcd07591e9c2d3e27435809bf4bdd"/> +<a href="neorv32__clint_8h.html#af1e2ff4ce5f3a20b07eeaac50685110a"/> +<a href="neorv32__clint_8h.html#af8e6985da6cd629a0572edd8c70cd888"/> +<a href="neorv32__cpu_8c.html"/> +<a href="neorv32__cpu_8c.html#a232d0290c459dc790d989fcdc4d121bf"/> +<a href="neorv32__cpu_8c.html#a27dd614bc270dfa30ed73323ebda2d2d"/> +<a href="neorv32__cpu_8c.html#a387aa304770b05594c4acca128a60a75"/> +<a href="neorv32__cpu_8c.html#a5c3cf52498abb3cf3c14a724b287ecf0"/> +<a href="neorv32__cpu_8c.html#a70f49b80322aa457f29f7671f94a183d"/> +<a href="neorv32__cpu_8c.html#a8346fb926f84f3d7bccbb4741105505f"/> +<a href="neorv32__cpu_8c.html#aa458a700619b2f7666cfcffe02ec2e2c"/> +<a href="neorv32__cpu_8c.html#aa9027535b13d9f9325e734997fc4a137"/> +<a href="neorv32__cpu_8c.html#ac3fd7dc7cd1e0a08225c41820af27f92"/> +<a href="neorv32__cpu_8c.html#aca49efb45d3808ad76cf65ba291f546d"/> +<a href="neorv32__cpu_8c.html#ad4f8160f4821b6691e9682ef60c7cd7b"/> +<a href="neorv32__cpu_8c.html#adb3ae542bbb0ddf9f562a4e42bc24d10"/> +<a href="neorv32__cpu_8h.html"/> +<a href="neorv32__cpu_8h.html#a173bb06b4ae9c8964469068dafcb7b0e"/> +<a href="neorv32__cpu_8h.html#a232d0290c459dc790d989fcdc4d121bf"/> +<a href="neorv32__cpu_8h.html#a25a09de97229aac839ef6f74da604acf"/> +<a href="neorv32__cpu_8h.html#a27dd614bc270dfa30ed73323ebda2d2d"/> +<a href="neorv32__cpu_8h.html#a31f30f6d6542758cd3073a9939b07653"/> +<a href="neorv32__cpu_8h.html#a31f903596ab1bcddea79fdf608eaa666"/> +<a href="neorv32__cpu_8h.html#a32544cd652debb4affb308806a115d5b"/> +<a href="neorv32__cpu_8h.html#a387aa304770b05594c4acca128a60a75"/> +<a href="neorv32__cpu_8h.html#a3b6cf445e2136486564ef3d3473c91dd"/> +<a href="neorv32__cpu_8h.html#a5c3cf52498abb3cf3c14a724b287ecf0"/> +<a href="neorv32__cpu_8h.html#a70f49b80322aa457f29f7671f94a183d"/> +<a href="neorv32__cpu_8h.html#a769ca4556213619f6fea4ff6bfb979dd"/> +<a href="neorv32__cpu_8h.html#a8346fb926f84f3d7bccbb4741105505f"/> +<a href="neorv32__cpu_8h.html#aa458a700619b2f7666cfcffe02ec2e2c"/> +<a href="neorv32__cpu_8h.html#aa9027535b13d9f9325e734997fc4a137"/> +<a href="neorv32__cpu_8h.html#aab7a9f9cf608599f2b124dd499cb8418"/> +<a href="neorv32__cpu_8h.html#ab8f533ddbc3a3af5e3bca2287ac10122"/> +<a href="neorv32__cpu_8h.html#ac3fd7dc7cd1e0a08225c41820af27f92"/> +<a href="neorv32__cpu_8h.html#ac54ec9b59e17c7cd9b9907abee82ce95"/> +<a href="neorv32__cpu_8h.html#aca49efb45d3808ad76cf65ba291f546d"/> +<a href="neorv32__cpu_8h.html#ad4f8160f4821b6691e9682ef60c7cd7b"/> +<a href="neorv32__cpu_8h.html#adb3ae542bbb0ddf9f562a4e42bc24d10"/> +<a href="neorv32__cpu_8h.html#ae9c8b6c681536ddea3aff0e63f30ef70"/> +<a href="neorv32__cpu_8h.html#aeec8ad2a82885c40a307346f9003483e"/> +<a href="neorv32__cpu_8h.html#afb5ef6e0b1a3e26570edfd8379490455"/> +<a href="neorv32__cpu__amo_8c.html"/> +<a href="neorv32__cpu__amo_8c.html#a1281e18b95cd525073e1123c5d04e9e2"/> +<a href="neorv32__cpu__amo_8c.html#a31a6a3b5a33655f4a7b27d4c85b75f07"/> +<a href="neorv32__cpu__amo_8c.html#a62cf36637d7a04079228acecfe8a5cf3"/> +<a href="neorv32__cpu__amo_8c.html#a65b67f48356fa9b30596485473311377"/> +<a href="neorv32__cpu__amo_8c.html#a8e383fb8825538b5579d5ce075830697"/> +<a href="neorv32__cpu__amo_8c.html#a9b4540dadbfd5da907117570d8006e36"/> +<a href="neorv32__cpu__amo_8c.html#aad0d96e61bacc3af13ff471dd44ca8e9"/> +<a href="neorv32__cpu__amo_8c.html#ada27ec89b2530f7b7f14de947cc82bf9"/> +<a href="neorv32__cpu__amo_8c.html#adc80b1f2b3a4e70fee44c0edb08fc402"/> +<a href="neorv32__cpu__amo_8h.html"/> +<a href="neorv32__cpu__amo_8h.html#a1281e18b95cd525073e1123c5d04e9e2"/> +<a href="neorv32__cpu__amo_8h.html#a31a6a3b5a33655f4a7b27d4c85b75f07"/> +<a href="neorv32__cpu__amo_8h.html#a5e73eaa273c41a06972e862976fda53c"/> +<a href="neorv32__cpu__amo_8h.html#a62cf36637d7a04079228acecfe8a5cf3"/> +<a href="neorv32__cpu__amo_8h.html#a65b67f48356fa9b30596485473311377"/> +<a href="neorv32__cpu__amo_8h.html#a8e383fb8825538b5579d5ce075830697"/> +<a href="neorv32__cpu__amo_8h.html#a9b4540dadbfd5da907117570d8006e36"/> +<a href="neorv32__cpu__amo_8h.html#aad0d96e61bacc3af13ff471dd44ca8e9"/> +<a href="neorv32__cpu__amo_8h.html#ad4437bbc61a4e40d7d01dfe9459f6639"/> +<a href="neorv32__cpu__amo_8h.html#ada27ec89b2530f7b7f14de947cc82bf9"/> +<a href="neorv32__cpu__amo_8h.html#adc80b1f2b3a4e70fee44c0edb08fc402"/> +<a href="neorv32__cpu__cfu_8c.html"/> +<a href="neorv32__cpu__cfu_8c.html#a13019b8afa1a80c0e5c24eb4d72e75c1"/> +<a href="neorv32__cpu__cfu_8h.html"/> +<a href="neorv32__cpu__cfu_8h.html#a046a640f7f4a7b1b99a824fb325e2079"/> +<a href="neorv32__cpu__cfu_8h.html#a13019b8afa1a80c0e5c24eb4d72e75c1"/> +<a href="neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c"/> +<a href="neorv32__cpu__csr_8h.html"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a"/> +<a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a"/> +<a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfe"/> +<a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5"/> +<a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91"/> +<a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914"/> +<a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5"/> +<a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640"/> +<a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b"/> +<a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd"/> +<a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2"/> +<a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6"/> +<a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4"/> +<a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27"/> +<a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580"/> +<a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e"/> +<a href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500"/> +<a href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a3d0c8ff6ba2c557cb5b5d353bdb95790"/> +<a href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a97e36c94b71fa2f9a805bbe47b0bc1b5"/> +<a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485"/> +<a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44"/> +<a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0"/> +<a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34"/> +<a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d"/> +<a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56"/> +<a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97"/> +<a href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5"/> +<a href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4"/> +<a href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1"/> +<a href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892"/> +<a href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfe"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e"/> +<a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752"/> +<a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930ea"/> +<a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14"/> +<a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4"/> +<a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f"/> +<a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1"/> +<a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6"/> +<a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b"/> +<a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26"/> +<a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a216ec44d5be3b158acb7e033e352bad1"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a2649bee3397c74ada7b72677308f38c0"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a31788af612f04bc6b2a2bd15c1fb63c1"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a34519a66e749d63dc5bc7c145c297b64"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a35543f2ac5cde6e142bca6791b7b36b1"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a43213190abb77304a78c15196c90a044"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a469e8e449f0e442df531c8cf2c4f35c5"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48f1de7f79a0633644ae02c463d49375"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5e4bf05830b66410bbf2ef2c68e5fd18"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5fe8e591901e0fd7ba6706c70e9c76ec"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a815cbe0149cba2a69025f6bec9946a85"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac9e87153c096d656b40cb7abdf3afd55"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad7e7454a30c82c3d91acbc8c259e8c25"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adb26c1e5bf6ae112625621dddd331735"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adf45adc0bcbec0c1ffa944099257a947"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adfc9122d93a71bf6df178022a52d22c4"/> +<a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0"/> +<a href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204b"/> +<a href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b"/> +<a href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165"/> +<a href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e"/> +<a href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6"/> +<a href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819"/> +<a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830c"/> +<a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec"/> +<a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193"/> +<a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b"/> +<a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca"/> +<a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa"/> +<a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138"/> +<a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb"/> +<a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad"/> +<a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc"/> +<a href="neorv32__crc_8c.html"/> +<a href="neorv32__crc_8c.html#a444b88f1536f65acc301fb19eddcf227"/> +<a href="neorv32__crc_8c.html#a4ff5f7b91e9f668535ed33b6382ae623"/> +<a href="neorv32__crc_8c.html#a9243006e6cc94c03450646d26a7289b2"/> +<a href="neorv32__crc_8c.html#aa46c647317752f8bb6d5836d4876a704"/> +<a href="neorv32__crc_8c.html#ad9d50c76a485160667d486bce32cbeb8"/> +<a href="neorv32__crc_8h.html"/> +<a href="neorv32__crc_8h.html#a110962d2b370f9d7997e459d9fd34271"/> +<a href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447"/> +<a href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa"/> +<a href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a"/> +<a href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f"/> +<a href="neorv32__crc_8h.html#a444b88f1536f65acc301fb19eddcf227"/> +<a href="neorv32__crc_8h.html#a4ff5f7b91e9f668535ed33b6382ae623"/> +<a href="neorv32__crc_8h.html#a9243006e6cc94c03450646d26a7289b2"/> +<a href="neorv32__crc_8h.html#aa46c647317752f8bb6d5836d4876a704"/> +<a href="neorv32__crc_8h.html#ad9d50c76a485160667d486bce32cbeb8"/> +<a href="neorv32__dma_8h.html"/> +<a href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74b"/> +<a href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8"/> +<a href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f"/> +<a href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d"/> +<a href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492"/> +<a href="neorv32__dma_8h.html#a0dcb61a0e0d2b45beb7818015adc8639"/> +<a href="neorv32__dma_8h.html#a13260c3252f0375d8982590d270d7dfd"/> +<a href="neorv32__dma_8h.html#a13a16ba8d6daf9c82312bf4d392d15a8"/> +<a href="neorv32__dma_8h.html#a18fb7faa0a35f562821ca854d7c648b4"/> +<a href="neorv32__dma_8h.html#a2c7257567ccdb7a986f5ef7c74d3917c"/> +<a href="neorv32__dma_8h.html#a2ce0d31e04604b2523135d52a877febf"/> +<a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9"/> +<a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802"/> +<a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5"/> +<a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec"/> +<a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd"/> +<a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450"/> +<a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da"/> +<a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2"/> +<a href="neorv32__dma_8h.html#a5e01d4454c97eb8e4ecd1455090bbfa9"/> +<a href="neorv32__dma_8h.html#a61caa2602c6b148af55d990e3c0ae6be"/> +<a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4"/> +<a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc"/> +<a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a"/> +<a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96"/> +<a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b"/> +<a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838"/> +<a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb"/> +<a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9"/> +<a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00"/> +<a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe"/> +<a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101"/> +<a href="neorv32__dma_8h.html#a6a0ce532aad39e6489e9d52bcb6f4cd2"/> +<a href="neorv32__dma_8h.html#a6df244028455cf7f8d4cf1520c4670a7"/> +<a href="neorv32__dma_8h.html#a6ebd1595ee6fa0e6cbfbd1ce7476f18e"/> +<a href="neorv32__dma_8h.html#a8f37adfa07050b0a1cb8430c9ce1fcc2"/> +<a href="neorv32__dma_8h.html#aa116f9714174abbe8a3583e441fee24b"/> +<a href="neorv32__dma_8h.html#ac3b72447e8a132faf26577ac714b8284"/> +<a href="neorv32__dma_8h.html#acc081d58b53d1eddd2bff35b128d7da2"/> +<a href="neorv32__dma_8h.html#adfecb3debff251070e4f6eb809412129"/> +<a href="neorv32__dma_8h.html#ae380022d8b8fb70da91f0892f2bc32c8"/> +<a href="neorv32__dma_8h.html#aeb63f99217f14d1ddde35c1f6c104e72"/> +<a href="neorv32__dma_8h.html#afc8cc32f7d80d0f5ab33b2f1ecf77956"/> +<a href="neorv32__gpio_8c.html"/> +<a href="neorv32__gpio_8c.html#a1958850fc1689eae9ddfcaa4a7513400"/> +<a href="neorv32__gpio_8c.html#a210529f789779387d3f014e6253e803f"/> +<a href="neorv32__gpio_8c.html#a41d39a41ba5879eb85d3ed4481fcff81"/> +<a href="neorv32__gpio_8c.html#a60fd0830d634f0c1f784d815384665cb"/> +<a href="neorv32__gpio_8c.html#a8dc7846945e4609fc96d81caee99ac00"/> +<a href="neorv32__gpio_8c.html#ac42379f2fb5ca0bb63850d7957852b84"/> +<a href="neorv32__gpio_8c.html#afa3ee54aca47ff35f706b627ac66e95a"/> +<a href="neorv32__gpio_8h.html"/> +<a href="neorv32__gpio_8h.html#a1958850fc1689eae9ddfcaa4a7513400"/> +<a href="neorv32__gpio_8h.html#a1e35bbf26b9d1aa5373af0b9468eb445"/> +<a href="neorv32__gpio_8h.html#a210529f789779387d3f014e6253e803f"/> +<a href="neorv32__gpio_8h.html#a41d39a41ba5879eb85d3ed4481fcff81"/> +<a href="neorv32__gpio_8h.html#a60fd0830d634f0c1f784d815384665cb"/> +<a href="neorv32__gpio_8h.html#a789222709485cd8467aad5eddf69d2df"/> +<a href="neorv32__gpio_8h.html#ac42379f2fb5ca0bb63850d7957852b84"/> +<a href="neorv32__gpio_8h.html#afa3ee54aca47ff35f706b627ac66e95a"/> +<a href="neorv32__gptmr_8c.html"/> +<a href="neorv32__gptmr_8c.html#a59e684348835772a7e83446e478d4a13"/> +<a href="neorv32__gptmr_8c.html#a6aa27efd2163eebf8fc49fe1c591708f"/> +<a href="neorv32__gptmr_8c.html#a7c9bc6d28ad12611b08fa2867c2db874"/> +<a href="neorv32__gptmr_8c.html#ac73aa4e41a064abb4ca554a389888e67"/> +<a href="neorv32__gptmr_8c.html#ae79a08c52ad3e83f9c4393acfabf035f"/> +<a href="neorv32__gptmr_8h.html"/> +<a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988"/> +<a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833"/> +<a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298"/> +<a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a"/> +<a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43"/> +<a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38"/> +<a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90"/> +<a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3"/> +<a href="neorv32__gptmr_8h.html#a59e684348835772a7e83446e478d4a13"/> +<a href="neorv32__gptmr_8h.html#a6aa27efd2163eebf8fc49fe1c591708f"/> +<a href="neorv32__gptmr_8h.html#a7c9bc6d28ad12611b08fa2867c2db874"/> +<a href="neorv32__gptmr_8h.html#a9e047791588ff21fc4dc1b06456bdfd2"/> +<a href="neorv32__gptmr_8h.html#ac73aa4e41a064abb4ca554a389888e67"/> +<a href="neorv32__gptmr_8h.html#ae79a08c52ad3e83f9c4393acfabf035f"/> +<a href="neorv32__intrinsics_8h.html"/> +<a href="neorv32__legacy_8h.html"/> +<a href="neorv32__neoled_8c.html"/> +<a href="neorv32__neoled_8c.html#a3ee5b3602da3ae982628e2802587e451"/> +<a href="neorv32__neoled_8c.html#a484fcc6797b6d9cef86192e9593ec33d"/> +<a href="neorv32__neoled_8c.html#a57398d92fb4fc735b33e89271726e1d6"/> +<a href="neorv32__neoled_8c.html#a5aa9eb4dd3655fa08e1b61eb0f36589c"/> +<a href="neorv32__neoled_8c.html#a8181d5c1d15b7b5eecdc018341ac14fa"/> +<a href="neorv32__neoled_8c.html#a81c2c49198531fb6551eb288e29c084e"/> +<a href="neorv32__neoled_8c.html#a8daaa97a85e0eb94d4a38eb2119ea183"/> +<a href="neorv32__neoled_8c.html#abf7882b949373df0774fc9cc20c2bd2e"/> +<a href="neorv32__neoled_8c.html#ac6e94602453779a2791bd0734465f5a3"/> +<a href="neorv32__neoled_8c.html#adade69c7368c28180b9992d5f0ab6031"/> +<a href="neorv32__neoled_8h.html"/> +<a href="neorv32__neoled_8h.html#a3ccc1097bc70f92235d693b612fa994a"/> +<a href="neorv32__neoled_8h.html#a3ee5b3602da3ae982628e2802587e451"/> +<a href="neorv32__neoled_8h.html#a484fcc6797b6d9cef86192e9593ec33d"/> +<a href="neorv32__neoled_8h.html#a57398d92fb4fc735b33e89271726e1d6"/> +<a href="neorv32__neoled_8h.html#a5aa9eb4dd3655fa08e1b61eb0f36589c"/> +<a href="neorv32__neoled_8h.html#a8181d5c1d15b7b5eecdc018341ac14fa"/> +<a href="neorv32__neoled_8h.html#a81c2c49198531fb6551eb288e29c084e"/> +<a href="neorv32__neoled_8h.html#a8daaa97a85e0eb94d4a38eb2119ea183"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368"/> +<a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7"/> +<a href="neorv32__neoled_8h.html#abf7882b949373df0774fc9cc20c2bd2e"/> +<a href="neorv32__neoled_8h.html#ac6e94602453779a2791bd0734465f5a3"/> +<a href="neorv32__neoled_8h.html#ad2a318bd59be12de34797ced0f7743c6"/> +<a href="neorv32__neoled_8h.html#adade69c7368c28180b9992d5f0ab6031"/> +<a href="neorv32__newlib_8c.html"/> +<a href="neorv32__onewire_8c.html"/> +<a href="neorv32__onewire_8c.html#a01b6236b89c045ddbd58398361c6ee0a"/> +<a href="neorv32__onewire_8c.html#a01ddba7a9148be542b5c52e39e6f46d6"/> +<a href="neorv32__onewire_8c.html#a05e220711255e82460bc92010199eb53"/> +<a href="neorv32__onewire_8c.html#a122531c7154126858c46d89e003d838d"/> +<a href="neorv32__onewire_8c.html#a224005037387484dfa510a1355a62828"/> +<a href="neorv32__onewire_8c.html#a23b96b68c3214b188525eb102cafb620"/> +<a href="neorv32__onewire_8c.html#a3072f7167831edc95dee44ecfef6a0d4"/> +<a href="neorv32__onewire_8c.html#a32128bfcea4d8c8e31b0b59498e59798"/> +<a href="neorv32__onewire_8c.html#a43eb8a08eeaa83e3d7e9aa5058a4269f"/> +<a href="neorv32__onewire_8c.html#a49d0a2a386f129fd2f4fed880bba31d4"/> +<a href="neorv32__onewire_8c.html#a4c7eec15c095c97c939163f631f51dab"/> +<a href="neorv32__onewire_8c.html#a6f7b6690a2437e0b574a8a9a23dc0eaa"/> +<a href="neorv32__onewire_8c.html#a7510e65a26aeefb40e994fd00667537e"/> +<a href="neorv32__onewire_8c.html#a7e329eeb1cd98301a53b271a6a102385"/> +<a href="neorv32__onewire_8c.html#a865e5c381fd3c27c6981a589a5124d1e"/> +<a href="neorv32__onewire_8c.html#aa4a19d2d8dc3b3401307615aec201190"/> +<a href="neorv32__onewire_8c.html#aace8398062b759256a516e6245aced83"/> +<a href="neorv32__onewire_8c.html#ac78557c77482b59394677f42fda4fdf1"/> +<a href="neorv32__onewire_8c.html#ace8b7cf697b068b6b51676d84dec5960"/> +<a href="neorv32__onewire_8c.html#ae6fe766e7decf18869cfb86bba741ca4"/> +<a href="neorv32__onewire_8c.html#af8ca6be495176797b7da3857e2f794f9"/> +<a href="neorv32__onewire_8h.html"/> +<a href="neorv32__onewire_8h.html#a01b6236b89c045ddbd58398361c6ee0a"/> +<a href="neorv32__onewire_8h.html#a01ddba7a9148be542b5c52e39e6f46d6"/> +<a href="neorv32__onewire_8h.html#a05e220711255e82460bc92010199eb53"/> +<a href="neorv32__onewire_8h.html#a122531c7154126858c46d89e003d838d"/> +<a href="neorv32__onewire_8h.html#a224005037387484dfa510a1355a62828"/> +<a href="neorv32__onewire_8h.html#a23b96b68c3214b188525eb102cafb620"/> +<a href="neorv32__onewire_8h.html#a3072f7167831edc95dee44ecfef6a0d4"/> +<a href="neorv32__onewire_8h.html#a32128bfcea4d8c8e31b0b59498e59798"/> +<a href="neorv32__onewire_8h.html#a43eb8a08eeaa83e3d7e9aa5058a4269f"/> +<a href="neorv32__onewire_8h.html#a49d0a2a386f129fd2f4fed880bba31d4"/> +<a href="neorv32__onewire_8h.html#a4c7eec15c095c97c939163f631f51dab"/> +<a href="neorv32__onewire_8h.html#a6f119e35d7ac01f110987508ff3becc9"/> +<a href="neorv32__onewire_8h.html#a6f7b6690a2437e0b574a8a9a23dc0eaa"/> +<a href="neorv32__onewire_8h.html#a7510e65a26aeefb40e994fd00667537e"/> +<a href="neorv32__onewire_8h.html#a7e329eeb1cd98301a53b271a6a102385"/> +<a href="neorv32__onewire_8h.html#a865e5c381fd3c27c6981a589a5124d1e"/> +<a href="neorv32__onewire_8h.html#aa4a19d2d8dc3b3401307615aec201190"/> +<a href="neorv32__onewire_8h.html#aace8398062b759256a516e6245aced83"/> +<a href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26"/> +<a href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a035b3e4021a1959a7cbd8954e838c324"/> +<a href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a36fe4def67f02a3d06dbe47231d6f21d"/> +<a href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aa4cd11972bbc09f7a7eab8e129b280b4"/> +<a href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26ac095ac82ef2be6e67b5c9f6b9f5c4379"/> +<a href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aeb1f95a9b6f3b4a295578e874a1ad5d0"/> +<a href="neorv32__onewire_8h.html#ac78557c77482b59394677f42fda4fdf1"/> +<a href="neorv32__onewire_8h.html#ace8b7cf697b068b6b51676d84dec5960"/> +<a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831"/> +<a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a101cd15b58450d9740ab92bb5c40ba63"/> +<a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a3903370331c6ae15cd37381bc64b6016"/> +<a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a5db9e3557d447c62039ad3437caa9884"/> +<a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a74d1259bee8e3e1d18cc69a2d8ce4749"/> +<a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40"/> +<a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9"/> +<a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da"/> +<a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393"/> +<a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5"/> +<a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831adfe5373712e0c02da3aa5dfd8ca5e51e"/> +<a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74"/> +<a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6"/> +<a href="neorv32__onewire_8h.html#ae6fe766e7decf18869cfb86bba741ca4"/> +<a href="neorv32__onewire_8h.html#af8ca6be495176797b7da3857e2f794f9"/> +<a href="neorv32__pwm_8c.html"/> +<a href="neorv32__pwm_8c.html#a43d8a47dc79ebac24c8a7d2d8247d2a5"/> +<a href="neorv32__pwm_8c.html#a518bad33405039fadd668d16276acb14"/> +<a href="neorv32__pwm_8c.html#a784672443179a7c1e604f23854e001f4"/> +<a href="neorv32__pwm_8c.html#a7bc39afa807b7c2e06d6fd8b4dc7506c"/> +<a href="neorv32__pwm_8c.html#af00e67388ef9186e051e518883ad9a40"/> +<a href="neorv32__pwm_8c.html#afb12c860b2f7fa6cd1e069ea540da41c"/> +<a href="neorv32__pwm_8h.html"/> +<a href="neorv32__pwm_8h.html#a43d8a47dc79ebac24c8a7d2d8247d2a5"/> +<a href="neorv32__pwm_8h.html#a518bad33405039fadd668d16276acb14"/> +<a href="neorv32__pwm_8h.html#a784672443179a7c1e604f23854e001f4"/> +<a href="neorv32__pwm_8h.html#a7bc39afa807b7c2e06d6fd8b4dc7506c"/> +<a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175"/> +<a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a2b766bfa9653705025b745e0809c432a"/> +<a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a6f741e102b7e15e946714360e81f4bb2"/> +<a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a9aa8249716b15c92368c93b36bf7db43"/> +<a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aa100b419699cd3c6787a9168a3ffec3d"/> +<a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175acc7e31e4b3f0e7ab0a0306a107109b4f"/> +<a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aefe2211fe39acffb40ca738639b3d5f5"/> +<a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175af5d9dcb5740c39cfe8f9bfb5c1b66341"/> +<a href="neorv32__pwm_8h.html#ad4cb534c29e26fa56c10bef7afab8f51"/> +<a href="neorv32__pwm_8h.html#af00e67388ef9186e051e518883ad9a40"/> +<a href="neorv32__pwm_8h.html#afb12c860b2f7fa6cd1e069ea540da41c"/> +<a href="neorv32__rte_8c.html"/> +<a href="neorv32__rte_8c.html#a01bf6c01f5a8cda2132b9ac98824edc1"/> +<a href="neorv32__rte_8c.html#a05e8304963e402d228a76aff1868771c"/> +<a href="neorv32__rte_8c.html#a10fde6229bf391e46148405616404a65"/> +<a href="neorv32__rte_8c.html#a16df1b48f2e1258a51d3bb7f49531cf3"/> +<a href="neorv32__rte_8c.html#a2c8272b4628edddb943bcfad829b561a"/> +<a href="neorv32__rte_8c.html#a2cf31cfa569a03a20d554b6400c4c5e2"/> +<a href="neorv32__rte_8c.html#a343e1913bdc37db9b168fb4def0e6170"/> +<a href="neorv32__rte_8c.html#a65422bb44f1e7bc011e9bfc5d8451ebe"/> +<a href="neorv32__rte_8c.html#a65e71acc8916b42b59dc2cf6bba30ba3"/> +<a href="neorv32__rte_8c.html#aa442c0e39f9156a131c3432fda587692"/> +<a href="neorv32__rte_8c.html#aad6f5256a265807c4cde163bcba8dae9"/> +<a href="neorv32__rte_8c.html#acd96aa73eebe6d4bbc9aabe1230cbabc"/> +<a href="neorv32__rte_8c.html#ad6ab21f2218a3e88e0cc50d0643dafad"/> +<a href="neorv32__rte_8c.html#ae13a9c1fd59ad71afb0d47cf9a0b303e"/> +<a href="neorv32__rte_8h.html"/> +<a href="neorv32__rte_8h.html#a05e8304963e402d228a76aff1868771c"/> +<a href="neorv32__rte_8h.html#a10fde6229bf391e46148405616404a65"/> +<a href="neorv32__rte_8h.html#a16df1b48f2e1258a51d3bb7f49531cf3"/> +<a href="neorv32__rte_8h.html#a2cf31cfa569a03a20d554b6400c4c5e2"/> +<a href="neorv32__rte_8h.html#a343e1913bdc37db9b168fb4def0e6170"/> +<a href="neorv32__rte_8h.html#a65422bb44f1e7bc011e9bfc5d8451ebe"/> +<a href="neorv32__rte_8h.html#a65e71acc8916b42b59dc2cf6bba30ba3"/> +<a href="neorv32__rte_8h.html#aa442c0e39f9156a131c3432fda587692"/> +<a href="neorv32__rte_8h.html#aad6f5256a265807c4cde163bcba8dae9"/> +<a href="neorv32__rte_8h.html#acd96aa73eebe6d4bbc9aabe1230cbabc"/> +<a href="neorv32__rte_8h.html#ad14a1ca41df1e9300bfd01aef07dce59"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9"/> +<a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81"/> +<a href="neorv32__rte_8h.html#ad6ab21f2218a3e88e0cc50d0643dafad"/> +<a href="neorv32__rte_8h.html#ae13a9c1fd59ad71afb0d47cf9a0b303e"/> +<a href="neorv32__sdi_8c.html"/> +<a href="neorv32__sdi_8c.html#a2636cf1959ce1f3eb4b77c00ca2e2707"/> +<a href="neorv32__sdi_8c.html#a3246118dc0d7e1f61bc2485bbab44149"/> +<a href="neorv32__sdi_8c.html#a4d54ce22ec97eb83da118439576e3277"/> +<a href="neorv32__sdi_8c.html#a51412722efdb18cd09667622b215e825"/> +<a href="neorv32__sdi_8c.html#a5d68b9b1642baf3519076e55a22a8f61"/> +<a href="neorv32__sdi_8c.html#a7390faeb01b4de3dd5ac18335736b90c"/> +<a href="neorv32__sdi_8c.html#a8bd54bca8aea6147651c8115ee616f54"/> +<a href="neorv32__sdi_8c.html#ac7a262d16c42bbac27723ff779545569"/> +<a href="neorv32__sdi_8h.html"/> +<a href="neorv32__sdi_8h.html#a2636cf1959ce1f3eb4b77c00ca2e2707"/> +<a href="neorv32__sdi_8h.html#a3246118dc0d7e1f61bc2485bbab44149"/> +<a href="neorv32__sdi_8h.html#a4d54ce22ec97eb83da118439576e3277"/> +<a href="neorv32__sdi_8h.html#a51412722efdb18cd09667622b215e825"/> +<a href="neorv32__sdi_8h.html#a5d68b9b1642baf3519076e55a22a8f61"/> +<a href="neorv32__sdi_8h.html#a7390faeb01b4de3dd5ac18335736b90c"/> +<a href="neorv32__sdi_8h.html#a8bd54bca8aea6147651c8115ee616f54"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281"/> +<a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809"/> +<a href="neorv32__sdi_8h.html#ac7a262d16c42bbac27723ff779545569"/> +<a href="neorv32__sdi_8h.html#afd0921633d6523d9b7235055e9bbf928"/> +<a href="neorv32__slink_8c.html"/> +<a href="neorv32__slink_8c.html#a1a9269f42552a849450aecd99f7ec7a0"/> +<a href="neorv32__slink_8c.html#a2136bc0b12ee2e6703e84a6417a1e8eb"/> +<a href="neorv32__slink_8c.html#a3e02c558548c1c6178c49adee9a007f7"/> +<a href="neorv32__slink_8c.html#a575c7663ca0bd07c95b1d45152a3ddf8"/> +<a href="neorv32__slink_8c.html#a8f0b4a768f53a72a5c16034e160ce321"/> +<a href="neorv32__slink_8c.html#aaa9fdb9cbfa7888e92790ab65431d21d"/> +<a href="neorv32__slink_8c.html#aaf0d0d1b890353d4f3bf49450ec2fad2"/> +<a href="neorv32__slink_8c.html#aaf0f7bc96b797e819ccaae94292d9ddb"/> +<a href="neorv32__slink_8c.html#ac7484e9e3848f94efe016dd064f6a57f"/> +<a href="neorv32__slink_8c.html#ace319592c12dc6a0fe1b7dd66bdf9284"/> +<a href="neorv32__slink_8c.html#ad0252e7ae915e5840cd17e8c52e94a1c"/> +<a href="neorv32__slink_8c.html#ad149fea81e6d28f77450b8ba50cf706e"/> +<a href="neorv32__slink_8c.html#ad57fc0941fe32e8bf423ce3e57e2c10a"/> +<a href="neorv32__slink_8c.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc"/> +<a href="neorv32__slink_8h.html"/> +<a href="neorv32__slink_8h.html#a1a9269f42552a849450aecd99f7ec7a0"/> +<a href="neorv32__slink_8h.html#a2136bc0b12ee2e6703e84a6417a1e8eb"/> +<a href="neorv32__slink_8h.html#a3e02c558548c1c6178c49adee9a007f7"/> +<a href="neorv32__slink_8h.html#a575c7663ca0bd07c95b1d45152a3ddf8"/> +<a href="neorv32__slink_8h.html#a6380d894432de119a20993096db534df"/> +<a href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bf"/> +<a href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211"/> +<a href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c"/> +<a href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9"/> +<a href="neorv32__slink_8h.html#a8f0b4a768f53a72a5c16034e160ce321"/> +<a href="neorv32__slink_8h.html#aaa9fdb9cbfa7888e92790ab65431d21d"/> +<a href="neorv32__slink_8h.html#aaf0d0d1b890353d4f3bf49450ec2fad2"/> +<a href="neorv32__slink_8h.html#aaf0f7bc96b797e819ccaae94292d9ddb"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee"/> +<a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392"/> +<a href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45"/> +<a href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2"/> +<a href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983"/> +<a href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1"/> +<a href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80"/> +<a href="neorv32__slink_8h.html#ac7484e9e3848f94efe016dd064f6a57f"/> +<a href="neorv32__slink_8h.html#ace319592c12dc6a0fe1b7dd66bdf9284"/> +<a href="neorv32__slink_8h.html#ad0252e7ae915e5840cd17e8c52e94a1c"/> +<a href="neorv32__slink_8h.html#ad149fea81e6d28f77450b8ba50cf706e"/> +<a href="neorv32__slink_8h.html#ad57fc0941fe32e8bf423ce3e57e2c10a"/> +<a href="neorv32__slink_8h.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc"/> +<a href="neorv32__spi_8c.html"/> +<a href="neorv32__spi_8c.html#a01c6b63d7349447e2277f2649c3c89f2"/> +<a href="neorv32__spi_8c.html#a332c7a1be511812ac0a2b102c165398a"/> +<a href="neorv32__spi_8c.html#a67e9717635e272bc0e04408135a2f04d"/> +<a href="neorv32__spi_8c.html#a7266ee439d0ec11c5cedd4bf1a258272"/> +<a href="neorv32__spi_8c.html#a737961d040ac09567350f89034f9e122"/> +<a href="neorv32__spi_8c.html#a7af79950eefc26e67a89bde02f255532"/> +<a href="neorv32__spi_8c.html#a7d8124d986b69210081df6f1aa653552"/> +<a href="neorv32__spi_8c.html#a817dd9a38bfceb2048e40874a83ba169"/> +<a href="neorv32__spi_8c.html#a82bb4d4c222b2bdc57e917c348481501"/> +<a href="neorv32__spi_8c.html#a8fa25d144ccb20a2faf0450c8dddd16e"/> +<a href="neorv32__spi_8c.html#a97b5536347a27b053f071ba49071ba6f"/> +<a href="neorv32__spi_8c.html#aa10ec90ccba6325eeeebb8f6f298d30c"/> +<a href="neorv32__spi_8c.html#aad66fa8f8d1a92d4f355de7579bfbfd2"/> +<a href="neorv32__spi_8c.html#acf131faa3ad970c19a3cd8a47cb54f65"/> +<a href="neorv32__spi_8c.html#ad8dd1b5a85a9daef4c8c21c9990884c1"/> +<a href="neorv32__spi_8c.html#ae1c4da7e4dc2e42b04d7187f684f142c"/> +<a href="neorv32__spi_8c.html#aec8583e988789e846d21c2a35e6b06e7"/> +<a href="neorv32__spi_8h.html"/> +<a href="neorv32__spi_8h.html#a01c6b63d7349447e2277f2649c3c89f2"/> +<a href="neorv32__spi_8h.html#a332c7a1be511812ac0a2b102c165398a"/> +<a href="neorv32__spi_8h.html#a5f3afc4e268670c54d90df67fa38ca22"/> +<a href="neorv32__spi_8h.html#a67e9717635e272bc0e04408135a2f04d"/> +<a href="neorv32__spi_8h.html#a7266ee439d0ec11c5cedd4bf1a258272"/> +<a href="neorv32__spi_8h.html#a737961d040ac09567350f89034f9e122"/> +<a href="neorv32__spi_8h.html#a7af79950eefc26e67a89bde02f255532"/> +<a href="neorv32__spi_8h.html#a7d8124d986b69210081df6f1aa653552"/> +<a href="neorv32__spi_8h.html#a817dd9a38bfceb2048e40874a83ba169"/> +<a href="neorv32__spi_8h.html#a82bb4d4c222b2bdc57e917c348481501"/> +<a href="neorv32__spi_8h.html#a8fa25d144ccb20a2faf0450c8dddd16e"/> +<a href="neorv32__spi_8h.html#a97b5536347a27b053f071ba49071ba6f"/> +<a href="neorv32__spi_8h.html#aa10ec90ccba6325eeeebb8f6f298d30c"/> +<a href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8"/> +<a href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600"/> +<a href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2"/> +<a href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6"/> +<a href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4"/> +<a href="neorv32__spi_8h.html#aad66fa8f8d1a92d4f355de7579bfbfd2"/> +<a href="neorv32__spi_8h.html#acf131faa3ad970c19a3cd8a47cb54f65"/> +<a href="neorv32__spi_8h.html#ad8dd1b5a85a9daef4c8c21c9990884c1"/> +<a href="neorv32__spi_8h.html#ae1c4da7e4dc2e42b04d7187f684f142c"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3b"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f"/> +<a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622"/> +<a href="neorv32__spi_8h.html#aec8583e988789e846d21c2a35e6b06e7"/> +<a href="neorv32__spi__irq_8c.html"/> +<a href="neorv32__spi__irq_8c.html#a1863e19932bc6a79f2ca27d23eb74ef5"/> +<a href="neorv32__spi__irq_8c.html#a1f44ed849415d8e1d659c0485762c485"/> +<a href="neorv32__spi__irq_8c.html#a4aa4746fd210ecc0c3614089a6951ddf"/> +<a href="neorv32__spi__irq_8c.html#aa641816bb302df497664aa21ea69ed16"/> +<a href="neorv32__spi__irq_8h.html"/> +<a href="neorv32__spi__irq_8h.html#a1863e19932bc6a79f2ca27d23eb74ef5"/> +<a href="neorv32__spi__irq_8h.html#a1f44ed849415d8e1d659c0485762c485"/> +<a href="neorv32__spi__irq_8h.html#a4aa4746fd210ecc0c3614089a6951ddf"/> +<a href="neorv32__spi__irq_8h.html#aa641816bb302df497664aa21ea69ed16"/> +<a href="neorv32__sysinfo_8c.html"/> +<a href="neorv32__sysinfo_8c.html#a098105f8a133087f286c7010c5dec8dd"/> +<a href="neorv32__sysinfo_8c.html#a9b1ca94e298533641547ee448e1c52b3"/> +<a href="neorv32__sysinfo_8h.html"/> +<a href="neorv32__sysinfo_8h.html#a098105f8a133087f286c7010c5dec8dd"/> +<a href="neorv32__sysinfo_8h.html#a140e23434ef7e85b2b38d8ae9695227b"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1ea"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa02f235d7d2fc30c4ae3a383a631d9060"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa1bdccae04b3bd84988297c16ffbefaf2"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa3f6e68cdf6bb641902a9a6d32c1f9d9e"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa44d4d12c0395e924b8bf7dc40059bfba"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa5778928b290b3b1cba42412de4dabf96"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa73553a14d3425498be9d3802ca5f1459"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa8a2c7079b44f4255196de49d6d59afdb"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa908c60a836b03129098cb70fe2a860a1"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa90ae265a72ea53d99b474798e721c317"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaaec544d85ce3296ca9e97e833e20936e"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabb743d3ca41bf44aa6ff188ec898cfb8"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabd13283ebd48dee48aee2cff3a560fe9"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaade7f119164ff2c3800b4464a65ca247b"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaea0a88adaa9d0b5e1f4e5cca630ed6f8"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf4a91f729e16adc72c2419d9ad3807e5"/> +<a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf88eacb3ed63d5a048a554927812460b"/> +<a href="neorv32__sysinfo_8h.html#a9b1ca94e298533641547ee448e1c52b3"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a124c4c2b101008b0e3f1d82efec11c26"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a161826adba27e19186c5005626c160b8"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a164c5c9dc702b4b5fc71110fc047c7f1"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a179401244ac42bc4aac3108ca9bbb9c3"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a1c2fbb0cc03a1df2e5e8a472f3f1ca57"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a244710794e00c93e91a7f13d533cb139"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a24658727efef9747414b5da8f26de66d"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a26b25f1b47f62e98ff0920544f56b57e"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3bbac94e7f1f021f14cefa929b79e9d9"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3e50b1c24eec0f1811d5630e6dd33e93"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a44892276837b2b1bbe6ef9faa715ad5d"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4aea6c006f9c999720b1dd6166a01afe"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4cf4b1a83a4b52efbf26eace21f5ab20"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a516a2e254ae63e017caefbeed20f54e9"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a52b0ca1ef2af5e9c9a0250440b2de9e5"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a579f26ab04d4fd9af8e419df465695ca"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a58ff6e112c09f798be014fdf84385135"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a62a2337b33a2f65b6efd5c91e699c2d1"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a6899a935ae8c4aef08d828f250342e9a"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a84088f6664a3dc19041dfad5b551ced9"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a8dc202143c3b13850bccf16380466399"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a9823c2c0945997ed0d7e5eb473d81e41"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aa8ec3b39b36f13ee4f97a72700e881a8"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aaeafc2591f2cc95e9ff1fdee1e1c26e8"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ab89821e2c61ccb9db6324ee503f9dfa6"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ac943fc33a2c1c25c3ab075228b87c0ef"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ad1b8d38e3715485242756cd37b7c1fe9"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08adc914c065f5b51ae0881a6b62b54a3db"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08add6721803c9d79f1e50248927ba30e16"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ae725c2452eeb33e3230dcfb3450598e6"/> +<a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08afc964f39427cbc4090a960967eada7be"/> +<a href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5f"/> +<a href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa0f4e1e1c9320949bdacd2bc7ba6179f7"/> +<a href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa1671eeca5b3a6d1c8069658e0b7bc182"/> +<a href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa807d9e70e78e2ba3d5bfb902cc1cdc53"/> +<a href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa8a46c064e5a1339978a5fb1f41301894"/> +<a href="neorv32__trng_8c.html"/> +<a href="neorv32__trng_8c.html#a87cfe338e2ff559f96c73f729465f967"/> +<a href="neorv32__trng_8c.html#a9148bcb6a7c448c364e78fa98aac6985"/> +<a href="neorv32__trng_8c.html#aba36f08dd88f2f3e58353ae72eaa14f7"/> +<a href="neorv32__trng_8c.html#ad24e44372f4fd1ed29a6967dccab4fb0"/> +<a href="neorv32__trng_8c.html#ae838bc980e28c300dc2c9c3f34a46bb8"/> +<a href="neorv32__trng_8c.html#af0c4139ff68763623b3d658a8dd8b5ce"/> +<a href="neorv32__trng_8c.html#af64df166369d79bf744de06c8a962304"/> +<a href="neorv32__trng_8h.html"/> +<a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1a"/> +<a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d"/> +<a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52"/> +<a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5"/> +<a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5"/> +<a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac"/> +<a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aac0a6c8451985a61dc522509ded22695f"/> +<a href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2"/> +<a href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac2a7a79da7010342366ea97a2af2ebe6"/> +<a href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac73221cb67facda1db8fc9591e2f6364"/> +<a href="neorv32__trng_8h.html#a87cfe338e2ff559f96c73f729465f967"/> +<a href="neorv32__trng_8h.html#a9148bcb6a7c448c364e78fa98aac6985"/> +<a href="neorv32__trng_8h.html#a9794ff3746eb5321ad9c2bf522ea26dd"/> +<a href="neorv32__trng_8h.html#aba36f08dd88f2f3e58353ae72eaa14f7"/> +<a href="neorv32__trng_8h.html#ad24e44372f4fd1ed29a6967dccab4fb0"/> +<a href="neorv32__trng_8h.html#ae838bc980e28c300dc2c9c3f34a46bb8"/> +<a href="neorv32__trng_8h.html#af0c4139ff68763623b3d658a8dd8b5ce"/> +<a href="neorv32__trng_8h.html#af64df166369d79bf744de06c8a962304"/> +<a href="neorv32__twd_8c.html"/> +<a href="neorv32__twd_8c.html#a0cbf868493aa8931e5c5bc71e5b478a4"/> +<a href="neorv32__twd_8c.html#a138bd6bdefed2a24b746ddb550a02407"/> +<a href="neorv32__twd_8c.html#a38f7c54e2b356851f3b18011796f3902"/> +<a href="neorv32__twd_8c.html#a4d167a59c4297e0e93af5a74091bd752"/> +<a href="neorv32__twd_8c.html#a4fe22b79183dc7d07a1b84a70328a00b"/> +<a href="neorv32__twd_8c.html#a6382d25525ff9bb88e6df0802f0037e2"/> +<a href="neorv32__twd_8c.html#a6b728dd7e359c1f3ae170a4dae054a31"/> +<a href="neorv32__twd_8c.html#a7fa01904130031ab2dee77b4058061c7"/> +<a href="neorv32__twd_8c.html#a90e8f83ff4f6f05a5aef0046e82dc908"/> +<a href="neorv32__twd_8c.html#ab12e92dfbe37710c12b44fed97c01c06"/> +<a href="neorv32__twd_8c.html#ac06102b8e4f692415ec91d37253a3118"/> +<a href="neorv32__twd_8c.html#ace89f57655c6aacf6e05a5b6a29a1616"/> +<a href="neorv32__twd_8c.html#ae106ee8a74649853eab1b2a07c2c0ede"/> +<a href="neorv32__twd_8c.html#ae6392461557d300b3b9c1f8e63a7dcc7"/> +<a href="neorv32__twd_8c.html#af2b925dffe4e4d0f8412052b92281066"/> +<a href="neorv32__twd_8c.html#af82c89d23e3fc3fbd61c750ecb25d0dc"/> +<a href="neorv32__twd_8h.html"/> +<a href="neorv32__twd_8h.html#a0cbf868493aa8931e5c5bc71e5b478a4"/> +<a href="neorv32__twd_8h.html#a138bd6bdefed2a24b746ddb550a02407"/> +<a href="neorv32__twd_8h.html#a38f7c54e2b356851f3b18011796f3902"/> +<a href="neorv32__twd_8h.html#a4d167a59c4297e0e93af5a74091bd752"/> +<a href="neorv32__twd_8h.html#a4fe22b79183dc7d07a1b84a70328a00b"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a1a951d8cf167b79bffdd8f19033ba657"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a243f36178c91f94ccc848399a3b715b5"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a3cc82a5ab8ad0ac4cff85b40d2ed6ffe"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a428ca1617d4bc287fbf03bfc74d12dfd"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a71eb18275ffd7138251049c39294f4f3"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a73bfda5ccd72ba0c8deed6d848013757"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a8816adbecd0c929c88134e9e41efcf5c"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a943bbe073ea36da264cb16f5a9f2acc9"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aaf31cc771b97f6b1f4d2da2347f43878"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ab2d8eef73a9cc3de9bf99c5bf9c7114b"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18abea8949a5164bd28f1504a34dadb17c2"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18acc0cdd72b63e7a029e97ae942754958c"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad1360350bafec23f10e28ffddefa625a"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad59552e7f3c7c747307f71e78ac1c00b"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aded9f8ad7a2e0217e73d8484246157b2"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aef0fcc46f5595fa73fe547f0737f85e6"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af121649145e5403bf44246d416c26530"/> +<a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af6d6b5bda034fc7af54036c95b94c01a"/> +<a href="neorv32__twd_8h.html#a6382d25525ff9bb88e6df0802f0037e2"/> +<a href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8"/> +<a href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a5f5e055b2d8ea968da1670251b70f824"/> +<a href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a8f40d28bfc00d40ba03560bf44d47829"/> +<a href="neorv32__twd_8h.html#a6b728dd7e359c1f3ae170a4dae054a31"/> +<a href="neorv32__twd_8h.html#a7fa01904130031ab2dee77b4058061c7"/> +<a href="neorv32__twd_8h.html#a90e8f83ff4f6f05a5aef0046e82dc908"/> +<a href="neorv32__twd_8h.html#ab12e92dfbe37710c12b44fed97c01c06"/> +<a href="neorv32__twd_8h.html#ac06102b8e4f692415ec91d37253a3118"/> +<a href="neorv32__twd_8h.html#ac9995cfc63846945ac26992148cd9401"/> +<a href="neorv32__twd_8h.html#ace89f57655c6aacf6e05a5b6a29a1616"/> +<a href="neorv32__twd_8h.html#ae106ee8a74649853eab1b2a07c2c0ede"/> +<a href="neorv32__twd_8h.html#ae6392461557d300b3b9c1f8e63a7dcc7"/> +<a href="neorv32__twd_8h.html#af2b925dffe4e4d0f8412052b92281066"/> +<a href="neorv32__twd_8h.html#af82c89d23e3fc3fbd61c750ecb25d0dc"/> +<a href="neorv32__twi_8c.html"/> +<a href="neorv32__twi_8c.html#a22717887cffff1e6830756bc73140e7b"/> +<a href="neorv32__twi_8c.html#a28fc44cce5d28f6e8c32268b239b07d5"/> +<a href="neorv32__twi_8c.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2"/> +<a href="neorv32__twi_8c.html#a4fff1ddade320f6cc568c6266f2c2acd"/> +<a href="neorv32__twi_8c.html#a633d460e4735eb369d74a834b03c8b78"/> +<a href="neorv32__twi_8c.html#a71e204837e71ce8c18c66e2ef3e7d9ef"/> +<a href="neorv32__twi_8c.html#a7645e3ba5a92ea0fbe446dbaac33b363"/> +<a href="neorv32__twi_8c.html#a7735376d26560866b153ed205dfcb2ba"/> +<a href="neorv32__twi_8c.html#a7ea6f3509a7cf622234d4b83e33afbe3"/> +<a href="neorv32__twi_8c.html#aa22430aab0a38d88cbd2c4220c573da0"/> +<a href="neorv32__twi_8c.html#aa2e01ebbc0c82d65ed4ded351f4d8711"/> +<a href="neorv32__twi_8c.html#ac7020f3379602f11c47ca16f1bd82f2e"/> +<a href="neorv32__twi_8c.html#ad352447adcccccabd4e20577b34fbece"/> +<a href="neorv32__twi_8c.html#adbf2eaed0c76221da5c3091665fc885e"/> +<a href="neorv32__twi_8c.html#ae5f31e737c7a6c3c86070ff34cb0d861"/> +<a href="neorv32__twi_8h.html"/> +<a href="neorv32__twi_8h.html#a22717887cffff1e6830756bc73140e7b"/> +<a href="neorv32__twi_8h.html#a2769c2fe5e0de01b12fe4a5fad029768"/> +<a href="neorv32__twi_8h.html#a28fc44cce5d28f6e8c32268b239b07d5"/> +<a href="neorv32__twi_8h.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2"/> +<a href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8"/> +<a href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e"/> +<a href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d"/> +<a href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e"/> +<a href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56"/> +<a href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5"/> +<a href="neorv32__twi_8h.html#a4fff1ddade320f6cc568c6266f2c2acd"/> +<a href="neorv32__twi_8h.html#a633d460e4735eb369d74a834b03c8b78"/> +<a href="neorv32__twi_8h.html#a71e204837e71ce8c18c66e2ef3e7d9ef"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafa"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa51ea52c7ad18f1a8bcb6c2a979802107"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671"/> +<a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaf715b63c5c3edbd1e61766df53c2dd6c"/> +<a href="neorv32__twi_8h.html#a7645e3ba5a92ea0fbe446dbaac33b363"/> +<a href="neorv32__twi_8h.html#a7735376d26560866b153ed205dfcb2ba"/> +<a href="neorv32__twi_8h.html#a7ea6f3509a7cf622234d4b83e33afbe3"/> +<a href="neorv32__twi_8h.html#aa22430aab0a38d88cbd2c4220c573da0"/> +<a href="neorv32__twi_8h.html#aa2e01ebbc0c82d65ed4ded351f4d8711"/> +<a href="neorv32__twi_8h.html#ac7020f3379602f11c47ca16f1bd82f2e"/> +<a href="neorv32__twi_8h.html#ad352447adcccccabd4e20577b34fbece"/> +<a href="neorv32__twi_8h.html#adbf2eaed0c76221da5c3091665fc885e"/> +<a href="neorv32__twi_8h.html#ae5f31e737c7a6c3c86070ff34cb0d861"/> +<a href="neorv32__uart_8c.html"/> +<a href="neorv32__uart_8c.html#a031e3e27c8783c299623468020a22b0e"/> +<a href="neorv32__uart_8c.html#a27971954262a2fd1f21d3bf1ba27e87c"/> +<a href="neorv32__uart_8c.html#a2efd432f63b8d36d44263d0b1f39a6dc"/> +<a href="neorv32__uart_8c.html#a45a07d5e71677162baaa1025759c67a2"/> +<a href="neorv32__uart_8c.html#a734b610f4cd1b474d7763f9700a715ec"/> +<a href="neorv32__uart_8c.html#a7b2f924ef4554b1fa90433c38d97558d"/> +<a href="neorv32__uart_8c.html#a8714cdb1c04d94bec322c6215ea10238"/> +<a href="neorv32__uart_8c.html#a9bc7bb94a50b74e1145b78eec6094129"/> +<a href="neorv32__uart_8c.html#a9cdec36f2723c5373664022d1b68b841"/> +<a href="neorv32__uart_8c.html#aa490df3a9bb2aa3215fa6fad34ffe7d1"/> +<a href="neorv32__uart_8c.html#aa7bef48a58e044c246b8c4ad32864502"/> +<a href="neorv32__uart_8c.html#ab8c1f9f451def9126ab2749d7bbe50d9"/> +<a href="neorv32__uart_8c.html#abef6415b0391dc055713404312196682"/> +<a href="neorv32__uart_8c.html#ac429964878bd6deab61d9ed8659bca75"/> +<a href="neorv32__uart_8c.html#adedb0e07efb232717534017167a5be98"/> +<a href="neorv32__uart_8c.html#ae18804ccd29ec2fd1cc06e9ce985b704"/> +<a href="neorv32__uart_8c.html#af85fb929c912d3edef3d86ffa833982a"/> +<a href="neorv32__uart_8c.html#afa0533e81d53057c36f4997a2dbbe2bc"/> +<a href="neorv32__uart_8c.html#afe0de59c14faff1e0c890d5465be25f0"/> +<a href="neorv32__uart_8h.html"/> +<a href="neorv32__uart_8h.html#a031e3e27c8783c299623468020a22b0e"/> +<a href="neorv32__uart_8h.html#a27971954262a2fd1f21d3bf1ba27e87c"/> +<a href="neorv32__uart_8h.html#a2efd432f63b8d36d44263d0b1f39a6dc"/> +<a href="neorv32__uart_8h.html#a45a07d5e71677162baaa1025759c67a2"/> +<a href="neorv32__uart_8h.html#a4c880a6b27e46f459e750425258b1bdb"/> +<a href="neorv32__uart_8h.html#a734b610f4cd1b474d7763f9700a715ec"/> +<a href="neorv32__uart_8h.html#a7b2f924ef4554b1fa90433c38d97558d"/> +<a href="neorv32__uart_8h.html#a8714cdb1c04d94bec322c6215ea10238"/> +<a href="neorv32__uart_8h.html#a9bc7bb94a50b74e1145b78eec6094129"/> +<a href="neorv32__uart_8h.html#a9cdec36f2723c5373664022d1b68b841"/> +<a href="neorv32__uart_8h.html#aa2a9ded4523f001bf69935c80247fa2d"/> +<a href="neorv32__uart_8h.html#aa490df3a9bb2aa3215fa6fad34ffe7d1"/> +<a href="neorv32__uart_8h.html#aa7bef48a58e044c246b8c4ad32864502"/> +<a href="neorv32__uart_8h.html#ab8c1f9f451def9126ab2749d7bbe50d9"/> +<a href="neorv32__uart_8h.html#abef6415b0391dc055713404312196682"/> +<a href="neorv32__uart_8h.html#ac429964878bd6deab61d9ed8659bca75"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afc"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a"/> +<a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33"/> +<a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2"/> +<a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb"/> +<a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef"/> +<a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e"/> +<a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225"/> +<a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529"/> +<a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195"/> +<a href="neorv32__uart_8h.html#adedb0e07efb232717534017167a5be98"/> +<a href="neorv32__uart_8h.html#ae18804ccd29ec2fd1cc06e9ce985b704"/> +<a href="neorv32__uart_8h.html#af85fb929c912d3edef3d86ffa833982a"/> +<a href="neorv32__uart_8h.html#afa0533e81d53057c36f4997a2dbbe2bc"/> +<a href="neorv32__uart_8h.html#afe0de59c14faff1e0c890d5465be25f0"/> +<a href="neorv32__wdt_8c.html"/> +<a href="neorv32__wdt_8c.html#a2aa72608191d34ef41c5f545988ff400"/> +<a href="neorv32__wdt_8c.html#a459a918c5a86c0167e8c748352d39827"/> +<a href="neorv32__wdt_8c.html#a80fa8d178d18c9b02d32d93e815b532e"/> +<a href="neorv32__wdt_8c.html#aba52520582392a671e2b717715a330b2"/> +<a href="neorv32__wdt_8c.html#ae4e86c42ed45eefdec43d9ece08b98a4"/> +<a href="neorv32__wdt_8h.html"/> +<a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23e"/> +<a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f"/> +<a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779"/> +<a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7"/> +<a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac"/> +<a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609"/> +<a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9"/> +<a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd"/> +<a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148"/> +<a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3"/> +<a href="neorv32__wdt_8h.html#a2aa72608191d34ef41c5f545988ff400"/> +<a href="neorv32__wdt_8h.html#a459a918c5a86c0167e8c748352d39827"/> +<a href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049"/> +<a href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a10999a782ffc2c26f601615f76121376"/> +<a href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a7273d24bb65d3f40c1d289ce5cbc1a40"/> +<a href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e"/> +<a href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0"/> +<a href="neorv32__wdt_8h.html#a78615b08cd799063011606d084fef46c"/> +<a href="neorv32__wdt_8h.html#a80fa8d178d18c9b02d32d93e815b532e"/> +<a href="neorv32__wdt_8h.html#aba52520582392a671e2b717715a330b2"/> +<a href="neorv32__wdt_8h.html#ae4e86c42ed45eefdec43d9ece08b98a4"/> +<a href="neorv32__wdt_8h.html#af2a2bd9c74bdba1b46bd92025bd00ab6"/> +<a href="neorv32__xip_8c.html"/> +<a href="neorv32__xip_8c.html#a0ab2c36c973030a811e6d7abe0afc393"/> +<a href="neorv32__xip_8c.html#a549d68abdf5a3d7484abe6d5370bb999"/> +<a href="neorv32__xip_8c.html#a6aef2ea29451ba2aa55160da777a5115"/> +<a href="neorv32__xip_8c.html#a88f728101e82939bf7f8b9ab5a904706"/> +<a href="neorv32__xip_8c.html#a92f1446a3bb7fe6dee5dbed33882b223"/> +<a href="neorv32__xip_8c.html#ad74f2842ed2251e3ae5c19e06dced0c3"/> +<a href="neorv32__xip_8c.html#afe2e5682a26cafdb0585d2233bccc7c6"/> +<a href="neorv32__xip_8h.html"/> +<a href="neorv32__xip_8h.html#a0ab2c36c973030a811e6d7abe0afc393"/> +<a href="neorv32__xip_8h.html#a3d6f138a347c16883b51069428eb7c1e"/> +<a href="neorv32__xip_8h.html#a549d68abdf5a3d7484abe6d5370bb999"/> +<a href="neorv32__xip_8h.html#a6aef2ea29451ba2aa55160da777a5115"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceb"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af"/> +<a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3"/> +<a href="neorv32__xip_8h.html#a88f728101e82939bf7f8b9ab5a904706"/> +<a href="neorv32__xip_8h.html#a92f1446a3bb7fe6dee5dbed33882b223"/> +<a href="neorv32__xip_8h.html#ad74f2842ed2251e3ae5c19e06dced0c3"/> +<a href="neorv32__xip_8h.html#afe2e5682a26cafdb0585d2233bccc7c6"/> +<a href="neorv32__xirq_8c.html"/> +<a href="neorv32__xirq_8c.html#a0d137f09d1e7dcd31c157b856033ac42"/> +<a href="neorv32__xirq_8c.html#a14661d628dd31e6bfce89376c6614627"/> +<a href="neorv32__xirq_8c.html#a49ae67d1d5066cd795149e96b81127f7"/> +<a href="neorv32__xirq_8c.html#a717a8e34908cc01345e68920e76f229c"/> +<a href="neorv32__xirq_8c.html#a76468156ef52b371e06bc2ca8eddcd27"/> +<a href="neorv32__xirq_8c.html#a9129984f91c02afafaa072a5d86f9876"/> +<a href="neorv32__xirq_8c.html#a9295997fce7114a8205325c4d75dd200"/> +<a href="neorv32__xirq_8c.html#aaf30757d526030a8d81081915ab29a76"/> +<a href="neorv32__xirq_8c.html#abe63c0968c94b472082c8156a1a7db5c"/> +<a href="neorv32__xirq_8c.html#ac64d3ff5619968499bccebebe6a6cab3"/> +<a href="neorv32__xirq_8c.html#ae17509ad0c828aa9b36747b253cdbf0a"/> +<a href="neorv32__xirq_8c.html#ae4d9362b23a1341c595a4cd239a87091"/> +<a href="neorv32__xirq_8h.html"/> +<a href="neorv32__xirq_8h.html#a0c0886139e9837867202e5f6a83307c4"/> +<a href="neorv32__xirq_8h.html#a0d137f09d1e7dcd31c157b856033ac42"/> +<a href="neorv32__xirq_8h.html#a19aaba6e0cfedfee3cf96f3ea5323151"/> +<a href="neorv32__xirq_8h.html#a19aaba6e0cfedfee3cf96f3ea5323151a1e98e2457fa5bc50ae962a538082b1a6"/> +<a href="neorv32__xirq_8h.html#a19aaba6e0cfedfee3cf96f3ea5323151a334d8904890aa78831b2b3df4a7ccca9"/> +<a href="neorv32__xirq_8h.html#a19aaba6e0cfedfee3cf96f3ea5323151a7ee4a807aae362ab19ef823d4f260e38"/> +<a href="neorv32__xirq_8h.html#a19aaba6e0cfedfee3cf96f3ea5323151ade1341433962b3c181744589613bb18d"/> +<a href="neorv32__xirq_8h.html#a49ae67d1d5066cd795149e96b81127f7"/> +<a href="neorv32__xirq_8h.html#a717a8e34908cc01345e68920e76f229c"/> +<a href="neorv32__xirq_8h.html#a76468156ef52b371e06bc2ca8eddcd27"/> +<a href="neorv32__xirq_8h.html#a9129984f91c02afafaa072a5d86f9876"/> +<a href="neorv32__xirq_8h.html#a9295997fce7114a8205325c4d75dd200"/> +<a href="neorv32__xirq_8h.html#aaf30757d526030a8d81081915ab29a76"/> +<a href="neorv32__xirq_8h.html#abe63c0968c94b472082c8156a1a7db5c"/> +<a href="neorv32__xirq_8h.html#ac64d3ff5619968499bccebebe6a6cab3"/> +<a href="neorv32__xirq_8h.html#ae17509ad0c828aa9b36747b253cdbf0a"/> +<a href="onewire__aux_8h_source.html"/> +<a href="processor__check_2main_8c.html"/> +<a href="processor__check_2main_8c.html#a0d695ebfaae3b4614ddb62640cbf8b7b"/> +<a href="processor__check_2main_8c.html#a1a455bede4ab48f32d3ed0868e398044"/> +<a href="processor__check_2main_8c.html#a1e0a5d63896fa26a6c25c0012fc6b938"/> +<a href="processor__check_2main_8c.html#a277cb06ef74e4cfe1ef783069f9b6527"/> +<a href="processor__check_2main_8c.html#a31d9e432f6a368e6222f5e0907eeb6f4"/> +<a href="processor__check_2main_8c.html#a349743a03307abb5130a3e89d903971b"/> +<a href="processor__check_2main_8c.html#a9504ca74fdb80711a88d2a16d4cb4cf4"/> +<a href="processor__check_2main_8c.html#a9a64ce0ee69c4c32cecc8b2b2746604c"/> +<a href="processor__check_2main_8c.html#aa4fe70578c4dccabe1e31fae941378cb"/> +<a href="processor__check_2main_8c.html#ac91bfdd45696444673dc7d6b1b644082"/> +<a href="processor__check_2main_8c.html#ada24f2cd9d2d384265517f539711de62"/> +<a href="processor__check_2main_8c.html#ae61d39109b2747429ec3a3c1b5533598"/> +<a href="processor__check_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4"/> +<a href="structdate__t.html"/> +<a href="structdate__t.html#a1071948e7754cb415da9714d59a315bf"/> +<a href="structdate__t.html#a1a97f6a755cd4209a0880cf811d52c7b"/> +<a href="structdate__t.html#a2ab79834ebae42979e359bf30ad5f67a"/> +<a href="structdate__t.html#a39a23695634a2814d827984f4eea54eb"/> +<a href="structdate__t.html#a44167cd71416886e55048310af6d4e1b"/> +<a href="structdate__t.html#a482ad87226bae7841dfec63e035aeace"/> +<a href="structdate__t.html#aabab1b1efd94b69bfb28b639c612dd4f"/> +<a href="structneorv32__cfs__t.html"/> +<a href="structneorv32__cfs__t.html#a9bfa2b6f4938f42fb1ee3beaeb8cc32e"/> +<a href="structneorv32__clint__t.html"/> +<a href="structneorv32__clint__t.html#a7b49826af73aae2035cd697cb4b2666b"/> +<a href="structneorv32__clint__t.html#ac198a6ec62ea154d2533aebdd7b0df36"/> +<a href="structneorv32__clint__t.html#aea25562a01a789da8b6c5ee82c6a9ef0"/> +<a href="structneorv32__crc__t.html"/> +<a href="structneorv32__crc__t.html#a47f286612848f597859aaef0d2d5da4d"/> +<a href="structneorv32__crc__t.html#a9bbcab843ddba4f9772d07478947a661"/> +<a href="structneorv32__crc__t.html#abf2b419f2aefdb6f2a6b81a02cb8612d"/> +<a href="structneorv32__crc__t.html#ad720502701f16e6e952bbcaee980017c"/> +<a href="structneorv32__dma__t.html"/> +<a href="structneorv32__dma__t.html#a3b214d1a373c7f15b374e113d7110b42"/> +<a href="structneorv32__dma__t.html#a70c28642195765409d97b941e98f47ca"/> +<a href="structneorv32__dma__t.html#a8480d6ad3ba5063cdf21dca286711569"/> +<a href="structneorv32__dma__t.html#aee8a6cf3cbd9fe3c5995f046ffb9a1c0"/> +<a href="structneorv32__gpio__t.html"/> +<a href="structneorv32__gpio__t.html#a208ee622d43fee3574072f19a98c8808"/> +<a href="structneorv32__gpio__t.html#abaf7de4f79adfc3debcde93fa4a921bb"/> +<a href="structneorv32__gptmr__t.html"/> +<a href="structneorv32__gptmr__t.html#a1abc5bae1dffc64006e965d4570da479"/> +<a href="structneorv32__gptmr__t.html#a3c477ccb24ed12122d9d90244431c7e9"/> +<a href="structneorv32__gptmr__t.html#a666ebcbea13dafcf1987629f3e0092ee"/> +<a href="structneorv32__neoled__t.html"/> +<a href="structneorv32__neoled__t.html#a995fb1d63a9dfb3f20d715932781c1de"/> +<a href="structneorv32__neoled__t.html#adfe7618c002ff88dd22e65fcedfd6139"/> +<a href="structneorv32__onewire__t.html"/> +<a href="structneorv32__onewire__t.html#a310df3bab43e4438417b2ff948f4712a"/> +<a href="structneorv32__onewire__t.html#ab8f4e61ac777c55cd1e5805eb03d3d4b"/> +<a href="structneorv32__pwm__t.html"/> +<a href="structneorv32__pwm__t.html#a5df0cf6c7c250365db3ada8db7cc19e9"/> +<a href="structneorv32__sdi__t.html"/> +<a href="structneorv32__sdi__t.html#a3ea6903c0924d0a1b633b6a2b0ae44f1"/> +<a href="structneorv32__sdi__t.html#af494f25cbcd8478cf384eb868e447303"/> +<a href="structneorv32__slink__t.html"/> +<a href="structneorv32__slink__t.html#a0b2417a1a587da45909ce2a948f90e22"/> +<a href="structneorv32__slink__t.html#a39ece6aeeea6982002e164902a1e784f"/> +<a href="structneorv32__slink__t.html#a8af7d4ea9787cf94c599c82133c6aa74"/> +<a href="structneorv32__slink__t.html#ada8f10141d2161b83a5a367722ed6a77"/> +<a href="structneorv32__spi__t.html"/> +<a href="structneorv32__spi__t.html#a34fa748f0e3ceb75822c0a5553bd0420"/> +<a href="structneorv32__spi__t.html#a3901bad351213e34820197a33d589f1e"/> +<a href="structneorv32__sysinfo__t.html"/> +<a href="structneorv32__sysinfo__t.html#a3f8ce96050fc0a680afa9b7fdf7cb35c"/> +<a href="structneorv32__sysinfo__t.html#a51eee92b1824c1b19eb0a83a0a9c7d4c"/> +<a href="structneorv32__sysinfo__t.html#ac43abe3b416da3a2895d1d06537a14c3"/> +<a href="structneorv32__sysinfo__t.html#ada99a36ccda38b254d5b6a84883101f6"/> +<a href="structneorv32__trng__t.html"/> +<a href="structneorv32__trng__t.html#acf3f269a8097b731cd82e0d6660e16b5"/> +<a href="structneorv32__trng__t.html#ae2ff37ce30fb85ef59d9012534bc7e67"/> +<a href="structneorv32__twd__t.html"/> +<a href="structneorv32__twd__t.html#a0ce59594f8c1aa8cffc78a384c6f6257"/> +<a href="structneorv32__twd__t.html#acff774cf759c304daf68d709b41b781a"/> +<a href="structneorv32__twi__t.html"/> +<a href="structneorv32__twi__t.html#a148a1c681a2632881b25ee41652b5304"/> +<a href="structneorv32__twi__t.html#ae311e0827bdb178c6dd8c4535b80d5cb"/> +<a href="structneorv32__uart__t.html"/> +<a href="structneorv32__uart__t.html#a0a6227aeea38335d2b9a9da46b35451b"/> +<a href="structneorv32__uart__t.html#a38eec82aae9ed522a0d2afb9a9560036"/> +<a href="structneorv32__wdt__t.html"/> +<a href="structneorv32__wdt__t.html#a0a273e8ca2bd92547bf7727ec65a9449"/> +<a href="structneorv32__wdt__t.html#a6ae41e28d08b0f06118c499f52b56f41"/> +<a href="structneorv32__xip__t.html"/> +<a href="structneorv32__xip__t.html#a516ab9c075ef6d1fb741e243db7703b2"/> +<a href="structneorv32__xip__t.html#a7ead9d6a4f784d766a6b2755c6d35235"/> +<a href="structneorv32__xip__t.html#aacb77d586c3caec518e8e0024cfe745c"/> +<a href="structneorv32__xip__t.html#ad64048bb3544e712b1c668c2ef343ccb"/> +<a href="structneorv32__xirq__t.html"/> +<a href="structneorv32__xirq__t.html#a5fe0036a2cada585228b60aaa780e92a"/> +<a href="structneorv32__xirq__t.html#ab7117c210b5f0a8ebc369eeba6a4a5bc"/> +<a href="structneorv32__xirq__t.html#ae4f7f3f41210ff329b6f82d5dfada88a"/> +<a href="structneorv32__xirq__t.html#aef3c2b491207abd68bf6392f97096a74"/> +<a href="structrecord.html"/> +<a href="structt__neorv32__spi.html"/> +<a href="structt__neorv32__spi.html#a435c266758a440d32de4344472e3514a"/> +<a href="structt__neorv32__spi.html#a487a6510820871ff8d0da7699463f6d9"/> +<a href="structt__neorv32__spi.html#a5750a54f8312ec2fed349eb9fbeff323"/> +<a href="structt__neorv32__spi.html#a71fb3f91af197e1abdbe97d62130ad0f"/> +<a href="structt__neorv32__spi.html#a8ed31f9393bee5b963e08582b6c517ed"/> +<a href="structt__neorv32__spi.html#aa4d96f72e57fb6930ab43de6fb0a85ae"/> +<a href="structt__neorv32__spi.html#aa89b7a769e54e331798e4d68d02a7b43"/> +<a href="unionfloat__conv__t.html"/> +<a href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606"/> +<a href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788"/> +<a href="unionsubwords16__t.html"/> +<a href="unionsubwords32__t.html"/> +<a href="unionsubwords64__t.html"/> +</body> +</html> diff --git a/sw/dynsections.js b/sw/dynsections.js new file mode 100644 index 0000000000..b05f4c8d70 --- /dev/null +++ b/sw/dynsections.js @@ -0,0 +1,198 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l<level+1) { + i.removeClass('iconfopen iconfclosed').addClass('iconfopen'); + a.html('&#9660;'); + $(this).show(); + } else if (l==level+1) { + i.removeClass('iconfclosed iconfopen').addClass('iconfclosed'); + a.html('&#9658;'); + $(this).show(); + } else { + $(this).hide(); + } + }); + this.updateStripes(); + }, + + toggleFolder : function(id) { + // the clicked row + const currentRow = $('#row_'+id); + + // all rows after the clicked row + const rows = currentRow.nextAll("tr"); + + const re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub + + // only match elements AFTER this one (can't hide elements before) + const childRows = rows.filter(function() { return this.id.match(re); }); + + // first row is visible we are HIDING + if (childRows.filter(':first').is(':visible')===true) { + // replace down arrow by right arrow for current row + const currentRowSpans = currentRow.find("span"); + currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed"); + currentRowSpans.filter(".arrow").html('&#9658;'); + rows.filter("[id^=row_"+id+"]").hide(); // hide all children + } else { // we are SHOWING + // replace right arrow by down arrow for current row + const currentRowSpans = currentRow.find("span"); + currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen"); + currentRowSpans.filter(".arrow").html('&#9660;'); + // replace down arrows by right arrows for child rows + const childRowsSpans = childRows.find("span"); + childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed"); + childRowsSpans.filter(".arrow").html('&#9658;'); + childRows.show(); //show all children + } + this.updateStripes(); + }, + + toggleInherit : function(id) { + const rows = $('tr.inherit.'+id); + const img = $('tr.inherit_header.'+id+' img'); + const src = $(img).attr('src'); + if (rows.filter(':first').is(':visible')===true) { + rows.css('display','none'); + $(img).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + rows.css('display','table-row'); // using show() causes jump in firefox + $(img).attr('src',src.substring(0,src.length-10)+'open.png'); + } + }, +}; + +let codefold = { + opened : true, + + // in case HTML_COLORSTYLE is LIGHT or DARK the vars will be replaced, so we write them out explicitly and use double quotes + plusImg: [ "var(--fold-plus-image)", "var(--fold-plus-image-relpath)" ], + minusImg: [ "var(--fold-minus-image)", "var(--fold-minus-image-relpath)" ], + + // toggle all folding blocks + toggle_all : function(relPath) { + if (this.opened) { + $('#fold_all').css('background-image',this.plusImg[relPath]); + $('div[id^=foldopen]').hide(); + $('div[id^=foldclosed]').show(); + } else { + $('#fold_all').css('background-image',this.minusImg[relPath]); + $('div[id^=foldopen]').show(); + $('div[id^=foldclosed]').hide(); + } + this.opened=!this.opened; + }, + + // toggle single folding block + toggle : function(id) { + $('#foldopen'+id).toggle(); + $('#foldclosed'+id).toggle(); + }, + + init : function(relPath) { + $('span[class=lineno]').css({ + 'padding-right':'4px', + 'margin-right':'2px', + 'display':'inline-block', + 'width':'54px', + 'background':'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%' + }); + // add global toggle to first line + $('span[class=lineno]:first').append('<span class="fold" id="fold_all" '+ + 'onclick="javascript:codefold.toggle_all('+relPath+');" '+ + 'style="background-image:'+this.minusImg[relPath]+';"></span>'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append('<span class="fold"></span>'); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith('<span class="fold" '+ + 'onclick="javascript:codefold.toggle(\''+id+'\');" '+ + 'style="background-image:'+codefold.minusImg[relPath]+';"></span>'); + // append div for folded (closed) representation + $(this).after('<div id="foldclosed'+id+'" class="foldclosed" style="display:none;"></div>'); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+'<a href="javascript:codefold.toggle(\''+id+'\')">&#8230;</a>'+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/sw/files.html b/sw/files.html new file mode 100644 index 0000000000..88ff66822e --- /dev/null +++ b/sw/files.html @@ -0,0 +1,230 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: File List</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="header"> + <div class="headertitle"><div class="title">File List</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory"> +<div class="levels">[detail level <span onclick="javascript:dynsection.toggleLevel(1);">1</span><span onclick="javascript:dynsection.toggleLevel(2);">2</span><span onclick="javascript:dynsection.toggleLevel(3);">3</span><span onclick="javascript:dynsection.toggleLevel(4);">4</span><span onclick="javascript:dynsection.toggleLevel(5);">5</span>]</div><table class="directory"> +<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="dynsection.toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="dynsection.toggleFolder('0_')">&#160;</span><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html" target="_self">sw</a></td><td class="desc"></td></tr> +<tr id="row_0_0_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="dynsection.toggleFolder('0_0_')">&#9660;</span><span id="img_0_0_" class="iconfopen" onclick="dynsection.toggleFolder('0_0_')">&#160;</span><a class="el" href="dir_4316bb0e553b51b8b65560981547ce0f.html" target="_self">bootloader</a></td><td class="desc"></td></tr> +<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="bootloader_8c.html" target="_self">bootloader.c</a></td><td class="desc">Default NEORV32 bootloader </td></tr> +<tr id="row_0_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_1_" class="arrow" onclick="dynsection.toggleFolder('0_1_')">&#9660;</span><span id="img_0_1_" class="iconfopen" onclick="dynsection.toggleFolder('0_1_')">&#160;</span><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html" target="_self">example</a></td><td class="desc"></td></tr> +<tr id="row_0_1_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_0_" class="arrow" onclick="dynsection.toggleFolder('0_1_0_')">&#9658;</span><span id="img_0_1_0_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_0_')">&#160;</span><a class="el" href="dir_449d8ba5f8b78dc90092f20d15a2386a.html" target="_self">atomic_test</a></td><td class="desc"></td></tr> +<tr id="row_0_1_0_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="atomic__test_2main_8c.html" target="_self">main.c</a></td><td class="desc">Test program for the NEORV32 'A' ISA extension - check the emulation of the AMO (read-modify-write) operations </td></tr> +<tr id="row_0_1_1_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_1_" class="arrow" onclick="dynsection.toggleFolder('0_1_1_')">&#9658;</span><span id="img_0_1_1_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_1_')">&#160;</span><a class="el" href="dir_0d2921e55a1172a4726516961ee96ab5.html" target="_self">bus_explorer</a></td><td class="desc"></td></tr> +<tr id="row_0_1_1_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="bus__explorer_2main_8c.html" target="_self">main.c</a></td><td class="desc">Interactive memory inspector </td></tr> +<tr id="row_0_1_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_2_" class="arrow" onclick="dynsection.toggleFolder('0_1_2_')">&#9658;</span><span id="img_0_1_2_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_2_')">&#160;</span><a class="el" href="dir_9a1c128d67c35790e92af404beb936aa.html" target="_self">demo_blink_led</a></td><td class="desc"></td></tr> +<tr id="row_0_1_2_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__blink__led_2main_8c.html" target="_self">main.c</a></td><td class="desc">Minimal blinking LED demo program using the lowest 8 bits of the GPIO.output port </td></tr> +<tr id="row_0_1_3_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_3_" class="arrow" onclick="dynsection.toggleFolder('0_1_3_')">&#9658;</span><span id="img_0_1_3_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_3_')">&#160;</span><a class="el" href="dir_01cde3d98944a579dc3b5e43a5311a79.html" target="_self">demo_cfs</a></td><td class="desc"></td></tr> +<tr id="row_0_1_3_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__cfs_2main_8c.html" target="_self">main.c</a></td><td class="desc">Simple demo program for the <em>default</em> custom functions subsystem (CFS) module </td></tr> +<tr id="row_0_1_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_4_" class="arrow" onclick="dynsection.toggleFolder('0_1_4_')">&#9658;</span><span id="img_0_1_4_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_4_')">&#160;</span><a class="el" href="dir_09a89dfa1596b6613cf2c29528a32844.html" target="_self">demo_cfu</a></td><td class="desc"></td></tr> +<tr id="row_0_1_4_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__cfu_2main_8c.html" target="_self">main.c</a></td><td class="desc">Example program showing how to use the CFU's custom instructions (XTEA example) </td></tr> +<tr id="row_0_1_5_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_5_" class="arrow" onclick="dynsection.toggleFolder('0_1_5_')">&#9658;</span><span id="img_0_1_5_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_5_')">&#160;</span><a class="el" href="dir_f28130cc1bab3a9396f0ef9d1631e47b.html" target="_self">demo_clint</a></td><td class="desc"></td></tr> +<tr id="row_0_1_5_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__clint_2main_8c.html" target="_self">main.c</a></td><td class="desc">Simple core local interruptor (CLINT) usage example </td></tr> +<tr id="row_0_1_6_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_6_" class="arrow" onclick="dynsection.toggleFolder('0_1_6_')">&#9658;</span><span id="img_0_1_6_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_6_')">&#160;</span><a class="el" href="dir_bf935196a1ea0ca9cb42aae56d70946a.html" target="_self">demo_crc</a></td><td class="desc"></td></tr> +<tr id="row_0_1_6_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__crc_2main_8c.html" target="_self">main.c</a></td><td class="desc">CRC demo program </td></tr> +<tr id="row_0_1_7_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_7_" class="arrow" onclick="dynsection.toggleFolder('0_1_7_')">&#9658;</span><span id="img_0_1_7_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_7_')">&#160;</span><a class="el" href="dir_8c514361e1f16692c783b23503f30f16.html" target="_self">demo_dma</a></td><td class="desc"></td></tr> +<tr id="row_0_1_7_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__dma_2main_8c.html" target="_self">main.c</a></td><td class="desc">DMA demo program </td></tr> +<tr id="row_0_1_8_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_8_" class="arrow" onclick="dynsection.toggleFolder('0_1_8_')">&#9658;</span><span id="img_0_1_8_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_8_')">&#160;</span><a class="el" href="dir_2ba96d3140b089dada6fb9f817b7975f.html" target="_self">demo_emulate_unaligned</a></td><td class="desc"></td></tr> +<tr id="row_0_1_8_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__emulate__unaligned_2main_8c.html" target="_self">main.c</a></td><td class="desc">Demo program for emulating unaligned memory accesses using the NEORV32 run-time environment (RTE) </td></tr> +<tr id="row_0_1_9_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_9_" class="arrow" onclick="dynsection.toggleFolder('0_1_9_')">&#9658;</span><span id="img_0_1_9_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_9_')">&#160;</span><a class="el" href="dir_b68ac2efc0c6ed3018151f7bb6c45670.html" target="_self">demo_gptmr</a></td><td class="desc"></td></tr> +<tr id="row_0_1_9_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__gptmr_2main_8c.html" target="_self">main.c</a></td><td class="desc">Simple GPTMR timer-match interrupt example </td></tr> +<tr id="row_0_1_10_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_10_" class="arrow" onclick="dynsection.toggleFolder('0_1_10_')">&#9658;</span><span id="img_0_1_10_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_10_')">&#160;</span><a class="el" href="dir_93967190e0d2e549ceca77007097849b.html" target="_self">demo_hpm</a></td><td class="desc"></td></tr> +<tr id="row_0_1_10_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__hpm_2main_8c.html" target="_self">main.c</a></td><td class="desc">Hardware performance monitor (HPM) example program </td></tr> +<tr id="row_0_1_11_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_11_" class="arrow" onclick="dynsection.toggleFolder('0_1_11_')">&#9658;</span><span id="img_0_1_11_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_11_')">&#160;</span><a class="el" href="dir_d68bb921df3f2482fe9ace49b286ab86.html" target="_self">demo_neopixel</a></td><td class="desc"></td></tr> +<tr id="row_0_1_11_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__neopixel_2main_8c.html" target="_self">main.c</a></td><td class="desc">NeoPixel (WS2812) interface demo using the processor's smart LED interface (NEOLED) </td></tr> +<tr id="row_0_1_12_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_12_" class="arrow" onclick="dynsection.toggleFolder('0_1_12_')">&#9658;</span><span id="img_0_1_12_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_12_')">&#160;</span><a class="el" href="dir_23717ebbabf7a51c0558262947e0fe3b.html" target="_self">demo_newlib</a></td><td class="desc"></td></tr> +<tr id="row_0_1_12_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__newlib_2main_8c.html" target="_self">main.c</a></td><td class="desc">Demo/test program for NEORV32's newlib C standard library support </td></tr> +<tr id="row_0_1_13_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_13_" class="arrow" onclick="dynsection.toggleFolder('0_1_13_')">&#9658;</span><span id="img_0_1_13_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_13_')">&#160;</span><a class="el" href="dir_3b3bafc48b460f797485cc75b94aa81c.html" target="_self">demo_onewire</a></td><td class="desc"></td></tr> +<tr id="row_0_1_13_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__onewire_2main_8c.html" target="_self">main.c</a></td><td class="desc">Demo program for the NEORV32 1-Wire interface controller (ONEWIRE) </td></tr> +<tr id="row_0_1_13_1_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="onewire__aux_8h_source.html"><span class="icondoc"></span></a><b>onewire_aux.h</b></td><td class="desc"></td></tr> +<tr id="row_0_1_14_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_14_" class="arrow" onclick="dynsection.toggleFolder('0_1_14_')">&#9658;</span><span id="img_0_1_14_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_14_')">&#160;</span><a class="el" href="dir_b683da3a5fc966bff32ebf7cda721811.html" target="_self">demo_pwm</a></td><td class="desc"></td></tr> +<tr id="row_0_1_14_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__pwm_2main_8c.html" target="_self">main.c</a></td><td class="desc">Simple PWM demo program </td></tr> +<tr id="row_0_1_15_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_15_" class="arrow" onclick="dynsection.toggleFolder('0_1_15_')">&#9658;</span><span id="img_0_1_15_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_15_')">&#160;</span><a class="el" href="dir_c413aba6cb5da07a571465ba333950af.html" target="_self">demo_sdi</a></td><td class="desc"></td></tr> +<tr id="row_0_1_15_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__sdi_2main_8c.html" target="_self">main.c</a></td><td class="desc">SDI test program (direct access to the SDI module) </td></tr> +<tr id="row_0_1_16_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_16_" class="arrow" onclick="dynsection.toggleFolder('0_1_16_')">&#9658;</span><span id="img_0_1_16_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_16_')">&#160;</span><a class="el" href="dir_c2d46947bdd73c33f53326fc5ee3a272.html" target="_self">demo_slink</a></td><td class="desc"></td></tr> +<tr id="row_0_1_16_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__slink_2main_8c.html" target="_self">main.c</a></td><td class="desc">SLINK demo program </td></tr> +<tr id="row_0_1_17_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_17_" class="arrow" onclick="dynsection.toggleFolder('0_1_17_')">&#9658;</span><span id="img_0_1_17_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_17_')">&#160;</span><a class="el" href="dir_4c113257314015688a865e1bb8429184.html" target="_self">demo_spi</a></td><td class="desc"></td></tr> +<tr id="row_0_1_17_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__spi_2main_8c.html" target="_self">main.c</a></td><td class="desc">SPI bus explorer (execute SPI transactions by hand) </td></tr> +<tr id="row_0_1_18_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_18_" class="arrow" onclick="dynsection.toggleFolder('0_1_18_')">&#9658;</span><span id="img_0_1_18_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_18_')">&#160;</span><a class="el" href="dir_8f848e36ac87ced1c361afcc0549ca32.html" target="_self">demo_spi_irq</a></td><td class="desc"></td></tr> +<tr id="row_0_1_18_0_" class="odd" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_0_1_18_0_" class="arrow" onclick="dynsection.toggleFolder('0_1_18_0_')">&#9658;</span><span id="img_0_1_18_0_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_18_0_')">&#160;</span><a class="el" href="dir_9d04cdc586d6978be343bda7adcdc371.html" target="_self">drv</a></td><td class="desc"></td></tr> +<tr id="row_0_1_18_0_0_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__spi__irq_8c.html" target="_self">neorv32_spi_irq.c</a></td><td class="desc">Addition to <a class="el" href="neorv32__spi_8c.html" title="Serial peripheral interface controller (SPI) HW driver source file.">neorv32_spi.c</a>, which provides an IRQ driven data flow </td></tr> +<tr id="row_0_1_18_0_1_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="neorv32__spi__irq_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__spi__irq_8h.html" target="_self">neorv32_spi_irq.h</a></td><td class="desc">Addition to <a class="el" href="neorv32__spi_8h.html" title="Serial peripheral interface controller (SPI) HW driver header file.">neorv32_spi.h</a>, which provides an IRQ driven data flow </td></tr> +<tr id="row_0_1_18_1_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__spi__irq_2main_8c.html" target="_self">main.c</a></td><td class="desc">Example of an ISR driven SPI transfer </td></tr> +<tr id="row_0_1_19_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_19_" class="arrow" onclick="dynsection.toggleFolder('0_1_19_')">&#9658;</span><span id="img_0_1_19_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_19_')">&#160;</span><a class="el" href="dir_237db5b95db643499d4c20f0bc5f6a7d.html" target="_self">demo_trng</a></td><td class="desc"></td></tr> +<tr id="row_0_1_19_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__trng_2main_8c.html" target="_self">main.c</a></td><td class="desc">True random number generator demo program </td></tr> +<tr id="row_0_1_20_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_20_" class="arrow" onclick="dynsection.toggleFolder('0_1_20_')">&#9658;</span><span id="img_0_1_20_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_20_')">&#160;</span><a class="el" href="dir_ebeff77b922fbb914a1494857a82a38e.html" target="_self">demo_twi</a></td><td class="desc"></td></tr> +<tr id="row_0_1_20_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__twi_2main_8c.html" target="_self">main.c</a></td><td class="desc">TWI bus explorer </td></tr> +<tr id="row_0_1_21_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_21_" class="arrow" onclick="dynsection.toggleFolder('0_1_21_')">&#9658;</span><span id="img_0_1_21_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_21_')">&#160;</span><a class="el" href="dir_78d7bfa405ff3a31fa7539cfd8bc8262.html" target="_self">demo_wdt</a></td><td class="desc"></td></tr> +<tr id="row_0_1_21_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__wdt_2main_8c.html" target="_self">main.c</a></td><td class="desc">Watchdog demo program </td></tr> +<tr id="row_0_1_22_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_22_" class="arrow" onclick="dynsection.toggleFolder('0_1_22_')">&#9658;</span><span id="img_0_1_22_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_22_')">&#160;</span><a class="el" href="dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html" target="_self">demo_xip</a></td><td class="desc"></td></tr> +<tr id="row_0_1_22_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__xip_2main_8c.html" target="_self">main.c</a></td><td class="desc">Interactive console program to upload and execute a XIP program </td></tr> +<tr id="row_0_1_23_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_23_" class="arrow" onclick="dynsection.toggleFolder('0_1_23_')">&#9658;</span><span id="img_0_1_23_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_23_')">&#160;</span><a class="el" href="dir_5534fa9035f54ab438a41c43d6f7fc7a.html" target="_self">demo_xirq</a></td><td class="desc"></td></tr> +<tr id="row_0_1_23_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="demo__xirq_2main_8c.html" target="_self">main.c</a></td><td class="desc">External interrupt controller (XIRQ) demo program (using hardware-assisted prioritization) </td></tr> +<tr id="row_0_1_24_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_24_" class="arrow" onclick="dynsection.toggleFolder('0_1_24_')">&#9658;</span><span id="img_0_1_24_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_24_')">&#160;</span><a class="el" href="dir_b5eb9f7d151d147efb5dbda58439e4e7.html" target="_self">dhrystone</a></td><td class="desc"></td></tr> +<tr id="row_0_1_24_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="dhry_8h_source.html"><span class="icondoc"></span></a><b>dhry.h</b></td><td class="desc"></td></tr> +<tr id="row_0_1_25_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_25_" class="arrow" onclick="dynsection.toggleFolder('0_1_25_')">&#9658;</span><span id="img_0_1_25_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_25_')">&#160;</span><a class="el" href="dir_23212395b5ee0866d2fdd629e0ddeae8.html" target="_self">float_corner_test</a></td><td class="desc"></td></tr> +<tr id="row_0_1_25_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="float__corner__test_2main_8c.html" target="_self">main.c</a></td><td class="desc">Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions </td></tr> +<tr id="row_0_1_25_1_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="float__corner__test_2neorv32__zfinx__extension__intrinsics_8h_source.html"><span class="icondoc"></span></a><b>neorv32_zfinx_extension_intrinsics.h</b></td><td class="desc"></td></tr> +<tr id="row_0_1_26_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_26_" class="arrow" onclick="dynsection.toggleFolder('0_1_26_')">&#9658;</span><span id="img_0_1_26_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_26_')">&#160;</span><a class="el" href="dir_e9ffd83269fb7f0c372f5ffbe8545008.html" target="_self">floating_point_test</a></td><td class="desc"></td></tr> +<tr id="row_0_1_26_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="floating__point__test_2main_8c.html" target="_self">main.c</a></td><td class="desc">Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions </td></tr> +<tr id="row_0_1_26_1_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h_source.html"><span class="icondoc"></span></a><a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html" target="_self">neorv32_zfinx_extension_intrinsics.h</a></td><td class="desc">"Intrinsic" library for the NEORV32 single-precision floating-point in x registers (Zfinx) extension </td></tr> +<tr id="row_0_1_27_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_27_" class="arrow" onclick="dynsection.toggleFolder('0_1_27_')">&#9658;</span><span id="img_0_1_27_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_27_')">&#160;</span><a class="el" href="dir_46981071cfd8ec44311b09fdcf6c06a8.html" target="_self">game_of_life</a></td><td class="desc"></td></tr> +<tr id="row_0_1_27_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="game__of__life_2main_8c.html" target="_self">main.c</a></td><td class="desc">Conway's game of life in a UART terminal </td></tr> +<tr id="row_0_1_28_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_28_" class="arrow" onclick="dynsection.toggleFolder('0_1_28_')">&#9658;</span><span id="img_0_1_28_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_28_')">&#160;</span><a class="el" href="dir_d4640980cbf1943e4a4aee6e8b810c7a.html" target="_self">hello_world</a></td><td class="desc"></td></tr> +<tr id="row_0_1_28_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="hello__world_2main_8c.html" target="_self">main.c</a></td><td class="desc">Classic 'hello world' demo program </td></tr> +<tr id="row_0_1_29_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_29_" class="arrow" onclick="dynsection.toggleFolder('0_1_29_')">&#9658;</span><span id="img_0_1_29_" class="iconfclosed" onclick="dynsection.toggleFolder('0_1_29_')">&#160;</span><a class="el" href="dir_7a2c74f70a4cdf2e836a07048e2f71dd.html" target="_self">processor_check</a></td><td class="desc"></td></tr> +<tr id="row_0_1_29_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="processor__check_2main_8c.html" target="_self">main.c</a></td><td class="desc">CPU/Processor test/verification program </td></tr> +<tr id="row_0_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_2_" class="arrow" onclick="dynsection.toggleFolder('0_2_')">&#9660;</span><span id="img_0_2_" class="iconfopen" onclick="dynsection.toggleFolder('0_2_')">&#160;</span><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html" target="_self">lib</a></td><td class="desc"></td></tr> +<tr id="row_0_2_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_2_0_" class="arrow" onclick="dynsection.toggleFolder('0_2_0_')">&#9658;</span><span id="img_0_2_0_" class="iconfclosed" onclick="dynsection.toggleFolder('0_2_0_')">&#160;</span><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html" target="_self">include</a></td><td class="desc"></td></tr> +<tr id="row_0_2_0_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32_8h.html" target="_self">neorv32.h</a></td><td class="desc">Main NEORV32 core library / driver / HAL include file </td></tr> +<tr id="row_0_2_0_1_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__aux_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__aux_8h.html" target="_self">neorv32_aux.h</a></td><td class="desc">General auxiliary functions header file </td></tr> +<tr id="row_0_2_0_2_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__cfs_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__cfs_8h.html" target="_self">neorv32_cfs.h</a></td><td class="desc">Custom Functions Subsystem (CFS) HW driver header file </td></tr> +<tr id="row_0_2_0_3_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__clint_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__clint_8h.html" target="_self">neorv32_clint.h</a></td><td class="desc">Hardware Local Interruptor (CLINT) HW driver header file </td></tr> +<tr id="row_0_2_0_4_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__cpu_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__cpu_8h.html" target="_self">neorv32_cpu.h</a></td><td class="desc">CPU Core Functions HW driver header file </td></tr> +<tr id="row_0_2_0_5_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__cpu__amo_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__cpu__amo_8h.html" target="_self">neorv32_cpu_amo.h</a></td><td class="desc">Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - header file </td></tr> +<tr id="row_0_2_0_6_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__cpu__cfu_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__cpu__cfu_8h.html" target="_self">neorv32_cpu_cfu.h</a></td><td class="desc">CPU Core custom functions unit HW driver header file </td></tr> +<tr id="row_0_2_0_7_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__cpu__csr_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__cpu__csr_8h.html" target="_self">neorv32_cpu_csr.h</a></td><td class="desc">Control and Status Registers (CSR) definitions </td></tr> +<tr id="row_0_2_0_8_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__crc_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__crc_8h.html" target="_self">neorv32_crc.h</a></td><td class="desc">Cyclic redundancy check unit (CRC) HW driver header file </td></tr> +<tr id="row_0_2_0_9_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__dma_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__dma_8h.html" target="_self">neorv32_dma.h</a></td><td class="desc">Direct Memory Access Controller (DMA) HW driver header file </td></tr> +<tr id="row_0_2_0_10_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__gpio_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__gpio_8h.html" target="_self">neorv32_gpio.h</a></td><td class="desc">General purpose input/output port unit (GPIO) HW driver header file </td></tr> +<tr id="row_0_2_0_11_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__gptmr_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__gptmr_8h.html" target="_self">neorv32_gptmr.h</a></td><td class="desc">General purpose timer (GPTMR) HW driver header file </td></tr> +<tr id="row_0_2_0_12_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__intrinsics_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__intrinsics_8h.html" target="_self">neorv32_intrinsics.h</a></td><td class="desc">Helper macros for custom "intrinsics" / instructions </td></tr> +<tr id="row_0_2_0_13_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__legacy_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__legacy_8h.html" target="_self">neorv32_legacy.h</a></td><td class="desc">Legacy compatibility layer </td></tr> +<tr id="row_0_2_0_14_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__neoled_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__neoled_8h.html" target="_self">neorv32_neoled.h</a></td><td class="desc">Smart LED Interface (NEOLED) HW driver header file </td></tr> +<tr id="row_0_2_0_15_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__onewire_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__onewire_8h.html" target="_self">neorv32_onewire.h</a></td><td class="desc">1-Wire Interface Controller (ONEWIRE) HW driver header file </td></tr> +<tr id="row_0_2_0_16_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__pwm_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__pwm_8h.html" target="_self">neorv32_pwm.h</a></td><td class="desc">Pulse-Width Modulation Controller (PWM) HW driver header file </td></tr> +<tr id="row_0_2_0_17_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__rte_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__rte_8h.html" target="_self">neorv32_rte.h</a></td><td class="desc">NEORV32 Runtime Environment </td></tr> +<tr id="row_0_2_0_18_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__sdi_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__sdi_8h.html" target="_self">neorv32_sdi.h</a></td><td class="desc">Serial data interface controller (SPPI) HW driver header file </td></tr> +<tr id="row_0_2_0_19_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__slink_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__slink_8h.html" target="_self">neorv32_slink.h</a></td><td class="desc">Stream Link Interface HW driver header file </td></tr> +<tr id="row_0_2_0_20_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__spi_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__spi_8h.html" target="_self">neorv32_spi.h</a></td><td class="desc">Serial peripheral interface controller (SPI) HW driver header file </td></tr> +<tr id="row_0_2_0_21_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__sysinfo_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__sysinfo_8h.html" target="_self">neorv32_sysinfo.h</a></td><td class="desc">System Information Memory (SYSINFO) HW driver header file </td></tr> +<tr id="row_0_2_0_22_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__trng_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__trng_8h.html" target="_self">neorv32_trng.h</a></td><td class="desc">True Random Number Generator (TRNG) HW driver header file </td></tr> +<tr id="row_0_2_0_23_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__twd_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__twd_8h.html" target="_self">neorv32_twd.h</a></td><td class="desc">Two-Wire Device Controller (TWD) HW driver header file </td></tr> +<tr id="row_0_2_0_24_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__twi_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__twi_8h.html" target="_self">neorv32_twi.h</a></td><td class="desc">Two-Wire Interface Controller (TWI) HW driver header file </td></tr> +<tr id="row_0_2_0_25_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__uart_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__uart_8h.html" target="_self">neorv32_uart.h</a></td><td class="desc">Universal asynchronous receiver/transmitter (UART0/UART1) HW driver header file </td></tr> +<tr id="row_0_2_0_26_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__wdt_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__wdt_8h.html" target="_self">neorv32_wdt.h</a></td><td class="desc">Watchdog Timer (WDT) HW driver header file </td></tr> +<tr id="row_0_2_0_27_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__xip_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__xip_8h.html" target="_self">neorv32_xip.h</a></td><td class="desc">Execute in place module (XIP) HW driver header file </td></tr> +<tr id="row_0_2_0_28_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="neorv32__xirq_8h_source.html"><span class="icondoc"></span></a><a class="el" href="neorv32__xirq_8h.html" target="_self">neorv32_xirq.h</a></td><td class="desc">External Interrupt controller HW driver header file </td></tr> +<tr id="row_0_2_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_2_1_" class="arrow" onclick="dynsection.toggleFolder('0_2_1_')">&#9658;</span><span id="img_0_2_1_" class="iconfclosed" onclick="dynsection.toggleFolder('0_2_1_')">&#160;</span><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html" target="_self">source</a></td><td class="desc"></td></tr> +<tr id="row_0_2_1_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__aux_8c.html" target="_self">neorv32_aux.c</a></td><td class="desc">General auxiliary functions source file </td></tr> +<tr id="row_0_2_1_1_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__cfs_8c.html" target="_self">neorv32_cfs.c</a></td><td class="desc">Custom Functions Subsystem (CFS) HW driver source file </td></tr> +<tr id="row_0_2_1_2_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__clint_8c.html" target="_self">neorv32_clint.c</a></td><td class="desc">Hardware Local Interruptor (CLINT) HW driver source file </td></tr> +<tr id="row_0_2_1_3_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__cpu_8c.html" target="_self">neorv32_cpu.c</a></td><td class="desc">CPU Core Functions HW driver source file </td></tr> +<tr id="row_0_2_1_4_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__cpu__amo_8c.html" target="_self">neorv32_cpu_amo.c</a></td><td class="desc">Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - source file </td></tr> +<tr id="row_0_2_1_5_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__cpu__cfu_8c.html" target="_self">neorv32_cpu_cfu.c</a></td><td class="desc">CPU Core custom functions unit HW driver source file </td></tr> +<tr id="row_0_2_1_6_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__crc_8c.html" target="_self">neorv32_crc.c</a></td><td class="desc">Cyclic redundancy check unit (CRC) HW driver source file </td></tr> +<tr id="row_0_2_1_7_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__gpio_8c.html" target="_self">neorv32_gpio.c</a></td><td class="desc">General purpose input/output port unit (GPIO) HW driver source file </td></tr> +<tr id="row_0_2_1_8_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__gptmr_8c.html" target="_self">neorv32_gptmr.c</a></td><td class="desc">General purpose timer (GPTMR) HW driver source file </td></tr> +<tr id="row_0_2_1_9_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__neoled_8c.html" target="_self">neorv32_neoled.c</a></td><td class="desc">Smart LED Interface (NEOLED) HW driver source file </td></tr> +<tr id="row_0_2_1_10_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__newlib_8c.html" target="_self">neorv32_newlib.c</a></td><td class="desc">NEORV32-specific Newlib system calls </td></tr> +<tr id="row_0_2_1_11_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__onewire_8c.html" target="_self">neorv32_onewire.c</a></td><td class="desc">1-Wire Interface Controller (ONEWIRE) HW driver source file </td></tr> +<tr id="row_0_2_1_12_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__pwm_8c.html" target="_self">neorv32_pwm.c</a></td><td class="desc">Pulse-Width Modulation Controller (PWM) HW driver source file </td></tr> +<tr id="row_0_2_1_13_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__rte_8c.html" target="_self">neorv32_rte.c</a></td><td class="desc">NEORV32 Runtime Environment </td></tr> +<tr id="row_0_2_1_14_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__sdi_8c.html" target="_self">neorv32_sdi.c</a></td><td class="desc">Serial data interface controller (SDI) HW driver source file </td></tr> +<tr id="row_0_2_1_15_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__slink_8c.html" target="_self">neorv32_slink.c</a></td><td class="desc">Stream Link Interface HW driver source file </td></tr> +<tr id="row_0_2_1_16_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__spi_8c.html" target="_self">neorv32_spi.c</a></td><td class="desc">Serial peripheral interface controller (SPI) HW driver source file </td></tr> +<tr id="row_0_2_1_17_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__sysinfo_8c.html" target="_self">neorv32_sysinfo.c</a></td><td class="desc">System Information Memory (SYSINFO) HW driver source file </td></tr> +<tr id="row_0_2_1_18_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__trng_8c.html" target="_self">neorv32_trng.c</a></td><td class="desc">True Random Number Generator (TRNG) HW driver source file </td></tr> +<tr id="row_0_2_1_19_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__twd_8c.html" target="_self">neorv32_twd.c</a></td><td class="desc">Two-Wire Device Controller (TWD) HW driver source file </td></tr> +<tr id="row_0_2_1_20_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__twi_8c.html" target="_self">neorv32_twi.c</a></td><td class="desc">Two-Wire Interface Controller (TWI) HW driver source file </td></tr> +<tr id="row_0_2_1_21_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__uart_8c.html" target="_self">neorv32_uart.c</a></td><td class="desc">Universal asynchronous receiver/transmitter (UART0/UART1) HW driver source file </td></tr> +<tr id="row_0_2_1_22_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__wdt_8c.html" target="_self">neorv32_wdt.c</a></td><td class="desc">Direct Memory Access Controller (DMA) HW driver source file </td></tr> +<tr id="row_0_2_1_23_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__xip_8c.html" target="_self">neorv32_xip.c</a></td><td class="desc">Execute in place module (XIP) HW driver source file </td></tr> +<tr id="row_0_2_1_24_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="neorv32__xirq_8c.html" target="_self">neorv32_xirq.c</a></td><td class="desc">External Interrupt controller HW driver source file </td></tr> +</table> +</div><!-- directory --> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/float__corner__test_2main_8c.html b/sw/float__corner__test_2main_8c.html new file mode 100644 index 0000000000..9cdd9af4b6 --- /dev/null +++ b/sw/float__corner__test_2main_8c.html @@ -0,0 +1,448 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/float_corner_test/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_23212395b5ee0866d2fdd629e0ddeae8.html">float_corner_test</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +<code>#include &lt;float.h&gt;</code><br /> +<code>#include &lt;math.h&gt;</code><br /> +<code>#include &quot;neorv32_zfinx_extension_intrinsics.h&quot;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;(19200)</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a83792c34853f1d2801b59ad46adc7e1e" id="r_a83792c34853f1d2801b59ad46adc7e1e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a83792c34853f1d2801b59ad46adc7e1e">NUM_TEST_CASES</a>&#160;&#160;&#160;(1000000)</td></tr> +<tr class="separator:a83792c34853f1d2801b59ad46adc7e1e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a87f296d7594bb8178cf76f0c045b7013" id="r_a87f296d7594bb8178cf76f0c045b7013"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a87f296d7594bb8178cf76f0c045b7013">SILENT_MODE</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a87f296d7594bb8178cf76f0c045b7013"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa3b6c4d49be7372de9e771a0475306ac" id="r_aa3b6c4d49be7372de9e771a0475306ac"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa3b6c4d49be7372de9e771a0475306ac">RUN_CONV_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:aa3b6c4d49be7372de9e771a0475306ac"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2d16b9e484b7af7897c7ae83f945ceca" id="r_a2d16b9e484b7af7897c7ae83f945ceca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2d16b9e484b7af7897c7ae83f945ceca">RUN_ADDSUB_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a2d16b9e484b7af7897c7ae83f945ceca"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a97323ecaf1ae85e68a736b06bc3b58f8" id="r_a97323ecaf1ae85e68a736b06bc3b58f8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a97323ecaf1ae85e68a736b06bc3b58f8">RUN_MUL_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a97323ecaf1ae85e68a736b06bc3b58f8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aed386f612417aeeeac8b08db27d515e4" id="r_aed386f612417aeeeac8b08db27d515e4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aed386f612417aeeeac8b08db27d515e4">RUN_MINMAX_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:aed386f612417aeeeac8b08db27d515e4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4ee0f6d28896a97d2c0cad866e77b874" id="r_a4ee0f6d28896a97d2c0cad866e77b874"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4ee0f6d28896a97d2c0cad866e77b874">RUN_COMPARE_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a4ee0f6d28896a97d2c0cad866e77b874"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a94f0b0908f48f383145ed61ef8eb0713" id="r_a94f0b0908f48f383145ed61ef8eb0713"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a94f0b0908f48f383145ed61ef8eb0713">RUN_SGNINJ_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a94f0b0908f48f383145ed61ef8eb0713"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7e134923925fa24fd1090281c3a416c3" id="r_a7e134923925fa24fd1090281c3a416c3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7e134923925fa24fd1090281c3a416c3">RUN_CLASSIFY_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a7e134923925fa24fd1090281c3a416c3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a923de9c3e55322d85522740c0d0ff867" id="r_a923de9c3e55322d85522740c0d0ff867"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a923de9c3e55322d85522740c0d0ff867">RUN_UNAVAIL_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a923de9c3e55322d85522740c0d0ff867"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6969308bd3633928893a2666f1df66fc" id="r_a6969308bd3633928893a2666f1df66fc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6969308bd3633928893a2666f1df66fc">RUN_TIMING_TESTS</a>&#160;&#160;&#160;(0)</td></tr> +<tr class="separator:a6969308bd3633928893a2666f1df66fc"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a73c70bd0fb6d695cb113eaeb50923e3e" id="r_a73c70bd0fb6d695cb113eaeb50923e3e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a73c70bd0fb6d695cb113eaeb50923e3e">get_test_vector</a> (void)</td></tr> +<tr class="separator:a73c70bd0fb6d695cb113eaeb50923e3e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a941ef8d24fd8e8fe4536626b2ce72410" id="r_a941ef8d24fd8e8fe4536626b2ce72410"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a941ef8d24fd8e8fe4536626b2ce72410">verify_result</a> (uint32_t num, uint32_t opa, uint32_t opb, uint32_t ref, uint32_t res)</td></tr> +<tr class="separator:a941ef8d24fd8e8fe4536626b2ce72410"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1740720aa8ce1a30fcf642be9140d203" id="r_a1740720aa8ce1a30fcf642be9140d203"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1740720aa8ce1a30fcf642be9140d203">print_report</a> (uint32_t num_err)</td></tr> +<tr class="separator:a1740720aa8ce1a30fcf642be9140d203"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions. </p> +<dl class="section author"><dt>Author</dt><dd>Mikael Mortensen </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;(19200)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a83792c34853f1d2801b59ad46adc7e1e" name="a83792c34853f1d2801b59ad46adc7e1e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a83792c34853f1d2801b59ad46adc7e1e">&#9670;&#160;</a></span>NUM_TEST_CASES</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NUM_TEST_CASES&#160;&#160;&#160;(1000000)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a2d16b9e484b7af7897c7ae83f945ceca" name="a2d16b9e484b7af7897c7ae83f945ceca"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2d16b9e484b7af7897c7ae83f945ceca">&#9670;&#160;</a></span>RUN_ADDSUB_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_ADDSUB_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a7e134923925fa24fd1090281c3a416c3" name="a7e134923925fa24fd1090281c3a416c3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7e134923925fa24fd1090281c3a416c3">&#9670;&#160;</a></span>RUN_CLASSIFY_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_CLASSIFY_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a4ee0f6d28896a97d2c0cad866e77b874" name="a4ee0f6d28896a97d2c0cad866e77b874"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4ee0f6d28896a97d2c0cad866e77b874">&#9670;&#160;</a></span>RUN_COMPARE_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_COMPARE_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="aa3b6c4d49be7372de9e771a0475306ac" name="aa3b6c4d49be7372de9e771a0475306ac"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa3b6c4d49be7372de9e771a0475306ac">&#9670;&#160;</a></span>RUN_CONV_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_CONV_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="aed386f612417aeeeac8b08db27d515e4" name="aed386f612417aeeeac8b08db27d515e4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aed386f612417aeeeac8b08db27d515e4">&#9670;&#160;</a></span>RUN_MINMAX_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_MINMAX_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a97323ecaf1ae85e68a736b06bc3b58f8" name="a97323ecaf1ae85e68a736b06bc3b58f8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a97323ecaf1ae85e68a736b06bc3b58f8">&#9670;&#160;</a></span>RUN_MUL_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_MUL_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a94f0b0908f48f383145ed61ef8eb0713" name="a94f0b0908f48f383145ed61ef8eb0713"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a94f0b0908f48f383145ed61ef8eb0713">&#9670;&#160;</a></span>RUN_SGNINJ_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_SGNINJ_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a6969308bd3633928893a2666f1df66fc" name="a6969308bd3633928893a2666f1df66fc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6969308bd3633928893a2666f1df66fc">&#9670;&#160;</a></span>RUN_TIMING_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_TIMING_TESTS&#160;&#160;&#160;(0)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a923de9c3e55322d85522740c0d0ff867" name="a923de9c3e55322d85522740c0d0ff867"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a923de9c3e55322d85522740c0d0ff867">&#9670;&#160;</a></span>RUN_UNAVAIL_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_UNAVAIL_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a87f296d7594bb8178cf76f0c045b7013" name="a87f296d7594bb8178cf76f0c045b7013"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a87f296d7594bb8178cf76f0c045b7013">&#9670;&#160;</a></span>SILENT_MODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SILENT_MODE&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a73c70bd0fb6d695cb113eaeb50923e3e" name="a73c70bd0fb6d695cb113eaeb50923e3e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a73c70bd0fb6d695cb113eaeb50923e3e">&#9670;&#160;</a></span>get_test_vector()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t get_test_vector </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Generate 32-bit test data (including special values like INFINITY every now and then).</p> +<dl class="section return"><dt>Returns</dt><dd>Test data (32-bit). </dd></dl> + +</div> +</div> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function; test all available operations of the NEORV32 'Zfinx' extensions using bit floating-point hardware intrinsics and software-only reference functions (emulation).</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the Zfinx CPU extension.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +<a id="a1740720aa8ce1a30fcf642be9140d203" name="a1740720aa8ce1a30fcf642be9140d203"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1740720aa8ce1a30fcf642be9140d203">&#9670;&#160;</a></span>print_report()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void print_report </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>num_err</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print test report.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">num_err</td><td>Number or errors in this test. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a941ef8d24fd8e8fe4536626b2ce72410" name="a941ef8d24fd8e8fe4536626b2ce72410"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a941ef8d24fd8e8fe4536626b2ce72410">&#9670;&#160;</a></span>verify_result()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t verify_result </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>num</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>opa</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>opb</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>ref</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>res</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Verify results (software reference vs. actual hardware).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">num</td><td>Test case number </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">opa</td><td>Operand 1 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">opb</td><td>Operand 2 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">ref</td><td>Software reference </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">res</td><td>Actual results from hardware </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>zero if results are equal. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/float__corner__test_2neorv32__zfinx__extension__intrinsics_8h_source.html b/sw/float__corner__test_2neorv32__zfinx__extension__intrinsics_8h_source.html new file mode 100644 index 0000000000..c75412eda2 --- /dev/null +++ b/sw/float__corner__test_2neorv32__zfinx__extension__intrinsics_8h_source.html @@ -0,0 +1,918 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/float_corner_test/neorv32_zfinx_extension_intrinsics.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_23212395b5ee0866d2fdd629e0ddeae8.html">float_corner_test</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_zfinx_extension_intrinsics.h</div></div> +</div><!--header--> +<div class="contents"> +<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// #################################################################################################</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// # &lt;&lt; NEORV32 - Intrinsics + Emulation Functions for the RISC-V &quot;Zfinx&quot; CPU extension &gt;&gt; #</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// # ********************************************************************************************* #</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// # The intrinsics provided by this library allow to use the hardware floating-point unit of the #</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// # RISC-V Zfinx CPU extension without the need for Zfinx support by the compiler / toolchain. #</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// # ********************************************************************************************* #</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// # BSD 3-Clause License #</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">// # Copyright (c) 2022, Stephan Nolting. All rights reserved. #</span></div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">// # Redistribution and use in source and binary forms, with or without modification, are #</span></div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">// # permitted provided that the following conditions are met: #</span></div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">// # 1. Redistributions of source code must retain the above copyright notice, this list of #</span></div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">// # conditions and the following disclaimer. #</span></div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">// # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment">// # conditions and the following disclaimer in the documentation and/or other materials #</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">// # provided with the distribution. #</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">// # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">// # endorse or promote products derived from this software without specific prior written #</span></div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">// # permission. #</span></div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">// # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND ANY EXPRESS #</span></div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">// # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #</span></div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">// # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #</span></div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">// # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #</span></div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">// # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #</span></div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">// # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #</span></div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">// # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #</span></div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">// # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #</span></div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">// # OF THE POSSIBILITY OF SUCH DAMAGE. #</span></div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment">// # ********************************************************************************************* #</span></div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">// # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">// #################################################################################################</span></div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#ifndef neorv32_zfinx_extension_intrinsics_h</span></div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#define neorv32_zfinx_extension_intrinsics_h</span></div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#define __USE_GNU</span></div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor">#define _GNU_SOURCE</span></div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="preprocessor">#include &lt;float.h&gt;</span></div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="preprocessor">#include &lt;fenv.h&gt;</span></div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="preprocessor">#include &lt;math.h&gt;</span></div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="preprocessor">#if defined __riscv_f || (__riscv_flen == 32)</span></div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="preprocessor"> #error Application programs using the Zfinx intrinsic library have to be compiled WITHOUT the &lt;F&gt; MARCH ISA attribute!</span></div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00075" data-start="{" data-end="};"> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="unionfloat__conv__t.html"> 75</a></span><span class="keyword">typedef</span> <span class="keyword">union</span></div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span>{</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606"> 77</a></span> uint32_t <a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>; </div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788"> 78</a></span> <span class="keywordtype">float</span> <a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>; </div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span>} <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a>;</div> +</div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment">// Helper functions</span></div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="keywordtype">float</span> subnormal_flush(<span class="keywordtype">float</span> tmp) {</div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">float</span> res = tmp;</div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="comment">// flush to zero if subnormal</span></div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">if</span> (fpclassify(tmp) == FP_SUBNORMAL) {</div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">if</span> (signbit(tmp) != 0) {</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> res = -0.0f;</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> }</div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> res = +0.0f;</div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> }</div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> }</div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">return</span> res;</div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span>}</div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment">// Exception access</span></div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span>uint32_t get_hw_exceptions(<span class="keywordtype">void</span>) {</div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> uint32_t res = <a class="code hl_function" href="neorv32__cpu_8h.html#aab7a9f9cf608599f2b124dd499cb8418">neorv32_cpu_csr_read</a>(<a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a">CSR_FFLAGS</a>);</div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <a class="code hl_function" href="neorv32__cpu_8h.html#afb5ef6e0b1a3e26570edfd8379490455">neorv32_cpu_csr_write</a>(<a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a">CSR_FFLAGS</a>, 0); <span class="comment">// clear status word</span></div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">return</span> res;</div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span>}</div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="comment">// &quot;Intrinsics&quot;</span></div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fadds(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0000000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span>}</div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fsubs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0000100, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span>}</div> +<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div> +<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div> +<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fmuls(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0001000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span>}</div> +<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div> +<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div> +<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fmins(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> </div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0010100, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span>}</div> +<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div> +<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> </div> +<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fmaxs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div> +<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0010100, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b001, 0b1010011);</div> +<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span>}</div> +<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> </div> +<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> </div> +<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) riscv_intrinsic_fcvt_wus(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> </div> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa;</div> +<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> </div> +<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">return</span> CUSTOM_INSTR_R2_TYPE(0b1100000, 0b00001, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span>}</div> +<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> </div> +<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> </div> +<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span><span class="keyword">inline</span> int32_t __attribute__ ((always_inline)) riscv_intrinsic_fcvt_ws(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> </div> +<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa;</div> +<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> </div> +<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">return</span> (int32_t)CUSTOM_INSTR_R2_TYPE(0b1100000, 0b00000, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span>}</div> +<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> </div> +<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> </div> +<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fcvt_swu(uint32_t rs1) {</div> +<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> </div> +<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> res;</div> +<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> </div> +<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R2_TYPE(0b1101000, 0b00001, rs1, 0b000, 0b1010011);</div> +<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span>}</div> +<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> </div> +<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> </div> +<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fcvt_sw(int32_t rs1) {</div> +<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> </div> +<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> res;</div> +<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> </div> +<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R2_TYPE(0b1101000, 0b00000, rs1, 0b000, 0b1010011);</div> +<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span>}</div> +<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> </div> +<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> </div> +<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) riscv_intrinsic_feqs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div> +<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb;</div> +<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> </div> +<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">return</span> CUSTOM_INSTR_R3_TYPE(0b1010000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b010, 0b1010011);</div> +<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span>}</div> +<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div> +<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> </div> +<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) riscv_intrinsic_flts(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> </div> +<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb;</div> +<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> </div> +<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">return</span> CUSTOM_INSTR_R3_TYPE(0b1010000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b001, 0b1010011);</div> +<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span>}</div> +<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> </div> +<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> </div> +<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) riscv_intrinsic_fles(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> </div> +<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb;</div> +<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> </div> +<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">return</span> CUSTOM_INSTR_R3_TYPE(0b1010000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span>}</div> +<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> </div> +<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> </div> +<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fsgnjs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> </div> +<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> </div> +<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0010000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span>}</div> +<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> </div> +<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> </div> +<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fsgnjns(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> </div> +<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> </div> +<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0010000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b001, 0b1010011);</div> +<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span>}</div> +<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> </div> +<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> </div> +<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fsgnjxs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> </div> +<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> </div> +<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0010000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b010, 0b1010011);</div> +<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span>}</div> +<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> </div> +<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> </div> +<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) riscv_intrinsic_fclasss(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> </div> +<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa;</div> +<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> </div> +<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <span class="keywordflow">return</span> CUSTOM_INSTR_R2_TYPE(0b1110000, 0b00000, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b001, 0b1010011);</div> +<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span>}</div> +<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> </div> +<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> </div> +<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span><span class="comment">// !!! UNSUPPORTED instructions !!!</span></div> +<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> </div> +<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fdivs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> </div> +<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> </div> +<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0001100, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span>}</div> +<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> </div> +<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> </div> +<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fsqrts(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> </div> +<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, res;</div> +<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> </div> +<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R2_TYPE(0b0101100, 0b00000, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span>}</div> +<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> </div> +<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> </div> +<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fmadds(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> </div> +<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, opc, res;</div> +<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs3;</div> +<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> </div> +<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R4_TYPE(opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1000011);</div> +<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span>}</div> +<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> </div> +<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> </div> +<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fmsubs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> </div> +<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, opc, res;</div> +<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs3;</div> +<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> </div> +<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R4_TYPE(opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1000111);</div> +<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span>}</div> +<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> </div> +<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> </div> +<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fnmsubs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> </div> +<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, opc, res;</div> +<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs3;</div> +<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> </div> +<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R4_TYPE(opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1001011);</div> +<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span>}</div> +<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> </div> +<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> </div> +<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fnmadds(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> </div> +<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, opc, res;</div> +<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs3;</div> +<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> </div> +<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R4_TYPE(opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1001111);</div> +<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span>}</div> +<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> </div> +<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> </div> +<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span><span class="comment">// Emulation functions</span></div> +<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> </div> +<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fadds(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> </div> +<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> </div> +<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <span class="keywordtype">float</span> res = opa + opb;</div> +<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> </div> +<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="comment">// make NAN canonical</span></div> +<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> <span class="keywordflow">if</span> (fpclassify(res) == FP_NAN) {</div> +<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> res = NAN;</div> +<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> }</div> +<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> </div> +<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span>}</div> +<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> </div> +<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> </div> +<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fsubs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> </div> +<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> </div> +<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <span class="keywordtype">float</span> res = opa - opb;</div> +<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> </div> +<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="comment">// make NAN canonical</span></div> +<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">if</span> (fpclassify(res) == FP_NAN) {</div> +<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> res = NAN;</div> +<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> }</div> +<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> </div> +<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span>}</div> +<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> </div> +<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> </div> +<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fmuls(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> </div> +<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> </div> +<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> <span class="keywordtype">float</span> res = opa * opb;</div> +<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span>}</div> +<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> </div> +<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> </div> +<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fmins(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> </div> +<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> </div> +<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <span class="keyword">union </span>{</div> +<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> uint32_t binary_value; </div> +<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> <span class="keywordtype">float</span> float_value; </div> +<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> } tmp_a, tmp_b;</div> +<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> </div> +<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">if</span> ((fpclassify(opa) == FP_NAN) &amp;&amp; (fpclassify(opb) == FP_NAN)) {</div> +<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <span class="keywordflow">return</span> nanf(<span class="stringliteral">&quot;&quot;</span>);</div> +<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> }</div> +<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> </div> +<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">if</span> (fpclassify(opa) == FP_NAN) {</div> +<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> <span class="keywordflow">return</span> opb;</div> +<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> }</div> +<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> </div> +<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">if</span> (fpclassify(opb) == FP_NAN) {</div> +<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> <span class="keywordflow">return</span> opa;</div> +<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> }</div> +<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> </div> +<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <span class="comment">// RISC-V spec: -0 &lt; +0</span></div> +<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> tmp_a.float_value = opa;</div> +<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> tmp_b.float_value = opb;</div> +<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">if</span> (((tmp_a.binary_value == 0x80000000) &amp;&amp; (tmp_b.binary_value == 0x00000000)) ||</div> +<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> ((tmp_a.binary_value == 0x00000000) &amp;&amp; (tmp_b.binary_value == 0x80000000))) {</div> +<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">return</span> -0.0f;</div> +<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> }</div> +<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> </div> +<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <span class="keywordflow">return</span> fmin(opa, opb);</div> +<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span>}</div> +<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> </div> +<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> </div> +<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fmaxs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> </div> +<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> </div> +<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> <span class="keyword">union </span>{</div> +<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> uint32_t binary_value; </div> +<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> <span class="keywordtype">float</span> float_value; </div> +<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> } tmp_a, tmp_b;</div> +<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> </div> +<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> </div> +<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> <span class="keywordflow">if</span> ((fpclassify(opa) == FP_NAN) &amp;&amp; (fpclassify(opb) == FP_NAN)) {</div> +<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <span class="keywordflow">return</span> nanf(<span class="stringliteral">&quot;&quot;</span>);</div> +<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> }</div> +<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> </div> +<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">if</span> (fpclassify(opa) == FP_NAN) {</div> +<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">return</span> opb;</div> +<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> }</div> +<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> </div> +<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> <span class="keywordflow">if</span> (fpclassify(opb) == FP_NAN) {</div> +<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">return</span> opa;</div> +<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> }</div> +<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> </div> +<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="comment">// RISC-V spec: -0 &lt; +0</span></div> +<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> tmp_a.float_value = opa;</div> +<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> tmp_b.float_value = opb;</div> +<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> <span class="keywordflow">if</span> (((tmp_a.binary_value == 0x80000000) &amp;&amp; (tmp_b.binary_value == 0x00000000)) ||</div> +<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> ((tmp_a.binary_value == 0x00000000) &amp;&amp; (tmp_b.binary_value == 0x80000000))) {</div> +<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> <span class="keywordflow">return</span> +0.0f;</div> +<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> }</div> +<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> </div> +<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> <span class="keywordflow">return</span> fmax(opa, opb);</div> +<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span>}</div> +<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> </div> +<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> </div> +<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span>uint32_t __attribute__ ((noinline)) riscv_emulate_fcvt_wus(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> </div> +<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> </div> +<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <span class="keywordflow">return</span> (uint32_t)roundf(opa);</div> +<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span>}</div> +<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> </div> +<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> </div> +<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span>int32_t __attribute__ ((noinline)) riscv_emulate_fcvt_ws(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> </div> +<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> </div> +<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> <span class="keywordflow">return</span> (int32_t)roundf(opa);</div> +<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span>}</div> +<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> </div> +<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> </div> +<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fcvt_swu(uint32_t rs1) {</div> +<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> </div> +<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> <span class="keywordflow">return</span> (<span class="keywordtype">float</span>)rs1;</div> +<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span>}</div> +<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> </div> +<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> </div> +<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fcvt_sw(int32_t rs1) {</div> +<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> </div> +<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> <span class="keywordflow">return</span> (<span class="keywordtype">float</span>)rs1;</div> +<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span>}</div> +<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> </div> +<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> </div> +<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span>uint32_t __attribute__ ((noinline)) riscv_emulate_feqs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> </div> +<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> </div> +<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> <span class="keywordflow">if</span> ((fpclassify(opa) == FP_NAN) || (fpclassify(opb) == FP_NAN)) {</div> +<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> }</div> +<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> </div> +<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <span class="keywordflow">if</span> isless(opa, opb) {</div> +<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> }</div> +<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> isgreater(opa, opb) {</div> +<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> }</div> +<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> <span class="keywordflow">return</span> 1;</div> +<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> }</div> +<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span>}</div> +<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> </div> +<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> </div> +<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span>uint32_t __attribute__ ((noinline)) riscv_emulate_flts(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> </div> +<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> </div> +<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> <span class="keywordflow">if</span> ((fpclassify(opa) == FP_NAN) || (fpclassify(opb) == FP_NAN)) {</div> +<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> }</div> +<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> </div> +<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="keywordflow">if</span> isless(opa, opb) {</div> +<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> <span class="keywordflow">return</span> 1;</div> +<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> }</div> +<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> }</div> +<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span>}</div> +<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> </div> +<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> </div> +<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span>uint32_t __attribute__ ((noinline)) riscv_emulate_fles(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> </div> +<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> </div> +<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">if</span> ((fpclassify(opa) == FP_NAN) || (fpclassify(opb) == FP_NAN)) {</div> +<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> }</div> +<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> </div> +<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> <span class="keywordflow">if</span> islessequal(opa, opb) {</div> +<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">return</span> 1;</div> +<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> }</div> +<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> }</div> +<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span>}</div> +<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> </div> +<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> </div> +<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fsgnjs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> </div> +<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> </div> +<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> <span class="keywordtype">int</span> sign_1 = (int)signbit(opa);</div> +<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> <span class="keywordtype">int</span> sign_2 = (int)signbit(opb);</div> +<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> <span class="keywordtype">float</span> res = 0;</div> +<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> </div> +<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> <span class="keywordflow">if</span> (sign_2 != 0) { <span class="comment">// opb is negative</span></div> +<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> <span class="keywordflow">if</span> (sign_1 == 0) {</div> +<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span> res = -opa;</div> +<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> }</div> +<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> res = opa;</div> +<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> }</div> +<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> }</div> +<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> <span class="keywordflow">else</span> { <span class="comment">// opb is positive</span></div> +<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> <span class="keywordflow">if</span> (sign_1 == 0) {</div> +<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> res = opa;</div> +<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> }</div> +<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> res = -opa;</div> +<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> }</div> +<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> }</div> +<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> </div> +<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> <span class="keywordflow">return</span> res;</div> +<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span>}</div> +<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> </div> +<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> </div> +<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fsgnjns(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> </div> +<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> </div> +<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> <span class="keywordtype">int</span> sign_1 = (int)signbit(opa);</div> +<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> <span class="keywordtype">int</span> sign_2 = (int)signbit(opb);</div> +<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> <span class="keywordtype">float</span> res = 0;</div> +<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> </div> +<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> <span class="keywordflow">if</span> (sign_2 != 0) { <span class="comment">// opb is negative</span></div> +<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> <span class="keywordflow">if</span> (sign_1 == 0) {</div> +<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> res = opa;</div> +<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> }</div> +<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> res = -opa;</div> +<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> }</div> +<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> }</div> +<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> <span class="keywordflow">else</span> { <span class="comment">// opb is positive</span></div> +<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> <span class="keywordflow">if</span> (sign_1 == 0) {</div> +<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> res = -opa;</div> +<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> }</div> +<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> res = opa;</div> +<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> }</div> +<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> }</div> +<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> </div> +<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> <span class="keywordflow">return</span> res;</div> +<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span>}</div> +<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> </div> +<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> </div> +<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fsgnjxs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> </div> +<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> </div> +<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> <span class="keywordtype">int</span> sign_1 = (int)signbit(opa);</div> +<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> <span class="keywordtype">int</span> sign_2 = (int)signbit(opb);</div> +<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> <span class="keywordtype">float</span> res = 0;</div> +<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> </div> +<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> <span class="keywordflow">if</span> (((sign_1 == 0) &amp;&amp; (sign_2 != 0)) || ((sign_1 != 0) &amp;&amp; (sign_2 == 0))) {</div> +<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> <span class="keywordflow">if</span> (sign_1 == 0) {</div> +<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> res = -opa;</div> +<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> }</div> +<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> res = opa;</div> +<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> }</div> +<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> }</div> +<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> <span class="keywordflow">if</span> (sign_1 == 0) {</div> +<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> res = opa;</div> +<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> }</div> +<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> res = -opa;</div> +<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> }</div> +<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> }</div> +<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> </div> +<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> <span class="keywordflow">return</span> res;</div> +<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span>}</div> +<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> </div> +<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> </div> +<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span>uint32_t __attribute__ ((noinline)) riscv_emulate_fclasss(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> </div> +<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> </div> +<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span> <span class="keyword">union </span>{</div> +<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> uint32_t binary_value; </div> +<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span> <span class="keywordtype">float</span> float_value; </div> +<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> } aux;</div> +<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span> </div> +<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> <span class="comment">// RISC-V classify result layout</span></div> +<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> <span class="keyword">const</span> uint32_t CLASS_NEG_INF = 1 &lt;&lt; 0; <span class="comment">// negative infinity</span></div> +<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span> <span class="keyword">const</span> uint32_t CLASS_NEG_NORM = 1 &lt;&lt; 1; <span class="comment">// negative normal number</span></div> +<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span> <span class="keyword">const</span> uint32_t CLASS_NEG_DENORM = 1 &lt;&lt; 2; <span class="comment">// negative subnormal number</span></div> +<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span> <span class="keyword">const</span> uint32_t CLASS_NEG_ZERO = 1 &lt;&lt; 3; <span class="comment">// negative zero</span></div> +<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"> 946</span> <span class="keyword">const</span> uint32_t CLASS_POS_ZERO = 1 &lt;&lt; 4; <span class="comment">// positive zero</span></div> +<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span> <span class="keyword">const</span> uint32_t CLASS_POS_DENORM = 1 &lt;&lt; 5; <span class="comment">// positive subnormal number</span></div> +<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"> 948</span> <span class="keyword">const</span> uint32_t CLASS_POS_NORM = 1 &lt;&lt; 6; <span class="comment">// positive normal number</span></div> +<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span> <span class="keyword">const</span> uint32_t CLASS_POS_INF = 1 &lt;&lt; 7; <span class="comment">// positive infinity</span></div> +<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> <span class="keyword">const</span> uint32_t CLASS_SNAN = 1 &lt;&lt; 8; <span class="comment">// signaling NaN (sNaN)</span></div> +<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> <span class="keyword">const</span> uint32_t CLASS_QNAN = 1 &lt;&lt; 9; <span class="comment">// quiet NaN (qNaN)</span></div> +<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> </div> +<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span> <span class="keywordtype">int</span> tmp = fpclassify(opa);</div> +<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> <span class="keywordtype">int</span> sgn = (int)signbit(opa);</div> +<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span> </div> +<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span> uint32_t res = 0;</div> +<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"> 957</span> </div> +<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> <span class="comment">// infinity</span></div> +<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span> <span class="keywordflow">if</span> (tmp == FP_INFINITE) {</div> +<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"> 960</span> <span class="keywordflow">if</span> (sgn) { res |= CLASS_NEG_INF; }</div> +<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span> <span class="keywordflow">else</span> { res |= CLASS_POS_INF; }</div> +<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"> 962</span> }</div> +<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"> 963</span> </div> +<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span> <span class="comment">// zero</span></div> +<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"> 965</span> <span class="keywordflow">if</span> (tmp == FP_ZERO) {</div> +<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> <span class="keywordflow">if</span> (sgn) { res |= CLASS_NEG_ZERO; }</div> +<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> <span class="keywordflow">else</span> { res |= CLASS_POS_ZERO; }</div> +<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> }</div> +<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span> </div> +<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> <span class="comment">// normal</span></div> +<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span> <span class="keywordflow">if</span> (tmp == FP_NORMAL) {</div> +<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span> <span class="keywordflow">if</span> (sgn) { res |= CLASS_NEG_NORM; }</div> +<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"> 973</span> <span class="keywordflow">else</span> { res |= CLASS_POS_NORM; }</div> +<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span> }</div> +<div class="line"><a id="l00975" name="l00975"></a><span class="lineno"> 975</span> </div> +<div class="line"><a id="l00976" name="l00976"></a><span class="lineno"> 976</span> <span class="comment">// subnormal</span></div> +<div class="line"><a id="l00977" name="l00977"></a><span class="lineno"> 977</span> <span class="keywordflow">if</span> (tmp == FP_SUBNORMAL) {</div> +<div class="line"><a id="l00978" name="l00978"></a><span class="lineno"> 978</span> <span class="keywordflow">if</span> (sgn) { res |= CLASS_NEG_DENORM; }</div> +<div class="line"><a id="l00979" name="l00979"></a><span class="lineno"> 979</span> <span class="keywordflow">else</span> { res |= CLASS_POS_DENORM; }</div> +<div class="line"><a id="l00980" name="l00980"></a><span class="lineno"> 980</span> }</div> +<div class="line"><a id="l00981" name="l00981"></a><span class="lineno"> 981</span> </div> +<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"> 982</span> <span class="comment">// NaN</span></div> +<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"> 983</span> <span class="keywordflow">if</span> (tmp == FP_NAN) {</div> +<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"> 984</span> aux.float_value = opa;</div> +<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"> 985</span> <span class="keywordflow">if</span> ((aux.binary_value &gt;&gt; 22) &amp; 0b1) { <span class="comment">// bit 22 (mantissa&#39;s MSB) is set -&gt; canonical (quiet) NAN</span></div> +<div class="line"><a id="l00986" name="l00986"></a><span class="lineno"> 986</span> res |= CLASS_QNAN;</div> +<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"> 987</span> }</div> +<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"> 988</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> res |= CLASS_SNAN;</div> +<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> }</div> +<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> }</div> +<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> </div> +<div class="line"><a id="l00993" name="l00993"></a><span class="lineno"> 993</span> <span class="keywordflow">return</span> res;</div> +<div class="line"><a id="l00994" name="l00994"></a><span class="lineno"> 994</span>}</div> +<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span> </div> +<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span> </div> +<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"> 997</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fdivs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> </div> +<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span> </div> +<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> <span class="keywordtype">float</span> res = opa / opb;</div> +<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span>}</div> +<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span> </div> +<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> </div> +<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fsqrts(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span> </div> +<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span> </div> +<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span> <span class="keywordtype">float</span> res = sqrtf(opa);</div> +<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span>}</div> +<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> </div> +<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span> </div> +<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fmadds(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> </div> +<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"> 1041</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"> 1043</span> <span class="keywordtype">float</span> opc = subnormal_flush(rs3);</div> +<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"> 1044</span> </div> +<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span> <span class="keywordtype">float</span> res = (opa * opb) + opc;</div> +<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span>}</div> +<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span> </div> +<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"> 1049</span> </div> +<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fmsubs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span> </div> +<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span> <span class="keywordtype">float</span> opc = subnormal_flush(rs3);</div> +<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span> </div> +<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span> <span class="keywordtype">float</span> res = (opa * opb) - opc;</div> +<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span>}</div> +<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span> </div> +<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span> </div> +<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fnmsubs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span> </div> +<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> <span class="keywordtype">float</span> opc = subnormal_flush(rs3);</div> +<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span> </div> +<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> <span class="keywordtype">float</span> res = -(opa * opb) + opc;</div> +<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span>}</div> +<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> </div> +<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span> </div> +<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fnmadds(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span> </div> +<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> <span class="keywordtype">float</span> opc = subnormal_flush(rs3);</div> +<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> </div> +<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span> <span class="keywordtype">float</span> res = -(opa * opb) - opc;</div> +<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span>}</div> +<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> </div> +<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> </div> +<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_zfinx_extension_intrinsics_h</span></div> +<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> </div> +<div class="ttc" id="aneorv32__cpu_8h_html_aab7a9f9cf608599f2b124dd499cb8418"><div class="ttname"><a href="neorv32__cpu_8h.html#aab7a9f9cf608599f2b124dd499cb8418">neorv32_cpu_csr_read</a></div><div class="ttdeci">uint32_t neorv32_cpu_csr_read(const int csr_id)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:174</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_afb5ef6e0b1a3e26570edfd8379490455"><div class="ttname"><a href="neorv32__cpu_8h.html#afb5ef6e0b1a3e26570edfd8379490455">neorv32_cpu_csr_write</a></div><div class="ttdeci">void neorv32_cpu_csr_write(const int csr_id, uint32_t data)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:188</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a">CSR_FFLAGS</a></div><div class="ttdeci">@ CSR_FFLAGS</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:27</div></div> +<div class="ttc" id="aunionfloat__conv__t_html"><div class="ttname"><a href="unionfloat__conv__t.html">float_conv_t</a></div><div class="ttdef"><b>Definition</b> neorv32_zfinx_extension_intrinsics.h:76</div></div> +<div class="ttc" id="aunionfloat__conv__t_html_a59ad19d41b1d973a6bda9032e1937606"><div class="ttname"><a href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">float_conv_t::binary_value</a></div><div class="ttdeci">uint32_t binary_value</div><div class="ttdef"><b>Definition</b> neorv32_zfinx_extension_intrinsics.h:77</div></div> +<div class="ttc" id="aunionfloat__conv__t_html_a95f2e38b437bd8d4e8de7f61d7474788"><div class="ttname"><a href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_conv_t::float_value</a></div><div class="ttdeci">float float_value</div><div class="ttdef"><b>Definition</b> neorv32_zfinx_extension_intrinsics.h:78</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/floating__point__test_2main_8c.html b/sw/floating__point__test_2main_8c.html new file mode 100644 index 0000000000..649e29408e --- /dev/null +++ b/sw/floating__point__test_2main_8c.html @@ -0,0 +1,492 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/floating_point_test/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_e9ffd83269fb7f0c372f5ffbe8545008.html">floating_point_test</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +<code>#include &lt;float.h&gt;</code><br /> +<code>#include &lt;math.h&gt;</code><br /> +<code>#include &quot;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h_source.html">neorv32_zfinx_extension_intrinsics.h</a>&quot;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;(19200)</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a83792c34853f1d2801b59ad46adc7e1e" id="r_a83792c34853f1d2801b59ad46adc7e1e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a83792c34853f1d2801b59ad46adc7e1e">NUM_TEST_CASES</a>&#160;&#160;&#160;(1000000)</td></tr> +<tr class="separator:a83792c34853f1d2801b59ad46adc7e1e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a87f296d7594bb8178cf76f0c045b7013" id="r_a87f296d7594bb8178cf76f0c045b7013"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a87f296d7594bb8178cf76f0c045b7013">SILENT_MODE</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a87f296d7594bb8178cf76f0c045b7013"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7ec330b668b5b24d666d7769ccecfee3" id="r_a7ec330b668b5b24d666d7769ccecfee3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7ec330b668b5b24d666d7769ccecfee3">RUN_CSR_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a7ec330b668b5b24d666d7769ccecfee3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1a1af220e72c69b03d13b2df53650e10" id="r_a1a1af220e72c69b03d13b2df53650e10"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1a1af220e72c69b03d13b2df53650e10">RUN_EXC_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a1a1af220e72c69b03d13b2df53650e10"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa3b6c4d49be7372de9e771a0475306ac" id="r_aa3b6c4d49be7372de9e771a0475306ac"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa3b6c4d49be7372de9e771a0475306ac">RUN_CONV_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:aa3b6c4d49be7372de9e771a0475306ac"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2d16b9e484b7af7897c7ae83f945ceca" id="r_a2d16b9e484b7af7897c7ae83f945ceca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2d16b9e484b7af7897c7ae83f945ceca">RUN_ADDSUB_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a2d16b9e484b7af7897c7ae83f945ceca"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a97323ecaf1ae85e68a736b06bc3b58f8" id="r_a97323ecaf1ae85e68a736b06bc3b58f8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a97323ecaf1ae85e68a736b06bc3b58f8">RUN_MUL_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a97323ecaf1ae85e68a736b06bc3b58f8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aed386f612417aeeeac8b08db27d515e4" id="r_aed386f612417aeeeac8b08db27d515e4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aed386f612417aeeeac8b08db27d515e4">RUN_MINMAX_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:aed386f612417aeeeac8b08db27d515e4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4ee0f6d28896a97d2c0cad866e77b874" id="r_a4ee0f6d28896a97d2c0cad866e77b874"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4ee0f6d28896a97d2c0cad866e77b874">RUN_COMPARE_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a4ee0f6d28896a97d2c0cad866e77b874"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a94f0b0908f48f383145ed61ef8eb0713" id="r_a94f0b0908f48f383145ed61ef8eb0713"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a94f0b0908f48f383145ed61ef8eb0713">RUN_SGNINJ_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a94f0b0908f48f383145ed61ef8eb0713"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7e134923925fa24fd1090281c3a416c3" id="r_a7e134923925fa24fd1090281c3a416c3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7e134923925fa24fd1090281c3a416c3">RUN_CLASSIFY_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a7e134923925fa24fd1090281c3a416c3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a923de9c3e55322d85522740c0d0ff867" id="r_a923de9c3e55322d85522740c0d0ff867"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a923de9c3e55322d85522740c0d0ff867">RUN_UNAVAIL_TESTS</a>&#160;&#160;&#160;(1)</td></tr> +<tr class="separator:a923de9c3e55322d85522740c0d0ff867"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6969308bd3633928893a2666f1df66fc" id="r_a6969308bd3633928893a2666f1df66fc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6969308bd3633928893a2666f1df66fc">RUN_TIMING_TESTS</a>&#160;&#160;&#160;(0)</td></tr> +<tr class="separator:a6969308bd3633928893a2666f1df66fc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Special floating-point encodings</div></td></tr> +<tr class="memitem:a1d43b83ff6bc32390f33da19567e5e43" id="r_a1d43b83ff6bc32390f33da19567e5e43"><td class="memItemLeft" align="right" valign="top"><a id="a1d43b83ff6bc32390f33da19567e5e43" name="a1d43b83ff6bc32390f33da19567e5e43"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>FLOAT32_SNAN</b>&#160;&#160;&#160;( (uint32_t)(0x7fa00000U) )</td></tr> +<tr class="separator:a1d43b83ff6bc32390f33da19567e5e43"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a45c163e2a1825fbcbf094edd8e6612cd" id="r_a45c163e2a1825fbcbf094edd8e6612cd"><td class="memItemLeft" align="right" valign="top"><a id="a45c163e2a1825fbcbf094edd8e6612cd" name="a45c163e2a1825fbcbf094edd8e6612cd"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>FLOAT32_PMIN</b>&#160;&#160;&#160;( (uint32_t)(0x00800000U) )</td></tr> +<tr class="separator:a45c163e2a1825fbcbf094edd8e6612cd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a70a69778e78bc867439bc030e665d3c1" id="r_a70a69778e78bc867439bc030e665d3c1"><td class="memItemLeft" align="right" valign="top"><a id="a70a69778e78bc867439bc030e665d3c1" name="a70a69778e78bc867439bc030e665d3c1"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>FLOAT32_PMAX</b>&#160;&#160;&#160;( (uint32_t)(0x7f7fffffU) )</td></tr> +<tr class="separator:a70a69778e78bc867439bc030e665d3c1"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a73c70bd0fb6d695cb113eaeb50923e3e" id="r_a73c70bd0fb6d695cb113eaeb50923e3e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a73c70bd0fb6d695cb113eaeb50923e3e">get_test_vector</a> (void)</td></tr> +<tr class="separator:a73c70bd0fb6d695cb113eaeb50923e3e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a941ef8d24fd8e8fe4536626b2ce72410" id="r_a941ef8d24fd8e8fe4536626b2ce72410"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a941ef8d24fd8e8fe4536626b2ce72410">verify_result</a> (uint32_t num, uint32_t opa, uint32_t opb, uint32_t ref, uint32_t res)</td></tr> +<tr class="separator:a941ef8d24fd8e8fe4536626b2ce72410"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1740720aa8ce1a30fcf642be9140d203" id="r_a1740720aa8ce1a30fcf642be9140d203"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1740720aa8ce1a30fcf642be9140d203">print_report</a> (uint32_t num_err)</td></tr> +<tr class="separator:a1740720aa8ce1a30fcf642be9140d203"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;(19200)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a83792c34853f1d2801b59ad46adc7e1e" name="a83792c34853f1d2801b59ad46adc7e1e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a83792c34853f1d2801b59ad46adc7e1e">&#9670;&#160;</a></span>NUM_TEST_CASES</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NUM_TEST_CASES&#160;&#160;&#160;(1000000)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a2d16b9e484b7af7897c7ae83f945ceca" name="a2d16b9e484b7af7897c7ae83f945ceca"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2d16b9e484b7af7897c7ae83f945ceca">&#9670;&#160;</a></span>RUN_ADDSUB_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_ADDSUB_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a7e134923925fa24fd1090281c3a416c3" name="a7e134923925fa24fd1090281c3a416c3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7e134923925fa24fd1090281c3a416c3">&#9670;&#160;</a></span>RUN_CLASSIFY_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_CLASSIFY_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a4ee0f6d28896a97d2c0cad866e77b874" name="a4ee0f6d28896a97d2c0cad866e77b874"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4ee0f6d28896a97d2c0cad866e77b874">&#9670;&#160;</a></span>RUN_COMPARE_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_COMPARE_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="aa3b6c4d49be7372de9e771a0475306ac" name="aa3b6c4d49be7372de9e771a0475306ac"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa3b6c4d49be7372de9e771a0475306ac">&#9670;&#160;</a></span>RUN_CONV_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_CONV_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a7ec330b668b5b24d666d7769ccecfee3" name="a7ec330b668b5b24d666d7769ccecfee3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7ec330b668b5b24d666d7769ccecfee3">&#9670;&#160;</a></span>RUN_CSR_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_CSR_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a1a1af220e72c69b03d13b2df53650e10" name="a1a1af220e72c69b03d13b2df53650e10"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1a1af220e72c69b03d13b2df53650e10">&#9670;&#160;</a></span>RUN_EXC_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_EXC_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="aed386f612417aeeeac8b08db27d515e4" name="aed386f612417aeeeac8b08db27d515e4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aed386f612417aeeeac8b08db27d515e4">&#9670;&#160;</a></span>RUN_MINMAX_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_MINMAX_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a97323ecaf1ae85e68a736b06bc3b58f8" name="a97323ecaf1ae85e68a736b06bc3b58f8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a97323ecaf1ae85e68a736b06bc3b58f8">&#9670;&#160;</a></span>RUN_MUL_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_MUL_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a94f0b0908f48f383145ed61ef8eb0713" name="a94f0b0908f48f383145ed61ef8eb0713"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a94f0b0908f48f383145ed61ef8eb0713">&#9670;&#160;</a></span>RUN_SGNINJ_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_SGNINJ_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a6969308bd3633928893a2666f1df66fc" name="a6969308bd3633928893a2666f1df66fc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6969308bd3633928893a2666f1df66fc">&#9670;&#160;</a></span>RUN_TIMING_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_TIMING_TESTS&#160;&#160;&#160;(0)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a923de9c3e55322d85522740c0d0ff867" name="a923de9c3e55322d85522740c0d0ff867"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a923de9c3e55322d85522740c0d0ff867">&#9670;&#160;</a></span>RUN_UNAVAIL_TESTS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define RUN_UNAVAIL_TESTS&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="a87f296d7594bb8178cf76f0c045b7013" name="a87f296d7594bb8178cf76f0c045b7013"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a87f296d7594bb8178cf76f0c045b7013">&#9670;&#160;</a></span>SILENT_MODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SILENT_MODE&#160;&#160;&#160;(1)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a73c70bd0fb6d695cb113eaeb50923e3e" name="a73c70bd0fb6d695cb113eaeb50923e3e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a73c70bd0fb6d695cb113eaeb50923e3e">&#9670;&#160;</a></span>get_test_vector()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t get_test_vector </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Generate 32-bit test data (including special values like INFINITY every now and then).</p> +<dl class="section return"><dt>Returns</dt><dd>Test data (32-bit). </dd></dl> + +</div> +</div> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function; test all available operations of the NEORV32 'Zfinx' extensions using floating-point * hardware intrinsics and software-only reference functions (emulation).</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the Zfinx CPU extension.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +<a id="a1740720aa8ce1a30fcf642be9140d203" name="a1740720aa8ce1a30fcf642be9140d203"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1740720aa8ce1a30fcf642be9140d203">&#9670;&#160;</a></span>print_report()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void print_report </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>num_err</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print test report.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">num_err</td><td>Number or errors in this test. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a941ef8d24fd8e8fe4536626b2ce72410" name="a941ef8d24fd8e8fe4536626b2ce72410"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a941ef8d24fd8e8fe4536626b2ce72410">&#9670;&#160;</a></span>verify_result()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t verify_result </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>num</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>opa</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>opb</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>ref</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>res</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Verify results (software reference vs. actual hardware).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">num</td><td>Test case number </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">opa</td><td>Operand 1 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">opb</td><td>Operand 2 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">ref</td><td>Software reference </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">res</td><td>Actual results from hardware </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>zero if results are equal. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html b/sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html new file mode 100644 index 0000000000..c4558f4dbe --- /dev/null +++ b/sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html @@ -0,0 +1,1744 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/floating_point_test/neorv32_zfinx_extension_intrinsics.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_e9ffd83269fb7f0c372f5ffbe8545008.html">floating_point_test</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> &#124; +<a href="#define-members">Macros</a> &#124; +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_zfinx_extension_intrinsics.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>"Intrinsic" library for the NEORV32 single-precision floating-point in x registers (Zfinx) extension +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;float.h&gt;</code><br /> +<code>#include &lt;math.h&gt;</code><br /> +</div> +<p><a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="unionfloat__conv__t.html">float_conv_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a791f880781a1bcea1861471be7d1a851" id="r_a791f880781a1bcea1861471be7d1a851"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a791f880781a1bcea1861471be7d1a851">subnormal_flush</a> (float tmp)</td></tr> +<tr class="separator:a791f880781a1bcea1861471be7d1a851"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4b151fcb252fc7b894f247f5af6a1809" id="r_a4b151fcb252fc7b894f247f5af6a1809"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4b151fcb252fc7b894f247f5af6a1809">riscv_intrinsic_fadds</a> (float rs1, float rs2)</td></tr> +<tr class="separator:a4b151fcb252fc7b894f247f5af6a1809"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af8473ba61abab8ae2e3ecbaf22d70e89" id="r_af8473ba61abab8ae2e3ecbaf22d70e89"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af8473ba61abab8ae2e3ecbaf22d70e89">riscv_intrinsic_fsubs</a> (float rs1, float rs2)</td></tr> +<tr class="separator:af8473ba61abab8ae2e3ecbaf22d70e89"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a87a106e0d24a3183712e438d2bcbfa2d" id="r_a87a106e0d24a3183712e438d2bcbfa2d"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a87a106e0d24a3183712e438d2bcbfa2d">riscv_intrinsic_fmuls</a> (float rs1, float rs2)</td></tr> +<tr class="separator:a87a106e0d24a3183712e438d2bcbfa2d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abf7f9e466906306d9755fd5bc7946e3c" id="r_abf7f9e466906306d9755fd5bc7946e3c"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abf7f9e466906306d9755fd5bc7946e3c">riscv_intrinsic_fmins</a> (float rs1, float rs2)</td></tr> +<tr class="separator:abf7f9e466906306d9755fd5bc7946e3c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a87c1ce499e5e43554cb0f407cf0d3f7f" id="r_a87c1ce499e5e43554cb0f407cf0d3f7f"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a87c1ce499e5e43554cb0f407cf0d3f7f">riscv_intrinsic_fmaxs</a> (float rs1, float rs2)</td></tr> +<tr class="separator:a87c1ce499e5e43554cb0f407cf0d3f7f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3bc6ee3059a7e99b187c4ea5e217715b" id="r_a3bc6ee3059a7e99b187c4ea5e217715b"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3bc6ee3059a7e99b187c4ea5e217715b">riscv_intrinsic_fcvt_wus</a> (float rs1)</td></tr> +<tr class="separator:a3bc6ee3059a7e99b187c4ea5e217715b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a523fa0fb6f521311c7f44692c586b3ee" id="r_a523fa0fb6f521311c7f44692c586b3ee"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a523fa0fb6f521311c7f44692c586b3ee">riscv_intrinsic_fcvt_ws</a> (float rs1)</td></tr> +<tr class="separator:a523fa0fb6f521311c7f44692c586b3ee"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a837b7330f9d568791687ae1384b8ef28" id="r_a837b7330f9d568791687ae1384b8ef28"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a837b7330f9d568791687ae1384b8ef28">riscv_intrinsic_fcvt_swu</a> (uint32_t rs1)</td></tr> +<tr class="separator:a837b7330f9d568791687ae1384b8ef28"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2103eb86052f6f8e24a8a848ffc6528a" id="r_a2103eb86052f6f8e24a8a848ffc6528a"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2103eb86052f6f8e24a8a848ffc6528a">riscv_intrinsic_fcvt_sw</a> (int32_t rs1)</td></tr> +<tr class="separator:a2103eb86052f6f8e24a8a848ffc6528a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af4ddfae45807d4e41f758672ee14cf7b" id="r_af4ddfae45807d4e41f758672ee14cf7b"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af4ddfae45807d4e41f758672ee14cf7b">riscv_intrinsic_feqs</a> (float rs1, float rs2)</td></tr> +<tr class="separator:af4ddfae45807d4e41f758672ee14cf7b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a85aa18294a58997db2c324184196669c" id="r_a85aa18294a58997db2c324184196669c"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a85aa18294a58997db2c324184196669c">riscv_intrinsic_flts</a> (float rs1, float rs2)</td></tr> +<tr class="separator:a85aa18294a58997db2c324184196669c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adb83fab39d91e9291da2b7b07830cf82" id="r_adb83fab39d91e9291da2b7b07830cf82"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adb83fab39d91e9291da2b7b07830cf82">riscv_intrinsic_fles</a> (float rs1, float rs2)</td></tr> +<tr class="separator:adb83fab39d91e9291da2b7b07830cf82"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aff3acd90bcfbda96945f95a0e0bae12b" id="r_aff3acd90bcfbda96945f95a0e0bae12b"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aff3acd90bcfbda96945f95a0e0bae12b">riscv_intrinsic_fsgnjs</a> (float rs1, float rs2)</td></tr> +<tr class="separator:aff3acd90bcfbda96945f95a0e0bae12b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa4010772a986d03929ba7a43dfdcddd9" id="r_aa4010772a986d03929ba7a43dfdcddd9"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa4010772a986d03929ba7a43dfdcddd9">riscv_intrinsic_fsgnjns</a> (float rs1, float rs2)</td></tr> +<tr class="separator:aa4010772a986d03929ba7a43dfdcddd9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2235d91cdac03bf8071003a5c59b9dd0" id="r_a2235d91cdac03bf8071003a5c59b9dd0"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2235d91cdac03bf8071003a5c59b9dd0">riscv_intrinsic_fsgnjxs</a> (float rs1, float rs2)</td></tr> +<tr class="separator:a2235d91cdac03bf8071003a5c59b9dd0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3064a5c57b5f45d57c4d19eb798724f6" id="r_a3064a5c57b5f45d57c4d19eb798724f6"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3064a5c57b5f45d57c4d19eb798724f6">riscv_intrinsic_fclasss</a> (float rs1)</td></tr> +<tr class="separator:a3064a5c57b5f45d57c4d19eb798724f6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab6a9d15643e3085ff80c7883f183a42b" id="r_ab6a9d15643e3085ff80c7883f183a42b"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab6a9d15643e3085ff80c7883f183a42b">riscv_intrinsic_fdivs</a> (float rs1, float rs2)</td></tr> +<tr class="separator:ab6a9d15643e3085ff80c7883f183a42b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a17e2b7a399c956d548a609185084ea3c" id="r_a17e2b7a399c956d548a609185084ea3c"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a17e2b7a399c956d548a609185084ea3c">riscv_intrinsic_fsqrts</a> (float rs1)</td></tr> +<tr class="separator:a17e2b7a399c956d548a609185084ea3c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abbdb403cdeef414fa2f867b702d5f6eb" id="r_abbdb403cdeef414fa2f867b702d5f6eb"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abbdb403cdeef414fa2f867b702d5f6eb">riscv_intrinsic_fmadds</a> (float rs1, float rs2, float rs3)</td></tr> +<tr class="separator:abbdb403cdeef414fa2f867b702d5f6eb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a03aba9c70c5286dacebaeb0ef5219cc9" id="r_a03aba9c70c5286dacebaeb0ef5219cc9"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a03aba9c70c5286dacebaeb0ef5219cc9">riscv_intrinsic_fmsubs</a> (float rs1, float rs2, float rs3)</td></tr> +<tr class="separator:a03aba9c70c5286dacebaeb0ef5219cc9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a639fc7bd75933888540e9cceb67221a0" id="r_a639fc7bd75933888540e9cceb67221a0"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a639fc7bd75933888540e9cceb67221a0">riscv_intrinsic_fnmsubs</a> (float rs1, float rs2, float rs3)</td></tr> +<tr class="separator:a639fc7bd75933888540e9cceb67221a0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa6473bc2d2721b57277b83a3ae0cfdb6" id="r_aa6473bc2d2721b57277b83a3ae0cfdb6"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa6473bc2d2721b57277b83a3ae0cfdb6">riscv_intrinsic_fnmadds</a> (float rs1, float rs2, float rs3)</td></tr> +<tr class="separator:aa6473bc2d2721b57277b83a3ae0cfdb6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9d676567276439875c9b1a15b892b555" id="r_a9d676567276439875c9b1a15b892b555"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9d676567276439875c9b1a15b892b555">riscv_emulate_fadds</a> (float rs1, float rs2)</td></tr> +<tr class="separator:a9d676567276439875c9b1a15b892b555"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ace5d95b855ec1aa8eacdb5bbeea58197" id="r_ace5d95b855ec1aa8eacdb5bbeea58197"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ace5d95b855ec1aa8eacdb5bbeea58197">riscv_emulate_fsubs</a> (float rs1, float rs2)</td></tr> +<tr class="separator:ace5d95b855ec1aa8eacdb5bbeea58197"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad43e8bdf4a6fbe229d22d24680f2be80" id="r_ad43e8bdf4a6fbe229d22d24680f2be80"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad43e8bdf4a6fbe229d22d24680f2be80">riscv_emulate_fmuls</a> (float rs1, float rs2)</td></tr> +<tr class="separator:ad43e8bdf4a6fbe229d22d24680f2be80"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a872cd30fb61190bd1ac719d25b01f5a3" id="r_a872cd30fb61190bd1ac719d25b01f5a3"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a872cd30fb61190bd1ac719d25b01f5a3">riscv_emulate_fmins</a> (float rs1, float rs2)</td></tr> +<tr class="separator:a872cd30fb61190bd1ac719d25b01f5a3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af9b16a32d2bb13c8af5a678271d74889" id="r_af9b16a32d2bb13c8af5a678271d74889"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af9b16a32d2bb13c8af5a678271d74889">riscv_emulate_fmaxs</a> (float rs1, float rs2)</td></tr> +<tr class="separator:af9b16a32d2bb13c8af5a678271d74889"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aad9fc7337e09081cf8c5bff8c28776c8" id="r_aad9fc7337e09081cf8c5bff8c28776c8"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aad9fc7337e09081cf8c5bff8c28776c8">riscv_emulate_fcvt_wus</a> (float rs1)</td></tr> +<tr class="separator:aad9fc7337e09081cf8c5bff8c28776c8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a292365fe41a7a661e61ae746306ba5e9" id="r_a292365fe41a7a661e61ae746306ba5e9"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a292365fe41a7a661e61ae746306ba5e9">riscv_emulate_fcvt_ws</a> (float rs1)</td></tr> +<tr class="separator:a292365fe41a7a661e61ae746306ba5e9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a10a05bface37bff32c78ed0746845794" id="r_a10a05bface37bff32c78ed0746845794"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a10a05bface37bff32c78ed0746845794">riscv_emulate_fcvt_swu</a> (uint32_t rs1)</td></tr> +<tr class="separator:a10a05bface37bff32c78ed0746845794"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0f2260b7b5793a95c49670379fc89617" id="r_a0f2260b7b5793a95c49670379fc89617"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0f2260b7b5793a95c49670379fc89617">riscv_emulate_fcvt_sw</a> (int32_t rs1)</td></tr> +<tr class="separator:a0f2260b7b5793a95c49670379fc89617"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7cb3c6570b911cd1dfb7b6e798cc1d21" id="r_a7cb3c6570b911cd1dfb7b6e798cc1d21"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7cb3c6570b911cd1dfb7b6e798cc1d21">riscv_emulate_feqs</a> (float rs1, float rs2)</td></tr> +<tr class="separator:a7cb3c6570b911cd1dfb7b6e798cc1d21"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2b802122d53a2ce517b3d39fec34d7e0" id="r_a2b802122d53a2ce517b3d39fec34d7e0"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2b802122d53a2ce517b3d39fec34d7e0">riscv_emulate_flts</a> (float rs1, float rs2)</td></tr> +<tr class="separator:a2b802122d53a2ce517b3d39fec34d7e0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac5fdef0607602fa0bdb93b3535fd709e" id="r_ac5fdef0607602fa0bdb93b3535fd709e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac5fdef0607602fa0bdb93b3535fd709e">riscv_emulate_fles</a> (float rs1, float rs2)</td></tr> +<tr class="separator:ac5fdef0607602fa0bdb93b3535fd709e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a12498d635f422f607b9b83facf3050dd" id="r_a12498d635f422f607b9b83facf3050dd"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a12498d635f422f607b9b83facf3050dd">riscv_emulate_fsgnjs</a> (float rs1, float rs2)</td></tr> +<tr class="separator:a12498d635f422f607b9b83facf3050dd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0c985e626ed1d69314f4e3a0f1f58624" id="r_a0c985e626ed1d69314f4e3a0f1f58624"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0c985e626ed1d69314f4e3a0f1f58624">riscv_emulate_fsgnjns</a> (float rs1, float rs2)</td></tr> +<tr class="separator:a0c985e626ed1d69314f4e3a0f1f58624"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a98caf7f310820052ae96ce0f45e6cd26" id="r_a98caf7f310820052ae96ce0f45e6cd26"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a98caf7f310820052ae96ce0f45e6cd26">riscv_emulate_fsgnjxs</a> (float rs1, float rs2)</td></tr> +<tr class="separator:a98caf7f310820052ae96ce0f45e6cd26"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae41a0bf9d28c35f4d6db7177ccf8ee06" id="r_ae41a0bf9d28c35f4d6db7177ccf8ee06"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae41a0bf9d28c35f4d6db7177ccf8ee06">riscv_emulate_fclasss</a> (float rs1)</td></tr> +<tr class="separator:ae41a0bf9d28c35f4d6db7177ccf8ee06"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aeaf46a17b671278be2bf804159827a40" id="r_aeaf46a17b671278be2bf804159827a40"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aeaf46a17b671278be2bf804159827a40">riscv_emulate_fdivs</a> (float rs1, float rs2)</td></tr> +<tr class="separator:aeaf46a17b671278be2bf804159827a40"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1ceb3450f1e5c62d3079cd0e93c03501" id="r_a1ceb3450f1e5c62d3079cd0e93c03501"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1ceb3450f1e5c62d3079cd0e93c03501">riscv_emulate_fsqrts</a> (float rs1)</td></tr> +<tr class="separator:a1ceb3450f1e5c62d3079cd0e93c03501"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a39212f2e2bb0f1752092a1732f93edf3" id="r_a39212f2e2bb0f1752092a1732f93edf3"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a39212f2e2bb0f1752092a1732f93edf3">riscv_emulate_fmadds</a> (float rs1, float rs2, float rs3)</td></tr> +<tr class="separator:a39212f2e2bb0f1752092a1732f93edf3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a05d0d5a8eb9422e93448efdeb679cabf" id="r_a05d0d5a8eb9422e93448efdeb679cabf"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a05d0d5a8eb9422e93448efdeb679cabf">riscv_emulate_fmsubs</a> (float rs1, float rs2, float rs3)</td></tr> +<tr class="separator:a05d0d5a8eb9422e93448efdeb679cabf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a833638b346722dfa9d7d5c8d60998ec8" id="r_a833638b346722dfa9d7d5c8d60998ec8"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a833638b346722dfa9d7d5c8d60998ec8">riscv_emulate_fnmsubs</a> (float rs1, float rs2, float rs3)</td></tr> +<tr class="separator:a833638b346722dfa9d7d5c8d60998ec8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac8bb4450b39854ab07839e8f3505361c" id="r_ac8bb4450b39854ab07839e8f3505361c"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac8bb4450b39854ab07839e8f3505361c">riscv_emulate_fnmadds</a> (float rs1, float rs2, float rs3)</td></tr> +<tr class="separator:ac8bb4450b39854ab07839e8f3505361c"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>"Intrinsic" library for the NEORV32 single-precision floating-point in x registers (Zfinx) extension </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting</dd></dl> +<p>Also provides emulation functions for all intrinsics (functionality re-built in pure software). The functionality of the emulation</p> +<p>functions is based on the RISC-V floating-point spec.</p> +<dl class="section note"><dt>Note</dt><dd>All operations from this library use the default GCC "round to nearest, ties to even" rounding mode.</dd></dl> +<dl class="section warning"><dt>Warning</dt><dd>This library is just a temporary fall-back until the Zfinx extensions are supported by the upstream RISC-V GCC port. </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a9d676567276439875c9b1a15b892b555" name="a9d676567276439875c9b1a15b892b555"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9d676567276439875c9b1a15b892b555">&#9670;&#160;</a></span>riscv_emulate_fadds()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fadds </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point addition</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="ae41a0bf9d28c35f4d6db7177ccf8ee06" name="ae41a0bf9d28c35f4d6db7177ccf8ee06"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae41a0bf9d28c35f4d6db7177ccf8ee06">&#9670;&#160;</a></span>riscv_emulate_fclasss()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t riscv_emulate_fclasss </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point number classification</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> +<p>&lt; Access as native float</p> +<p>&lt; Access in binary representation</p> + +</div> +</div> +<a id="a0f2260b7b5793a95c49670379fc89617" name="a0f2260b7b5793a95c49670379fc89617"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0f2260b7b5793a95c49670379fc89617">&#9670;&#160;</a></span>riscv_emulate_fcvt_sw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fcvt_sw </td> + <td>(</td> + <td class="paramtype">int32_t</td> <td class="paramname"><span class="paramname"><em>rs1</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point signed integer to float</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a10a05bface37bff32c78ed0746845794" name="a10a05bface37bff32c78ed0746845794"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a10a05bface37bff32c78ed0746845794">&#9670;&#160;</a></span>riscv_emulate_fcvt_swu()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fcvt_swu </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>rs1</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point unsigned integer to float</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a292365fe41a7a661e61ae746306ba5e9" name="a292365fe41a7a661e61ae746306ba5e9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a292365fe41a7a661e61ae746306ba5e9">&#9670;&#160;</a></span>riscv_emulate_fcvt_ws()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int32_t riscv_emulate_fcvt_ws </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point float to signed integer</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="aad9fc7337e09081cf8c5bff8c28776c8" name="aad9fc7337e09081cf8c5bff8c28776c8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aad9fc7337e09081cf8c5bff8c28776c8">&#9670;&#160;</a></span>riscv_emulate_fcvt_wus()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t riscv_emulate_fcvt_wus </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point float to unsigned integer</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="aeaf46a17b671278be2bf804159827a40" name="aeaf46a17b671278be2bf804159827a40"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aeaf46a17b671278be2bf804159827a40">&#9670;&#160;</a></span>riscv_emulate_fdivs()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fdivs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point division</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a7cb3c6570b911cd1dfb7b6e798cc1d21" name="a7cb3c6570b911cd1dfb7b6e798cc1d21"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7cb3c6570b911cd1dfb7b6e798cc1d21">&#9670;&#160;</a></span>riscv_emulate_feqs()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t riscv_emulate_feqs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point equal comparison</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="ac5fdef0607602fa0bdb93b3535fd709e" name="ac5fdef0607602fa0bdb93b3535fd709e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac5fdef0607602fa0bdb93b3535fd709e">&#9670;&#160;</a></span>riscv_emulate_fles()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t riscv_emulate_fles </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point less-than-or-equal comparison</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a2b802122d53a2ce517b3d39fec34d7e0" name="a2b802122d53a2ce517b3d39fec34d7e0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2b802122d53a2ce517b3d39fec34d7e0">&#9670;&#160;</a></span>riscv_emulate_flts()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t riscv_emulate_flts </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point less-than comparison</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a39212f2e2bb0f1752092a1732f93edf3" name="a39212f2e2bb0f1752092a1732f93edf3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a39212f2e2bb0f1752092a1732f93edf3">&#9670;&#160;</a></span>riscv_emulate_fmadds()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fmadds </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs3</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point fused multiply-add</p> +<dl class="section warning"><dt>Warning</dt><dd>This instruction is not supported!</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs3</td><td>Source operand 3 </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="af9b16a32d2bb13c8af5a678271d74889" name="af9b16a32d2bb13c8af5a678271d74889"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af9b16a32d2bb13c8af5a678271d74889">&#9670;&#160;</a></span>riscv_emulate_fmaxs()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fmaxs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point maximum</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> +<p>&lt; Access as native float</p> +<p>&lt; Access in binary representation</p> + +</div> +</div> +<a id="a872cd30fb61190bd1ac719d25b01f5a3" name="a872cd30fb61190bd1ac719d25b01f5a3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a872cd30fb61190bd1ac719d25b01f5a3">&#9670;&#160;</a></span>riscv_emulate_fmins()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fmins </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point minimum</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> +<p>&lt; Access as native float</p> +<p>&lt; Access in binary representation</p> + +</div> +</div> +<a id="a05d0d5a8eb9422e93448efdeb679cabf" name="a05d0d5a8eb9422e93448efdeb679cabf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a05d0d5a8eb9422e93448efdeb679cabf">&#9670;&#160;</a></span>riscv_emulate_fmsubs()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fmsubs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs3</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point fused multiply-sub</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs3</td><td>Source operand 3 </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="ad43e8bdf4a6fbe229d22d24680f2be80" name="ad43e8bdf4a6fbe229d22d24680f2be80"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad43e8bdf4a6fbe229d22d24680f2be80">&#9670;&#160;</a></span>riscv_emulate_fmuls()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fmuls </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point multiplication</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="ac8bb4450b39854ab07839e8f3505361c" name="ac8bb4450b39854ab07839e8f3505361c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac8bb4450b39854ab07839e8f3505361c">&#9670;&#160;</a></span>riscv_emulate_fnmadds()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fnmadds </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs3</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point fused negated multiply-add</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs3</td><td>Source operand 3 </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a833638b346722dfa9d7d5c8d60998ec8" name="a833638b346722dfa9d7d5c8d60998ec8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a833638b346722dfa9d7d5c8d60998ec8">&#9670;&#160;</a></span>riscv_emulate_fnmsubs()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fnmsubs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs3</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point fused negated multiply-sub</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs3</td><td>Source operand 3 </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a0c985e626ed1d69314f4e3a0f1f58624" name="a0c985e626ed1d69314f4e3a0f1f58624"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0c985e626ed1d69314f4e3a0f1f58624">&#9670;&#160;</a></span>riscv_emulate_fsgnjns()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fsgnjns </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point sign-injection NOT</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a12498d635f422f607b9b83facf3050dd" name="a12498d635f422f607b9b83facf3050dd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a12498d635f422f607b9b83facf3050dd">&#9670;&#160;</a></span>riscv_emulate_fsgnjs()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fsgnjs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point sign-injection</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a98caf7f310820052ae96ce0f45e6cd26" name="a98caf7f310820052ae96ce0f45e6cd26"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a98caf7f310820052ae96ce0f45e6cd26">&#9670;&#160;</a></span>riscv_emulate_fsgnjxs()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fsgnjxs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point sign-injection XOR</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a1ceb3450f1e5c62d3079cd0e93c03501" name="a1ceb3450f1e5c62d3079cd0e93c03501"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1ceb3450f1e5c62d3079cd0e93c03501">&#9670;&#160;</a></span>riscv_emulate_fsqrts()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fsqrts </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point square root</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="ace5d95b855ec1aa8eacdb5bbeea58197" name="ace5d95b855ec1aa8eacdb5bbeea58197"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ace5d95b855ec1aa8eacdb5bbeea58197">&#9670;&#160;</a></span>riscv_emulate_fsubs()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float riscv_emulate_fsubs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Single-precision floating-point subtraction</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a4b151fcb252fc7b894f247f5af6a1809" name="a4b151fcb252fc7b894f247f5af6a1809"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4b151fcb252fc7b894f247f5af6a1809">&#9670;&#160;</a></span>riscv_intrinsic_fadds()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fadds </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point addition</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a3064a5c57b5f45d57c4d19eb798724f6" name="a3064a5c57b5f45d57c4d19eb798724f6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3064a5c57b5f45d57c4d19eb798724f6">&#9670;&#160;</a></span>riscv_intrinsic_fclasss()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t riscv_intrinsic_fclasss </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point number classification</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a2103eb86052f6f8e24a8a848ffc6528a" name="a2103eb86052f6f8e24a8a848ffc6528a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2103eb86052f6f8e24a8a848ffc6528a">&#9670;&#160;</a></span>riscv_intrinsic_fcvt_sw()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fcvt_sw </td> + <td>(</td> + <td class="paramtype">int32_t</td> <td class="paramname"><span class="paramname"><em>rs1</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point convert signed integer to float</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a837b7330f9d568791687ae1384b8ef28" name="a837b7330f9d568791687ae1384b8ef28"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a837b7330f9d568791687ae1384b8ef28">&#9670;&#160;</a></span>riscv_intrinsic_fcvt_swu()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fcvt_swu </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>rs1</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point convert unsigned integer to float</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a523fa0fb6f521311c7f44692c586b3ee" name="a523fa0fb6f521311c7f44692c586b3ee"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a523fa0fb6f521311c7f44692c586b3ee">&#9670;&#160;</a></span>riscv_intrinsic_fcvt_ws()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">int32_t riscv_intrinsic_fcvt_ws </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point convert float to signed integer</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a3bc6ee3059a7e99b187c4ea5e217715b" name="a3bc6ee3059a7e99b187c4ea5e217715b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3bc6ee3059a7e99b187c4ea5e217715b">&#9670;&#160;</a></span>riscv_intrinsic_fcvt_wus()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t riscv_intrinsic_fcvt_wus </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point convert float to unsigned integer</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="ab6a9d15643e3085ff80c7883f183a42b" name="ab6a9d15643e3085ff80c7883f183a42b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab6a9d15643e3085ff80c7883f183a42b">&#9670;&#160;</a></span>riscv_intrinsic_fdivs()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fdivs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point division</p> +<dl class="section warning"><dt>Warning</dt><dd>This instruction is not supported and should raise an illegal instruction exception when executed.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="af4ddfae45807d4e41f758672ee14cf7b" name="af4ddfae45807d4e41f758672ee14cf7b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af4ddfae45807d4e41f758672ee14cf7b">&#9670;&#160;</a></span>riscv_intrinsic_feqs()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t riscv_intrinsic_feqs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point equal comparison</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="adb83fab39d91e9291da2b7b07830cf82" name="adb83fab39d91e9291da2b7b07830cf82"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adb83fab39d91e9291da2b7b07830cf82">&#9670;&#160;</a></span>riscv_intrinsic_fles()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t riscv_intrinsic_fles </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point less-than-or-equal comparison</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a85aa18294a58997db2c324184196669c" name="a85aa18294a58997db2c324184196669c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a85aa18294a58997db2c324184196669c">&#9670;&#160;</a></span>riscv_intrinsic_flts()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t riscv_intrinsic_flts </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point less-than comparison</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="abbdb403cdeef414fa2f867b702d5f6eb" name="abbdb403cdeef414fa2f867b702d5f6eb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abbdb403cdeef414fa2f867b702d5f6eb">&#9670;&#160;</a></span>riscv_intrinsic_fmadds()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fmadds </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs3</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point fused multiply-add</p> +<dl class="section warning"><dt>Warning</dt><dd>This instruction is not supported and should raise an illegal instruction exception when executed.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs3</td><td>Source operand 3 </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a87c1ce499e5e43554cb0f407cf0d3f7f" name="a87c1ce499e5e43554cb0f407cf0d3f7f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a87c1ce499e5e43554cb0f407cf0d3f7f">&#9670;&#160;</a></span>riscv_intrinsic_fmaxs()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fmaxs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point maximum</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="abf7f9e466906306d9755fd5bc7946e3c" name="abf7f9e466906306d9755fd5bc7946e3c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abf7f9e466906306d9755fd5bc7946e3c">&#9670;&#160;</a></span>riscv_intrinsic_fmins()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fmins </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point minimum</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a03aba9c70c5286dacebaeb0ef5219cc9" name="a03aba9c70c5286dacebaeb0ef5219cc9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a03aba9c70c5286dacebaeb0ef5219cc9">&#9670;&#160;</a></span>riscv_intrinsic_fmsubs()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fmsubs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs3</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point fused multiply-sub</p> +<dl class="section warning"><dt>Warning</dt><dd>This instruction is not supported and should raise an illegal instruction exception when executed.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs3</td><td>Source operand 3 </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a87a106e0d24a3183712e438d2bcbfa2d" name="a87a106e0d24a3183712e438d2bcbfa2d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a87a106e0d24a3183712e438d2bcbfa2d">&#9670;&#160;</a></span>riscv_intrinsic_fmuls()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fmuls </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point multiplication</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="aa6473bc2d2721b57277b83a3ae0cfdb6" name="aa6473bc2d2721b57277b83a3ae0cfdb6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa6473bc2d2721b57277b83a3ae0cfdb6">&#9670;&#160;</a></span>riscv_intrinsic_fnmadds()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fnmadds </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs3</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point fused negated multiply-add</p> +<dl class="section warning"><dt>Warning</dt><dd>This instruction is not supported and should raise an illegal instruction exception when executed.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs3</td><td>Source operand 3 </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a639fc7bd75933888540e9cceb67221a0" name="a639fc7bd75933888540e9cceb67221a0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a639fc7bd75933888540e9cceb67221a0">&#9670;&#160;</a></span>riscv_intrinsic_fnmsubs()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fnmsubs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs3</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point fused negated multiply-sub</p> +<dl class="section warning"><dt>Warning</dt><dd>This instruction is not supported and should raise an illegal instruction exception when executed.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2 </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs3</td><td>Source operand 3 </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="aa4010772a986d03929ba7a43dfdcddd9" name="aa4010772a986d03929ba7a43dfdcddd9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa4010772a986d03929ba7a43dfdcddd9">&#9670;&#160;</a></span>riscv_intrinsic_fsgnjns()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fsgnjns </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point sign-injection NOT</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="aff3acd90bcfbda96945f95a0e0bae12b" name="aff3acd90bcfbda96945f95a0e0bae12b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aff3acd90bcfbda96945f95a0e0bae12b">&#9670;&#160;</a></span>riscv_intrinsic_fsgnjs()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fsgnjs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point sign-injection</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a2235d91cdac03bf8071003a5c59b9dd0" name="a2235d91cdac03bf8071003a5c59b9dd0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2235d91cdac03bf8071003a5c59b9dd0">&#9670;&#160;</a></span>riscv_intrinsic_fsgnjxs()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fsgnjxs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point sign-injection XOR</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a17e2b7a399c956d548a609185084ea3c" name="a17e2b7a399c956d548a609185084ea3c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a17e2b7a399c956d548a609185084ea3c">&#9670;&#160;</a></span>riscv_intrinsic_fsqrts()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fsqrts </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point square root</p> +<dl class="section warning"><dt>Warning</dt><dd>This instruction is not supported and should raise an illegal instruction exception when executed.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="af8473ba61abab8ae2e3ecbaf22d70e89" name="af8473ba61abab8ae2e3ecbaf22d70e89"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af8473ba61abab8ae2e3ecbaf22d70e89">&#9670;&#160;</a></span>riscv_intrinsic_fsubs()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">float riscv_intrinsic_fsubs </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Single-precision floating-point subtraction</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rs1</td><td>Source operand 1. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rs2</td><td>Source operand 2. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +<a id="a791f880781a1bcea1861471be7d1a851" name="a791f880781a1bcea1861471be7d1a851"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a791f880781a1bcea1861471be7d1a851">&#9670;&#160;</a></span>subnormal_flush()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float subnormal_flush </td> + <td>(</td> + <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>tmp</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Flush to zero if de-normal number.</p> +<dl class="section warning"><dt>Warning</dt><dd>Subnormal numbers are not supported yet! Flush them to zero.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">tmp</td><td>Source operand. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Result. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h_source.html b/sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h_source.html new file mode 100644 index 0000000000..43de982be3 --- /dev/null +++ b/sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h_source.html @@ -0,0 +1,985 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/floating_point_test/neorv32_zfinx_extension_intrinsics.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_e9ffd83269fb7f0c372f5ffbe8545008.html">floating_point_test</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_zfinx_extension_intrinsics.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// #################################################################################################</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// # &lt;&lt; NEORV32 - Intrinsics + Emulation Functions for the RISC-V &quot;Zfinx&quot; CPU extension &gt;&gt; #</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// # ********************************************************************************************* #</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// # The intrinsics provided by this library allow to use the hardware floating-point unit of the #</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// # RISC-V Zfinx CPU extension without the need for Zfinx support by the compiler / toolchain. #</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// # ********************************************************************************************* #</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// # BSD 3-Clause License #</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">// # Copyright (c) 2024, Stephan Nolting. All rights reserved. #</span></div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">// # Redistribution and use in source and binary forms, with or without modification, are #</span></div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">// # permitted provided that the following conditions are met: #</span></div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">// # 1. Redistributions of source code must retain the above copyright notice, this list of #</span></div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">// # conditions and the following disclaimer. #</span></div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">// # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment">// # conditions and the following disclaimer in the documentation and/or other materials #</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">// # provided with the distribution. #</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">// # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">// # endorse or promote products derived from this software without specific prior written #</span></div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">// # permission. #</span></div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">// # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND ANY EXPRESS #</span></div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">// # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #</span></div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">// # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #</span></div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">// # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #</span></div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">// # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #</span></div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">// # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #</span></div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">// # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #</span></div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">// # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #</span></div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">// # OF THE POSSIBILITY OF SUCH DAMAGE. #</span></div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment">// # ********************************************************************************************* #</span></div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">// # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">// #################################################################################################</span></div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#ifndef neorv32_zfinx_extension_intrinsics_h</span></div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#define neorv32_zfinx_extension_intrinsics_h</span></div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#define __USE_GNU</span></div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="preprocessor">#define _GNU_SOURCE</span></div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor">#include &lt;float.h&gt;</span></div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="preprocessor">#include &lt;math.h&gt;</span></div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="preprocessor">#if defined __riscv_f || (__riscv_flen == 32)</span></div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="preprocessor"> #error Application programs using the Zfinx intrinsic library have to be compiled WITHOUT the &lt;F&gt; MARCH ISA attribute!</span></div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="keyword">typedef</span> <span class="keyword">union</span></div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>{</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> uint32_t binary_value; </div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">float</span> float_value; </div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span>} <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a>;</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment">// Helper functions</span></div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00091" data-start="{" data-end="}"> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a791f880781a1bcea1861471be7d1a851"> 91</a></span><span class="keywordtype">float</span> subnormal_flush(<span class="keywordtype">float</span> tmp) {</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">float</span> res = tmp;</div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="comment">// flush to zero if subnormal</span></div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">if</span> (fpclassify(tmp) == FP_SUBNORMAL) {</div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span> (signbit(tmp) != 0) {</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> res = -0.0f;</div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> }</div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> res = +0.0f;</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> }</div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> }</div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">return</span> res;</div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span>}</div> +</div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="comment">// &quot;Intrinsics&quot;</span></div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00120" data-start="{" data-end="}"> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a4b151fcb252fc7b894f247f5af6a1809"> 120</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fadds(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0000000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span>}</div> +</div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00138" data-start="{" data-end="}"> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af8473ba61abab8ae2e3ecbaf22d70e89"> 138</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fsubs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div> +<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0000100, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span>}</div> +</div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00156" data-start="{" data-end="}"> +<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87a106e0d24a3183712e438d2bcbfa2d"> 156</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fmuls(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div> +<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0001000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span>}</div> +</div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00174" data-start="{" data-end="}"> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abf7f9e466906306d9755fd5bc7946e3c"> 174</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fmins(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div> +<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0010100, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span>}</div> +</div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00192" data-start="{" data-end="}"> +<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87c1ce499e5e43554cb0f407cf0d3f7f"> 192</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fmaxs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0010100, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b001, 0b1010011);</div> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span>}</div> +</div> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> </div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> </div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00209" data-start="{" data-end="}"> +<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3bc6ee3059a7e99b187c4ea5e217715b"> 209</a></span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) riscv_intrinsic_fcvt_wus(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> </div> +<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa;</div> +<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">return</span> CUSTOM_INSTR_R2_TYPE(0b1100000, 0b00001, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span>}</div> +</div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> </div> +<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00224" data-start="{" data-end="}"> +<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a523fa0fb6f521311c7f44692c586b3ee"> 224</a></span><span class="keyword">inline</span> int32_t __attribute__ ((always_inline)) riscv_intrinsic_fcvt_ws(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> </div> +<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa;</div> +<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div> +<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">return</span> (int32_t)CUSTOM_INSTR_R2_TYPE(0b1100000, 0b00000, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span>}</div> +</div> +<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div> +<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> </div> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00239" data-start="{" data-end="}"> +<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a837b7330f9d568791687ae1384b8ef28"> 239</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fcvt_swu(uint32_t rs1) {</div> +<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> </div> +<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> res;</div> +<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> </div> +<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R2_TYPE(0b1101000, 0b00001, rs1, 0b000, 0b1010011);</div> +<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span>}</div> +</div> +<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> </div> +<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> </div> +<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00254" data-start="{" data-end="}"> +<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2103eb86052f6f8e24a8a848ffc6528a"> 254</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fcvt_sw(int32_t rs1) {</div> +<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> </div> +<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> res;</div> +<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div> +<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R2_TYPE(0b1101000, 0b00000, rs1, 0b000, 0b1010011);</div> +<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span>}</div> +</div> +<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> </div> +<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> </div> +<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00270" data-start="{" data-end="}"> +<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af4ddfae45807d4e41f758672ee14cf7b"> 270</a></span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) riscv_intrinsic_feqs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> </div> +<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb;</div> +<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> </div> +<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">return</span> CUSTOM_INSTR_R3_TYPE(0b1010000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b010, 0b1010011);</div> +<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span>}</div> +</div> +<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div> +<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> </div> +<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00287" data-start="{" data-end="}"> +<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a85aa18294a58997db2c324184196669c"> 287</a></span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) riscv_intrinsic_flts(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> </div> +<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb;</div> +<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> </div> +<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">return</span> CUSTOM_INSTR_R3_TYPE(0b1010000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b001, 0b1010011);</div> +<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span>}</div> +</div> +<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> </div> +<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> </div> +<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00304" data-start="{" data-end="}"> +<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#adb83fab39d91e9291da2b7b07830cf82"> 304</a></span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) riscv_intrinsic_fles(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> </div> +<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb;</div> +<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> </div> +<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">return</span> CUSTOM_INSTR_R3_TYPE(0b1010000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span>}</div> +</div> +<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> </div> +<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> </div> +<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00321" data-start="{" data-end="}"> +<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aff3acd90bcfbda96945f95a0e0bae12b"> 321</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fsgnjs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> </div> +<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> </div> +<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0010000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span>}</div> +</div> +<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> </div> +<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> </div> +<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00339" data-start="{" data-end="}"> +<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa4010772a986d03929ba7a43dfdcddd9"> 339</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fsgnjns(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> </div> +<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> </div> +<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0010000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b001, 0b1010011);</div> +<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span>}</div> +</div> +<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> </div> +<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> </div> +<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00357" data-start="{" data-end="}"> +<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2235d91cdac03bf8071003a5c59b9dd0"> 357</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fsgnjxs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> </div> +<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> </div> +<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0010000, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b010, 0b1010011);</div> +<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span>}</div> +</div> +<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> </div> +<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> </div> +<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00374" data-start="{" data-end="}"> +<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3064a5c57b5f45d57c4d19eb798724f6"> 374</a></span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) riscv_intrinsic_fclasss(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> </div> +<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa;</div> +<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> </div> +<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">return</span> CUSTOM_INSTR_R2_TYPE(0b1110000, 0b00000, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b001, 0b1010011);</div> +<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span>}</div> +</div> +<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> </div> +<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> </div> +<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span><span class="comment">// !!! UNSUPPORTED instructions !!!</span></div> +<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> </div> +<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00396" data-start="{" data-end="}"> +<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ab6a9d15643e3085ff80c7883f183a42b"> 396</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fdivs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> </div> +<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, res;</div> +<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> </div> +<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R3_TYPE(0b0001100, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span>}</div> +</div> +<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> </div> +<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> </div> +<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00415" data-start="{" data-end="}"> +<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a17e2b7a399c956d548a609185084ea3c"> 415</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fsqrts(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> </div> +<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, res;</div> +<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> </div> +<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R2_TYPE(0b0101100, 0b00000, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1010011);</div> +<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span>}</div> +</div> +<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> </div> +<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> </div> +<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00435" data-start="{" data-end="}"> +<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abbdb403cdeef414fa2f867b702d5f6eb"> 435</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fmadds(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> </div> +<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, opc, res;</div> +<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs3;</div> +<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> </div> +<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R4_TYPE(opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1000011);</div> +<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span>}</div> +</div> +<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> </div> +<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> </div> +<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00457" data-start="{" data-end="}"> +<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a03aba9c70c5286dacebaeb0ef5219cc9"> 457</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fmsubs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> </div> +<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, opc, res;</div> +<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs3;</div> +<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> </div> +<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R4_TYPE(opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1000111);</div> +<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span>}</div> +</div> +<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> </div> +<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> </div> +<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00479" data-start="{" data-end="}"> +<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a639fc7bd75933888540e9cceb67221a0"> 479</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fnmsubs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> </div> +<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, opc, res;</div> +<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs3;</div> +<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> </div> +<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R4_TYPE(opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1001011);</div> +<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span>}</div> +</div> +<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> </div> +<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> </div> +<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00501" data-start="{" data-end="}"> +<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa6473bc2d2721b57277b83a3ae0cfdb6"> 501</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> __attribute__ ((always_inline)) riscv_intrinsic_fnmadds(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> </div> +<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <a class="code hl_union" href="unionfloat__conv__t.html">float_conv_t</a> opa, opb, opc, res;</div> +<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs1;</div> +<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs2;</div> +<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a> = rs3;</div> +<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> </div> +<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a> = CUSTOM_INSTR_R4_TYPE(opc.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opb.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, opa.<a class="code hl_variable" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">binary_value</a>, 0b000, 0b1001111);</div> +<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> <span class="keywordflow">return</span> res.<a class="code hl_variable" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a>;</div> +<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span>}</div> +</div> +<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> </div> +<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> </div> +<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span><span class="comment">// Emulation functions</span></div> +<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span><span class="comment">// ################################################################################################</span></div> +<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> </div> +<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00524" data-start="{" data-end="}"> +<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a9d676567276439875c9b1a15b892b555"> 524</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fadds(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> </div> +<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> </div> +<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> <span class="keywordtype">float</span> res = opa + opb;</div> +<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> </div> +<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> <span class="comment">// make NAN canonical</span></div> +<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> <span class="keywordflow">if</span> (fpclassify(res) == FP_NAN) {</div> +<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> res = NAN;</div> +<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> }</div> +<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> </div> +<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span>}</div> +</div> +<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> </div> +<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> </div> +<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00547" data-start="{" data-end="}"> +<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ace5d95b855ec1aa8eacdb5bbeea58197"> 547</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fsubs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> </div> +<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> </div> +<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> <span class="keywordtype">float</span> res = opa - opb;</div> +<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> </div> +<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> <span class="comment">// make NAN canonical</span></div> +<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">if</span> (fpclassify(res) == FP_NAN) {</div> +<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> res = NAN;</div> +<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> }</div> +<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> </div> +<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span>}</div> +</div> +<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> </div> +<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> </div> +<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00570" data-start="{" data-end="}"> +<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ad43e8bdf4a6fbe229d22d24680f2be80"> 570</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fmuls(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> </div> +<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> </div> +<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> <span class="keywordtype">float</span> res = opa * opb;</div> +<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span>}</div> +</div> +<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> </div> +<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> </div> +<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00587" data-start="{" data-end="}"> +<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a872cd30fb61190bd1ac719d25b01f5a3"> 587</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fmins(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> </div> +<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> </div> +<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> <span class="keyword">union </span>{</div> +<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> uint32_t binary_value; </div> +<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <span class="keywordtype">float</span> float_value; </div> +<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> } tmp_a, tmp_b;</div> +<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> </div> +<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> <span class="keywordflow">if</span> ((fpclassify(opa) == FP_NAN) &amp;&amp; (fpclassify(opb) == FP_NAN)) {</div> +<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> <span class="keywordflow">return</span> nanf(<span class="stringliteral">&quot;&quot;</span>);</div> +<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> }</div> +<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> </div> +<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> <span class="keywordflow">if</span> (fpclassify(opa) == FP_NAN) {</div> +<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">return</span> opb;</div> +<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> }</div> +<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> </div> +<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> <span class="keywordflow">if</span> (fpclassify(opb) == FP_NAN) {</div> +<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <span class="keywordflow">return</span> opa;</div> +<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> }</div> +<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> </div> +<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> <span class="comment">// RISC-V spec: -0 &lt; +0</span></div> +<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> tmp_a.float_value = opa;</div> +<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> tmp_b.float_value = opb;</div> +<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> <span class="keywordflow">if</span> (((tmp_a.binary_value == 0x80000000) &amp;&amp; (tmp_b.binary_value == 0x00000000)) ||</div> +<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> ((tmp_a.binary_value == 0x00000000) &amp;&amp; (tmp_b.binary_value == 0x80000000))) {</div> +<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <span class="keywordflow">return</span> -0.0f;</div> +<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> }</div> +<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> </div> +<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> <span class="keywordflow">return</span> fmin(opa, opb);</div> +<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span>}</div> +</div> +<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> </div> +<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> </div> +<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00628" data-start="{" data-end="}"> +<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af9b16a32d2bb13c8af5a678271d74889"> 628</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fmaxs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> </div> +<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> </div> +<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> <span class="keyword">union </span>{</div> +<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> uint32_t binary_value; </div> +<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> <span class="keywordtype">float</span> float_value; </div> +<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> } tmp_a, tmp_b;</div> +<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> </div> +<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> </div> +<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <span class="keywordflow">if</span> ((fpclassify(opa) == FP_NAN) &amp;&amp; (fpclassify(opb) == FP_NAN)) {</div> +<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">return</span> nanf(<span class="stringliteral">&quot;&quot;</span>);</div> +<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> }</div> +<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> </div> +<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">if</span> (fpclassify(opa) == FP_NAN) {</div> +<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> <span class="keywordflow">return</span> opb;</div> +<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> }</div> +<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> </div> +<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">if</span> (fpclassify(opb) == FP_NAN) {</div> +<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">return</span> opa;</div> +<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> }</div> +<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> </div> +<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> <span class="comment">// RISC-V spec: -0 &lt; +0</span></div> +<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> tmp_a.float_value = opa;</div> +<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> tmp_b.float_value = opb;</div> +<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">if</span> (((tmp_a.binary_value == 0x80000000) &amp;&amp; (tmp_b.binary_value == 0x00000000)) ||</div> +<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> ((tmp_a.binary_value == 0x00000000) &amp;&amp; (tmp_b.binary_value == 0x80000000))) {</div> +<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> <span class="keywordflow">return</span> +0.0f;</div> +<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> }</div> +<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> </div> +<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> <span class="keywordflow">return</span> fmax(opa, opb);</div> +<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span>}</div> +</div> +<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> </div> +<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> </div> +<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00669" data-start="{" data-end="}"> +<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aad9fc7337e09081cf8c5bff8c28776c8"> 669</a></span>uint32_t __attribute__ ((noinline)) riscv_emulate_fcvt_wus(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> </div> +<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> </div> +<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">return</span> (uint32_t)rint(opa);</div> +<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span>}</div> +</div> +<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> </div> +<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> </div> +<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00683" data-start="{" data-end="}"> +<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a292365fe41a7a661e61ae746306ba5e9"> 683</a></span>int32_t __attribute__ ((noinline)) riscv_emulate_fcvt_ws(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> </div> +<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> </div> +<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> <span class="keywordflow">return</span> (int32_t)rint(opa);</div> +<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span>}</div> +</div> +<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> </div> +<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> </div> +<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00697" data-start="{" data-end="}"> +<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a10a05bface37bff32c78ed0746845794"> 697</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fcvt_swu(uint32_t rs1) {</div> +<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> </div> +<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> <span class="keywordflow">return</span> (<span class="keywordtype">float</span>)rs1;</div> +<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span>}</div> +</div> +<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> </div> +<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> </div> +<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00709" data-start="{" data-end="}"> +<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0f2260b7b5793a95c49670379fc89617"> 709</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fcvt_sw(int32_t rs1) {</div> +<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> </div> +<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> <span class="keywordflow">return</span> (<span class="keywordtype">float</span>)rs1;</div> +<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span>}</div> +</div> +<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> </div> +<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> </div> +<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00722" data-start="{" data-end="}"> +<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a7cb3c6570b911cd1dfb7b6e798cc1d21"> 722</a></span>uint32_t __attribute__ ((noinline)) riscv_emulate_feqs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> </div> +<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> </div> +<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <span class="keywordflow">if</span> ((fpclassify(opa) == FP_NAN) || (fpclassify(opb) == FP_NAN)) {</div> +<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> }</div> +<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> </div> +<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> <span class="keywordflow">if</span> isless(opa, opb) {</div> +<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> }</div> +<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> isgreater(opa, opb) {</div> +<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> }</div> +<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> <span class="keywordflow">return</span> 1;</div> +<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> }</div> +<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span>}</div> +</div> +<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> </div> +<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> </div> +<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00750" data-start="{" data-end="}"> +<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2b802122d53a2ce517b3d39fec34d7e0"> 750</a></span>uint32_t __attribute__ ((noinline)) riscv_emulate_flts(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> </div> +<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> </div> +<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <span class="keywordflow">if</span> ((fpclassify(opa) == FP_NAN) || (fpclassify(opb) == FP_NAN)) {</div> +<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> }</div> +<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> </div> +<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <span class="keywordflow">if</span> isless(opa, opb) {</div> +<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> <span class="keywordflow">return</span> 1;</div> +<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> }</div> +<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> }</div> +<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span>}</div> +</div> +<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> </div> +<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> </div> +<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00775" data-start="{" data-end="}"> +<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac5fdef0607602fa0bdb93b3535fd709e"> 775</a></span>uint32_t __attribute__ ((noinline)) riscv_emulate_fles(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> </div> +<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> </div> +<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> <span class="keywordflow">if</span> ((fpclassify(opa) == FP_NAN) || (fpclassify(opb) == FP_NAN)) {</div> +<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> }</div> +<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> </div> +<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> <span class="keywordflow">if</span> islessequal(opa, opb) {</div> +<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> <span class="keywordflow">return</span> 1;</div> +<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> }</div> +<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> }</div> +<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span>}</div> +</div> +<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> </div> +<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> </div> +<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00800" data-start="{" data-end="}"> +<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a12498d635f422f607b9b83facf3050dd"> 800</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fsgnjs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> </div> +<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> <span class="keywordtype">float</span> opa = rs1;</div> +<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> <span class="keywordtype">float</span> opb = rs2;</div> +<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> </div> +<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> <span class="keywordtype">int</span> sign_1 = (int)signbit(opa);</div> +<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> <span class="keywordtype">int</span> sign_2 = (int)signbit(opb);</div> +<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <span class="keywordtype">float</span> res = 0;</div> +<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> </div> +<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">if</span> (sign_2 != 0) { <span class="comment">// opb is negative</span></div> +<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">if</span> (sign_1 == 0) {</div> +<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> res = -opa;</div> +<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> }</div> +<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> res = opa;</div> +<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> }</div> +<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> }</div> +<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> <span class="keywordflow">else</span> { <span class="comment">// opb is positive</span></div> +<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> <span class="keywordflow">if</span> (sign_1 == 0) {</div> +<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> res = opa;</div> +<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> }</div> +<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> res = -opa;</div> +<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> }</div> +<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> }</div> +<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> </div> +<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> <span class="keywordflow">return</span> res;</div> +<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span>}</div> +</div> +<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> </div> +<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> </div> +<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00837" data-start="{" data-end="}"> +<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0c985e626ed1d69314f4e3a0f1f58624"> 837</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fsgnjns(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> </div> +<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> <span class="keywordtype">float</span> opa = rs1;</div> +<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> <span class="keywordtype">float</span> opb = rs2;</div> +<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> </div> +<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> <span class="keywordtype">int</span> sign_1 = (int)signbit(opa);</div> +<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> <span class="keywordtype">int</span> sign_2 = (int)signbit(opb);</div> +<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> <span class="keywordtype">float</span> res = 0;</div> +<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> </div> +<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> <span class="keywordflow">if</span> (sign_2 != 0) { <span class="comment">// opb is negative</span></div> +<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> <span class="keywordflow">if</span> (sign_1 == 0) {</div> +<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> res = opa;</div> +<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> }</div> +<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> res = -opa;</div> +<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> }</div> +<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> }</div> +<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> <span class="keywordflow">else</span> { <span class="comment">// opb is positive</span></div> +<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> <span class="keywordflow">if</span> (sign_1 == 0) {</div> +<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> res = -opa;</div> +<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> }</div> +<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> res = opa;</div> +<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> }</div> +<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> }</div> +<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> </div> +<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> <span class="keywordflow">return</span> res;</div> +<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span>}</div> +</div> +<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> </div> +<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> </div> +<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00874" data-start="{" data-end="}"> +<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a98caf7f310820052ae96ce0f45e6cd26"> 874</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fsgnjxs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> </div> +<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> <span class="keywordtype">float</span> opa = rs1;</div> +<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> <span class="keywordtype">float</span> opb = rs2;</div> +<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> </div> +<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> <span class="keywordtype">int</span> sign_1 = (int)signbit(opa);</div> +<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> <span class="keywordtype">int</span> sign_2 = (int)signbit(opb);</div> +<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> <span class="keywordtype">float</span> res = 0;</div> +<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> </div> +<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> <span class="keywordflow">if</span> (((sign_1 == 0) &amp;&amp; (sign_2 != 0)) || ((sign_1 != 0) &amp;&amp; (sign_2 == 0))) {</div> +<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> <span class="keywordflow">if</span> (sign_1 == 0) {</div> +<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> res = -opa;</div> +<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> }</div> +<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> res = opa;</div> +<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> }</div> +<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> }</div> +<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> <span class="keywordflow">if</span> (sign_1 == 0) {</div> +<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> res = opa;</div> +<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> }</div> +<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> res = -opa;</div> +<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> }</div> +<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> }</div> +<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> </div> +<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> <span class="keywordflow">return</span> res;</div> +<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span>}</div> +</div> +<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> </div> +<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> </div> +<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00910" data-start="{" data-end="}"> +<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ae41a0bf9d28c35f4d6db7177ccf8ee06"> 910</a></span>uint32_t __attribute__ ((noinline)) riscv_emulate_fclasss(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> </div> +<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> <span class="keywordtype">float</span> opa = rs1;</div> +<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> </div> +<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> <span class="keyword">union </span>{</div> +<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> uint32_t binary_value; </div> +<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> <span class="keywordtype">float</span> float_value; </div> +<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> } aux;</div> +<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> </div> +<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> <span class="comment">// RISC-V classify result layout</span></div> +<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> <span class="keyword">const</span> uint32_t CLASS_NEG_INF = 1 &lt;&lt; 0; <span class="comment">// negative infinity</span></div> +<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> <span class="keyword">const</span> uint32_t CLASS_NEG_NORM = 1 &lt;&lt; 1; <span class="comment">// negative normal number</span></div> +<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> <span class="keyword">const</span> uint32_t CLASS_NEG_DENORM = 1 &lt;&lt; 2; <span class="comment">// negative subnormal number</span></div> +<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span> <span class="keyword">const</span> uint32_t CLASS_NEG_ZERO = 1 &lt;&lt; 3; <span class="comment">// negative zero</span></div> +<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> <span class="keyword">const</span> uint32_t CLASS_POS_ZERO = 1 &lt;&lt; 4; <span class="comment">// positive zero</span></div> +<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> <span class="keyword">const</span> uint32_t CLASS_POS_DENORM = 1 &lt;&lt; 5; <span class="comment">// positive subnormal number</span></div> +<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span> <span class="keyword">const</span> uint32_t CLASS_POS_NORM = 1 &lt;&lt; 6; <span class="comment">// positive normal number</span></div> +<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> <span class="keyword">const</span> uint32_t CLASS_POS_INF = 1 &lt;&lt; 7; <span class="comment">// positive infinity</span></div> +<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> <span class="keyword">const</span> uint32_t CLASS_SNAN = 1 &lt;&lt; 8; <span class="comment">// signaling NaN (sNaN)</span></div> +<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> <span class="keyword">const</span> uint32_t CLASS_QNAN = 1 &lt;&lt; 9; <span class="comment">// quiet NaN (qNaN)</span></div> +<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span> </div> +<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> <span class="keywordtype">int</span> tmp = fpclassify(opa);</div> +<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span> <span class="keywordtype">int</span> sgn = (int)signbit(opa);</div> +<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> </div> +<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> uint32_t res = 0;</div> +<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> </div> +<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span> <span class="comment">// infinity</span></div> +<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> <span class="keywordflow">if</span> (tmp == FP_INFINITE) {</div> +<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span> <span class="keywordflow">if</span> (sgn) { res |= CLASS_NEG_INF; }</div> +<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> <span class="keywordflow">else</span> { res |= CLASS_POS_INF; }</div> +<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span> }</div> +<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> </div> +<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> <span class="comment">// zero</span></div> +<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span> <span class="keywordflow">if</span> (tmp == FP_ZERO) {</div> +<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span> <span class="keywordflow">if</span> (sgn) { res |= CLASS_NEG_ZERO; }</div> +<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span> <span class="keywordflow">else</span> { res |= CLASS_POS_ZERO; }</div> +<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"> 946</span> }</div> +<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span> </div> +<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"> 948</span> <span class="comment">// normal</span></div> +<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span> <span class="keywordflow">if</span> (tmp == FP_NORMAL) {</div> +<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> <span class="keywordflow">if</span> (sgn) { res |= CLASS_NEG_NORM; }</div> +<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> <span class="keywordflow">else</span> { res |= CLASS_POS_NORM; }</div> +<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> }</div> +<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span> </div> +<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> <span class="comment">// subnormal</span></div> +<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span> <span class="keywordflow">if</span> (tmp == FP_SUBNORMAL) {</div> +<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span> <span class="keywordflow">if</span> (sgn) { res |= CLASS_NEG_DENORM; }</div> +<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"> 957</span> <span class="keywordflow">else</span> { res |= CLASS_POS_DENORM; }</div> +<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> }</div> +<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span> </div> +<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"> 960</span> <span class="comment">// NaN</span></div> +<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span> <span class="keywordflow">if</span> (tmp == FP_NAN) {</div> +<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"> 962</span> aux.float_value = opa;</div> +<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"> 963</span> <span class="keywordflow">if</span> ((aux.binary_value &gt;&gt; 22) &amp; 0b1) { <span class="comment">// bit 22 (mantissa&#39;s MSB) is set -&gt; canonical (quiet) NAN</span></div> +<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span> res |= CLASS_QNAN;</div> +<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"> 965</span> }</div> +<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> res |= CLASS_SNAN;</div> +<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> }</div> +<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span> }</div> +<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> </div> +<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span> <span class="keywordflow">return</span> res;</div> +<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span>}</div> +</div> +<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"> 973</span> </div> +<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span> </div> +<div class="line"><a id="l00975" name="l00975"></a><span class="lineno"> 975</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00982" data-start="{" data-end="}"> +<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aeaf46a17b671278be2bf804159827a40"> 982</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fdivs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2) {</div> +<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"> 983</span> </div> +<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"> 984</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"> 985</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l00986" name="l00986"></a><span class="lineno"> 986</span> </div> +<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"> 987</span> <span class="keywordtype">float</span> res = opa / opb;</div> +<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"> 988</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span>}</div> +</div> +<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> </div> +<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> </div> +<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00998" data-start="{" data-end="}"> +<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a1ceb3450f1e5c62d3079cd0e93c03501"> 998</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fsqrts(<span class="keywordtype">float</span> rs1) {</div> +<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span> </div> +<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> </div> +<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span> <span class="keywordtype">float</span> res = sqrtf(opa);</div> +<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span>}</div> +</div> +<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> </div> +<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span> </div> +<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen01017" data-start="{" data-end="}"> +<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a39212f2e2bb0f1752092a1732f93edf3"> 1017</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fmadds(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span> </div> +<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span> <span class="keywordtype">float</span> opc = subnormal_flush(rs3);</div> +<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span> </div> +<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span> <span class="keywordtype">float</span> res = (opa * opb) + opc;</div> +<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span>}</div> +</div> +<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> </div> +<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> </div> +<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen01036" data-start="{" data-end="}"> +<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a05d0d5a8eb9422e93448efdeb679cabf"> 1036</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fmsubs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span> </div> +<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> <span class="keywordtype">float</span> opc = subnormal_flush(rs3);</div> +<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"> 1041</span> </div> +<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span> <span class="keywordtype">float</span> res = (opa * opb) - opc;</div> +<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"> 1043</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"> 1044</span>}</div> +</div> +<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span> </div> +<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span> </div> +<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen01055" data-start="{" data-end="}"> +<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a833638b346722dfa9d7d5c8d60998ec8"> 1055</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fnmsubs(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span> </div> +<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span> <span class="keywordtype">float</span> opc = subnormal_flush(rs3);</div> +<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span> </div> +<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span> <span class="keywordtype">float</span> res = -(opa * opb) + opc;</div> +<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span>}</div> +</div> +<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span> </div> +<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span> </div> +<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen01074" data-start="{" data-end="}"> +<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"><a class="line" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac8bb4450b39854ab07839e8f3505361c"> 1074</a></span><span class="keywordtype">float</span> __attribute__ ((noinline)) riscv_emulate_fnmadds(<span class="keywordtype">float</span> rs1, <span class="keywordtype">float</span> rs2, <span class="keywordtype">float</span> rs3) {</div> +<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span> </div> +<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span> <span class="keywordtype">float</span> opa = subnormal_flush(rs1);</div> +<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span> <span class="keywordtype">float</span> opb = subnormal_flush(rs2);</div> +<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span> <span class="keywordtype">float</span> opc = subnormal_flush(rs3);</div> +<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span> </div> +<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span> <span class="keywordtype">float</span> res = -(opa * opb) - opc;</div> +<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> <span class="keywordflow">return</span> subnormal_flush(res);</div> +<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span>}</div> +</div> +<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> </div> +<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span> </div> +<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_zfinx_extension_intrinsics_h</span></div> +<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> </div> +<div class="ttc" id="aunionfloat__conv__t_html"><div class="ttname"><a href="unionfloat__conv__t.html">float_conv_t</a></div><div class="ttdef"><b>Definition</b> neorv32_zfinx_extension_intrinsics.h:76</div></div> +<div class="ttc" id="aunionfloat__conv__t_html_a59ad19d41b1d973a6bda9032e1937606"><div class="ttname"><a href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">float_conv_t::binary_value</a></div><div class="ttdeci">uint32_t binary_value</div><div class="ttdef"><b>Definition</b> neorv32_zfinx_extension_intrinsics.h:77</div></div> +<div class="ttc" id="aunionfloat__conv__t_html_a95f2e38b437bd8d4e8de7f61d7474788"><div class="ttname"><a href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_conv_t::float_value</a></div><div class="ttdeci">float float_value</div><div class="ttdef"><b>Definition</b> neorv32_zfinx_extension_intrinsics.h:78</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/folderclosed.svg b/sw/folderclosed.svg new file mode 100644 index 0000000000..b04bed2e72 --- /dev/null +++ b/sw/folderclosed.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"> +<g style="fill:#4665A2;"> +<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/> +</g> +<g style="fill:#D8DFEE;stroke-width:0;"> +<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/> +</g> +</svg> diff --git a/sw/folderclosedd.svg b/sw/folderclosedd.svg new file mode 100644 index 0000000000..52f0166a23 --- /dev/null +++ b/sw/folderclosedd.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"> +<g style="fill:#C4CFE5;"> +<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/> +</g> +<g style="fill:#4665A2;stroke-width:0;"> +<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/> +</g> +</svg> diff --git a/sw/folderopen.svg b/sw/folderopen.svg new file mode 100644 index 0000000000..f6896dd254 --- /dev/null +++ b/sw/folderopen.svg @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"> +<g style="fill:#4665A2;"> +<path + d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z" + id="path2" /> +</g> +<g style="fill:#D8DFEE;stroke-width:0;"> +<path + d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z" + id="path199" /><path + d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z" + id="path201" /> +</g> +</svg> diff --git a/sw/folderopend.svg b/sw/folderopend.svg new file mode 100644 index 0000000000..2d1f06e7bc --- /dev/null +++ b/sw/folderopend.svg @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"> +<g style="fill:#C4CFE5;"> +<path d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z"/> +</g> +<g style="fill:#4665A2;stroke-width:0;"> +<path d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z" /> +<path d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z" /> +</g> +</svg> diff --git a/sw/functions.html b/sw/functions.html new file mode 100644 index 0000000000..5f33fc5426 --- /dev/null +++ b/sw/functions.html @@ -0,0 +1,208 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Data Fields</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div> + +<h3><a id="index_b" name="index_b"></a>- b -</h3><ul> +<li>binary_value&#160;:&#160;<a class="el" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">float_conv_t</a></li> +</ul> + + +<h3><a id="index_c" name="index_c"></a>- c -</h3><ul> +<li>CACHE&#160;:&#160;<a class="el" href="structneorv32__sysinfo__t.html#ada99a36ccda38b254d5b6a84883101f6">neorv32_sysinfo_t</a></li> +<li>CHANNEL_CFG&#160;:&#160;<a class="el" href="structneorv32__pwm__t.html#a5df0cf6c7c250365db3ada8db7cc19e9">neorv32_pwm_t</a></li> +<li>CLK&#160;:&#160;<a class="el" href="structneorv32__sysinfo__t.html#a3f8ce96050fc0a680afa9b7fdf7cb35c">neorv32_sysinfo_t</a></li> +<li>COUNT&#160;:&#160;<a class="el" href="structneorv32__gptmr__t.html#a1abc5bae1dffc64006e965d4570da479">neorv32_gptmr_t</a></li> +<li>CTRL&#160;:&#160;<a class="el" href="structneorv32__dma__t.html#a8480d6ad3ba5063cdf21dca286711569">neorv32_dma_t</a>, <a class="el" href="structneorv32__gptmr__t.html#a3c477ccb24ed12122d9d90244431c7e9">neorv32_gptmr_t</a>, <a class="el" href="structneorv32__neoled__t.html#adfe7618c002ff88dd22e65fcedfd6139">neorv32_neoled_t</a>, <a class="el" href="structneorv32__onewire__t.html#a310df3bab43e4438417b2ff948f4712a">neorv32_onewire_t</a>, <a class="el" href="structneorv32__sdi__t.html#af494f25cbcd8478cf384eb868e447303">neorv32_sdi_t</a>, <a class="el" href="structneorv32__slink__t.html#a39ece6aeeea6982002e164902a1e784f">neorv32_slink_t</a>, <a class="el" href="structneorv32__spi__t.html#a34fa748f0e3ceb75822c0a5553bd0420">neorv32_spi_t</a>, <a class="el" href="structneorv32__trng__t.html#ae2ff37ce30fb85ef59d9012534bc7e67">neorv32_trng_t</a>, <a class="el" href="structneorv32__twd__t.html#acff774cf759c304daf68d709b41b781a">neorv32_twd_t</a>, <a class="el" href="structneorv32__twi__t.html#a148a1c681a2632881b25ee41652b5304">neorv32_twi_t</a>, <a class="el" href="structneorv32__uart__t.html#a0a6227aeea38335d2b9a9da46b35451b">neorv32_uart_t</a>, <a class="el" href="structneorv32__wdt__t.html#a6ae41e28d08b0f06118c499f52b56f41">neorv32_wdt_t</a>, <a class="el" href="structneorv32__xip__t.html#a7ead9d6a4f784d766a6b2755c6d35235">neorv32_xip_t</a></li> +</ul> + + +<h3><a id="index_d" name="index_d"></a>- d -</h3><ul> +<li>DATA&#160;:&#160;<a class="el" href="structneorv32__crc__t.html#a47f286612848f597859aaef0d2d5da4d">neorv32_crc_t</a>, <a class="el" href="structneorv32__neoled__t.html#a995fb1d63a9dfb3f20d715932781c1de">neorv32_neoled_t</a>, <a class="el" href="structneorv32__sdi__t.html#a3ea6903c0924d0a1b633b6a2b0ae44f1">neorv32_sdi_t</a>, <a class="el" href="structneorv32__slink__t.html#a8af7d4ea9787cf94c599c82133c6aa74">neorv32_slink_t</a>, <a class="el" href="structneorv32__spi__t.html#a3901bad351213e34820197a33d589f1e">neorv32_spi_t</a>, <a class="el" href="structneorv32__trng__t.html#acf3f269a8097b731cd82e0d6660e16b5">neorv32_trng_t</a>, <a class="el" href="structneorv32__twd__t.html#a0ce59594f8c1aa8cffc78a384c6f6257">neorv32_twd_t</a>, <a class="el" href="structneorv32__uart__t.html#a38eec82aae9ed522a0d2afb9a9560036">neorv32_uart_t</a></li> +<li>DATA_HI&#160;:&#160;<a class="el" href="structneorv32__xip__t.html#a516ab9c075ef6d1fb741e243db7703b2">neorv32_xip_t</a></li> +<li>DATA_LAST&#160;:&#160;<a class="el" href="structneorv32__slink__t.html#ada8f10141d2161b83a5a367722ed6a77">neorv32_slink_t</a></li> +<li>DATA_LO&#160;:&#160;<a class="el" href="structneorv32__xip__t.html#ad64048bb3544e712b1c668c2ef343ccb">neorv32_xip_t</a></li> +<li>day&#160;:&#160;<a class="el" href="structdate__t.html#a482ad87226bae7841dfec63e035aeace">date_t</a></li> +<li>DCMD&#160;:&#160;<a class="el" href="structneorv32__onewire__t.html#ab8f4e61ac777c55cd1e5805eb03d3d4b">neorv32_onewire_t</a>, <a class="el" href="structneorv32__twi__t.html#ae311e0827bdb178c6dd8c4535b80d5cb">neorv32_twi_t</a></li> +<li>DST_BASE&#160;:&#160;<a class="el" href="structneorv32__dma__t.html#aee8a6cf3cbd9fe3c5995f046ffb9a1c0">neorv32_dma_t</a></li> +</ul> + + +<h3><a id="index_e" name="index_e"></a>- e -</h3><ul> +<li>EIE&#160;:&#160;<a class="el" href="structneorv32__xirq__t.html#aef3c2b491207abd68bf6392f97096a74">neorv32_xirq_t</a></li> +<li>ESC&#160;:&#160;<a class="el" href="structneorv32__xirq__t.html#ae4f7f3f41210ff329b6f82d5dfada88a">neorv32_xirq_t</a></li> +</ul> + + +<h3><a id="index_f" name="index_f"></a>- f -</h3><ul> +<li>float_value&#160;:&#160;<a class="el" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_conv_t</a></li> +</ul> + + +<h3><a id="index_h" name="index_h"></a>- h -</h3><ul> +<li>hours&#160;:&#160;<a class="el" href="structdate__t.html#a39a23695634a2814d827984f4eea54eb">date_t</a></li> +</ul> + + +<h3><a id="index_i" name="index_i"></a>- i -</h3><ul> +<li>INPUT&#160;:&#160;<a class="el" href="structneorv32__gpio__t.html#a208ee622d43fee3574072f19a98c8808">neorv32_gpio_t</a></li> +</ul> + + +<h3><a id="index_m" name="index_m"></a>- m -</h3><ul> +<li>MEM&#160;:&#160;<a class="el" href="structneorv32__sysinfo__t.html#a51eee92b1824c1b19eb0a83a0a9c7d4c">neorv32_sysinfo_t</a></li> +<li>minutes&#160;:&#160;<a class="el" href="structdate__t.html#a2ab79834ebae42979e359bf30ad5f67a">date_t</a></li> +<li>MODE&#160;:&#160;<a class="el" href="structneorv32__crc__t.html#ad720502701f16e6e952bbcaee980017c">neorv32_crc_t</a></li> +<li>month&#160;:&#160;<a class="el" href="structdate__t.html#a1a97f6a755cd4209a0880cf811d52c7b">date_t</a></li> +<li>MSWI&#160;:&#160;<a class="el" href="structneorv32__clint__t.html#a7b49826af73aae2035cd697cb4b2666b">neorv32_clint_t</a></li> +<li>MTIME&#160;:&#160;<a class="el" href="structneorv32__clint__t.html#aea25562a01a789da8b6c5ee82c6a9ef0">neorv32_clint_t</a></li> +<li>MTIMECMP&#160;:&#160;<a class="el" href="structneorv32__clint__t.html#ac198a6ec62ea154d2533aebdd7b0df36">neorv32_clint_t</a></li> +</ul> + + +<h3><a id="index_o" name="index_o"></a>- o -</h3><ul> +<li>OUTPUT&#160;:&#160;<a class="el" href="structneorv32__gpio__t.html#abaf7de4f79adfc3debcde93fa4a921bb">neorv32_gpio_t</a></li> +</ul> + + +<h3><a id="index_p" name="index_p"></a>- p -</h3><ul> +<li>POLY&#160;:&#160;<a class="el" href="structneorv32__crc__t.html#a9bbcab843ddba4f9772d07478947a661">neorv32_crc_t</a></li> +<li>ptrSpiBuf&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#a487a6510820871ff8d0da7699463f6d9">t_neorv32_spi</a></li> +</ul> + + +<h3><a id="index_r" name="index_r"></a>- r -</h3><ul> +<li>REG&#160;:&#160;<a class="el" href="structneorv32__cfs__t.html#a9bfa2b6f4938f42fb1ee3beaeb8cc32e">neorv32_cfs_t</a></li> +<li>reserved&#160;:&#160;<a class="el" href="structneorv32__xip__t.html#aacb77d586c3caec518e8e0024cfe745c">neorv32_xip_t</a></li> +<li>RESET&#160;:&#160;<a class="el" href="structneorv32__wdt__t.html#a0a273e8ca2bd92547bf7727ec65a9449">neorv32_wdt_t</a></li> +<li>ROUTE&#160;:&#160;<a class="el" href="structneorv32__slink__t.html#a0b2417a1a587da45909ce2a948f90e22">neorv32_slink_t</a></li> +</ul> + + +<h3><a id="index_s" name="index_s"></a>- s -</h3><ul> +<li>seconds&#160;:&#160;<a class="el" href="structdate__t.html#a1071948e7754cb415da9714d59a315bf">date_t</a></li> +<li>SOC&#160;:&#160;<a class="el" href="structneorv32__sysinfo__t.html#ac43abe3b416da3a2895d1d06537a14c3">neorv32_sysinfo_t</a></li> +<li>SRC_BASE&#160;:&#160;<a class="el" href="structneorv32__dma__t.html#a3b214d1a373c7f15b374e113d7110b42">neorv32_dma_t</a></li> +<li>SREG&#160;:&#160;<a class="el" href="structneorv32__crc__t.html#abf2b419f2aefdb6f2a6b81a02cb8612d">neorv32_crc_t</a></li> +</ul> + + +<h3><a id="index_t" name="index_t"></a>- t -</h3><ul> +<li>THRES&#160;:&#160;<a class="el" href="structneorv32__gptmr__t.html#a666ebcbea13dafcf1987629f3e0092ee">neorv32_gptmr_t</a></li> +<li>TPOL&#160;:&#160;<a class="el" href="structneorv32__xirq__t.html#a5fe0036a2cada585228b60aaa780e92a">neorv32_xirq_t</a></li> +<li>TTYP&#160;:&#160;<a class="el" href="structneorv32__xirq__t.html#ab7117c210b5f0a8ebc369eeba6a4a5bc">neorv32_xirq_t</a></li> +<li>TTYPE&#160;:&#160;<a class="el" href="structneorv32__dma__t.html#a70c28642195765409d97b941e98f47ca">neorv32_dma_t</a></li> +</ul> + + +<h3><a id="index_u" name="index_u"></a>- u -</h3><ul> +<li>uint16Fifo&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#a71fb3f91af197e1abdbe97d62130ad0f">t_neorv32_spi</a></li> +<li>uint32Read&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#a5750a54f8312ec2fed349eb9fbeff323">t_neorv32_spi</a></li> +<li>uint32Total&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#aa4d96f72e57fb6930ab43de6fb0a85ae">t_neorv32_spi</a></li> +<li>uint32Write&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#aa89b7a769e54e331798e4d68d02a7b43">t_neorv32_spi</a></li> +<li>uint8Csn&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#a435c266758a440d32de4344472e3514a">t_neorv32_spi</a></li> +<li>uint8IsBusy&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#a8ed31f9393bee5b963e08582b6c517ed">t_neorv32_spi</a></li> +</ul> + + +<h3><a id="index_w" name="index_w"></a>- w -</h3><ul> +<li>weekday&#160;:&#160;<a class="el" href="structdate__t.html#a44167cd71416886e55048310af6d4e1b">date_t</a></li> +</ul> + + +<h3><a id="index_y" name="index_y"></a>- y -</h3><ul> +<li>year&#160;:&#160;<a class="el" href="structdate__t.html#aabab1b1efd94b69bfb28b639c612dd4f">date_t</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/functions_vars.html b/sw/functions_vars.html new file mode 100644 index 0000000000..22414810d2 --- /dev/null +++ b/sw/functions_vars.html @@ -0,0 +1,208 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Data Fields - Variables</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented variables with links to the struct/union documentation for each field:</div> + +<h3><a id="index_b" name="index_b"></a>- b -</h3><ul> +<li>binary_value&#160;:&#160;<a class="el" href="unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606">float_conv_t</a></li> +</ul> + + +<h3><a id="index_c" name="index_c"></a>- c -</h3><ul> +<li>CACHE&#160;:&#160;<a class="el" href="structneorv32__sysinfo__t.html#ada99a36ccda38b254d5b6a84883101f6">neorv32_sysinfo_t</a></li> +<li>CHANNEL_CFG&#160;:&#160;<a class="el" href="structneorv32__pwm__t.html#a5df0cf6c7c250365db3ada8db7cc19e9">neorv32_pwm_t</a></li> +<li>CLK&#160;:&#160;<a class="el" href="structneorv32__sysinfo__t.html#a3f8ce96050fc0a680afa9b7fdf7cb35c">neorv32_sysinfo_t</a></li> +<li>COUNT&#160;:&#160;<a class="el" href="structneorv32__gptmr__t.html#a1abc5bae1dffc64006e965d4570da479">neorv32_gptmr_t</a></li> +<li>CTRL&#160;:&#160;<a class="el" href="structneorv32__dma__t.html#a8480d6ad3ba5063cdf21dca286711569">neorv32_dma_t</a>, <a class="el" href="structneorv32__gptmr__t.html#a3c477ccb24ed12122d9d90244431c7e9">neorv32_gptmr_t</a>, <a class="el" href="structneorv32__neoled__t.html#adfe7618c002ff88dd22e65fcedfd6139">neorv32_neoled_t</a>, <a class="el" href="structneorv32__onewire__t.html#a310df3bab43e4438417b2ff948f4712a">neorv32_onewire_t</a>, <a class="el" href="structneorv32__sdi__t.html#af494f25cbcd8478cf384eb868e447303">neorv32_sdi_t</a>, <a class="el" href="structneorv32__slink__t.html#a39ece6aeeea6982002e164902a1e784f">neorv32_slink_t</a>, <a class="el" href="structneorv32__spi__t.html#a34fa748f0e3ceb75822c0a5553bd0420">neorv32_spi_t</a>, <a class="el" href="structneorv32__trng__t.html#ae2ff37ce30fb85ef59d9012534bc7e67">neorv32_trng_t</a>, <a class="el" href="structneorv32__twd__t.html#acff774cf759c304daf68d709b41b781a">neorv32_twd_t</a>, <a class="el" href="structneorv32__twi__t.html#a148a1c681a2632881b25ee41652b5304">neorv32_twi_t</a>, <a class="el" href="structneorv32__uart__t.html#a0a6227aeea38335d2b9a9da46b35451b">neorv32_uart_t</a>, <a class="el" href="structneorv32__wdt__t.html#a6ae41e28d08b0f06118c499f52b56f41">neorv32_wdt_t</a>, <a class="el" href="structneorv32__xip__t.html#a7ead9d6a4f784d766a6b2755c6d35235">neorv32_xip_t</a></li> +</ul> + + +<h3><a id="index_d" name="index_d"></a>- d -</h3><ul> +<li>DATA&#160;:&#160;<a class="el" href="structneorv32__crc__t.html#a47f286612848f597859aaef0d2d5da4d">neorv32_crc_t</a>, <a class="el" href="structneorv32__neoled__t.html#a995fb1d63a9dfb3f20d715932781c1de">neorv32_neoled_t</a>, <a class="el" href="structneorv32__sdi__t.html#a3ea6903c0924d0a1b633b6a2b0ae44f1">neorv32_sdi_t</a>, <a class="el" href="structneorv32__slink__t.html#a8af7d4ea9787cf94c599c82133c6aa74">neorv32_slink_t</a>, <a class="el" href="structneorv32__spi__t.html#a3901bad351213e34820197a33d589f1e">neorv32_spi_t</a>, <a class="el" href="structneorv32__trng__t.html#acf3f269a8097b731cd82e0d6660e16b5">neorv32_trng_t</a>, <a class="el" href="structneorv32__twd__t.html#a0ce59594f8c1aa8cffc78a384c6f6257">neorv32_twd_t</a>, <a class="el" href="structneorv32__uart__t.html#a38eec82aae9ed522a0d2afb9a9560036">neorv32_uart_t</a></li> +<li>DATA_HI&#160;:&#160;<a class="el" href="structneorv32__xip__t.html#a516ab9c075ef6d1fb741e243db7703b2">neorv32_xip_t</a></li> +<li>DATA_LAST&#160;:&#160;<a class="el" href="structneorv32__slink__t.html#ada8f10141d2161b83a5a367722ed6a77">neorv32_slink_t</a></li> +<li>DATA_LO&#160;:&#160;<a class="el" href="structneorv32__xip__t.html#ad64048bb3544e712b1c668c2ef343ccb">neorv32_xip_t</a></li> +<li>day&#160;:&#160;<a class="el" href="structdate__t.html#a482ad87226bae7841dfec63e035aeace">date_t</a></li> +<li>DCMD&#160;:&#160;<a class="el" href="structneorv32__onewire__t.html#ab8f4e61ac777c55cd1e5805eb03d3d4b">neorv32_onewire_t</a>, <a class="el" href="structneorv32__twi__t.html#ae311e0827bdb178c6dd8c4535b80d5cb">neorv32_twi_t</a></li> +<li>DST_BASE&#160;:&#160;<a class="el" href="structneorv32__dma__t.html#aee8a6cf3cbd9fe3c5995f046ffb9a1c0">neorv32_dma_t</a></li> +</ul> + + +<h3><a id="index_e" name="index_e"></a>- e -</h3><ul> +<li>EIE&#160;:&#160;<a class="el" href="structneorv32__xirq__t.html#aef3c2b491207abd68bf6392f97096a74">neorv32_xirq_t</a></li> +<li>ESC&#160;:&#160;<a class="el" href="structneorv32__xirq__t.html#ae4f7f3f41210ff329b6f82d5dfada88a">neorv32_xirq_t</a></li> +</ul> + + +<h3><a id="index_f" name="index_f"></a>- f -</h3><ul> +<li>float_value&#160;:&#160;<a class="el" href="unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788">float_conv_t</a></li> +</ul> + + +<h3><a id="index_h" name="index_h"></a>- h -</h3><ul> +<li>hours&#160;:&#160;<a class="el" href="structdate__t.html#a39a23695634a2814d827984f4eea54eb">date_t</a></li> +</ul> + + +<h3><a id="index_i" name="index_i"></a>- i -</h3><ul> +<li>INPUT&#160;:&#160;<a class="el" href="structneorv32__gpio__t.html#a208ee622d43fee3574072f19a98c8808">neorv32_gpio_t</a></li> +</ul> + + +<h3><a id="index_m" name="index_m"></a>- m -</h3><ul> +<li>MEM&#160;:&#160;<a class="el" href="structneorv32__sysinfo__t.html#a51eee92b1824c1b19eb0a83a0a9c7d4c">neorv32_sysinfo_t</a></li> +<li>minutes&#160;:&#160;<a class="el" href="structdate__t.html#a2ab79834ebae42979e359bf30ad5f67a">date_t</a></li> +<li>MODE&#160;:&#160;<a class="el" href="structneorv32__crc__t.html#ad720502701f16e6e952bbcaee980017c">neorv32_crc_t</a></li> +<li>month&#160;:&#160;<a class="el" href="structdate__t.html#a1a97f6a755cd4209a0880cf811d52c7b">date_t</a></li> +<li>MSWI&#160;:&#160;<a class="el" href="structneorv32__clint__t.html#a7b49826af73aae2035cd697cb4b2666b">neorv32_clint_t</a></li> +<li>MTIME&#160;:&#160;<a class="el" href="structneorv32__clint__t.html#aea25562a01a789da8b6c5ee82c6a9ef0">neorv32_clint_t</a></li> +<li>MTIMECMP&#160;:&#160;<a class="el" href="structneorv32__clint__t.html#ac198a6ec62ea154d2533aebdd7b0df36">neorv32_clint_t</a></li> +</ul> + + +<h3><a id="index_o" name="index_o"></a>- o -</h3><ul> +<li>OUTPUT&#160;:&#160;<a class="el" href="structneorv32__gpio__t.html#abaf7de4f79adfc3debcde93fa4a921bb">neorv32_gpio_t</a></li> +</ul> + + +<h3><a id="index_p" name="index_p"></a>- p -</h3><ul> +<li>POLY&#160;:&#160;<a class="el" href="structneorv32__crc__t.html#a9bbcab843ddba4f9772d07478947a661">neorv32_crc_t</a></li> +<li>ptrSpiBuf&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#a487a6510820871ff8d0da7699463f6d9">t_neorv32_spi</a></li> +</ul> + + +<h3><a id="index_r" name="index_r"></a>- r -</h3><ul> +<li>REG&#160;:&#160;<a class="el" href="structneorv32__cfs__t.html#a9bfa2b6f4938f42fb1ee3beaeb8cc32e">neorv32_cfs_t</a></li> +<li>reserved&#160;:&#160;<a class="el" href="structneorv32__xip__t.html#aacb77d586c3caec518e8e0024cfe745c">neorv32_xip_t</a></li> +<li>RESET&#160;:&#160;<a class="el" href="structneorv32__wdt__t.html#a0a273e8ca2bd92547bf7727ec65a9449">neorv32_wdt_t</a></li> +<li>ROUTE&#160;:&#160;<a class="el" href="structneorv32__slink__t.html#a0b2417a1a587da45909ce2a948f90e22">neorv32_slink_t</a></li> +</ul> + + +<h3><a id="index_s" name="index_s"></a>- s -</h3><ul> +<li>seconds&#160;:&#160;<a class="el" href="structdate__t.html#a1071948e7754cb415da9714d59a315bf">date_t</a></li> +<li>SOC&#160;:&#160;<a class="el" href="structneorv32__sysinfo__t.html#ac43abe3b416da3a2895d1d06537a14c3">neorv32_sysinfo_t</a></li> +<li>SRC_BASE&#160;:&#160;<a class="el" href="structneorv32__dma__t.html#a3b214d1a373c7f15b374e113d7110b42">neorv32_dma_t</a></li> +<li>SREG&#160;:&#160;<a class="el" href="structneorv32__crc__t.html#abf2b419f2aefdb6f2a6b81a02cb8612d">neorv32_crc_t</a></li> +</ul> + + +<h3><a id="index_t" name="index_t"></a>- t -</h3><ul> +<li>THRES&#160;:&#160;<a class="el" href="structneorv32__gptmr__t.html#a666ebcbea13dafcf1987629f3e0092ee">neorv32_gptmr_t</a></li> +<li>TPOL&#160;:&#160;<a class="el" href="structneorv32__xirq__t.html#a5fe0036a2cada585228b60aaa780e92a">neorv32_xirq_t</a></li> +<li>TTYP&#160;:&#160;<a class="el" href="structneorv32__xirq__t.html#ab7117c210b5f0a8ebc369eeba6a4a5bc">neorv32_xirq_t</a></li> +<li>TTYPE&#160;:&#160;<a class="el" href="structneorv32__dma__t.html#a70c28642195765409d97b941e98f47ca">neorv32_dma_t</a></li> +</ul> + + +<h3><a id="index_u" name="index_u"></a>- u -</h3><ul> +<li>uint16Fifo&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#a71fb3f91af197e1abdbe97d62130ad0f">t_neorv32_spi</a></li> +<li>uint32Read&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#a5750a54f8312ec2fed349eb9fbeff323">t_neorv32_spi</a></li> +<li>uint32Total&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#aa4d96f72e57fb6930ab43de6fb0a85ae">t_neorv32_spi</a></li> +<li>uint32Write&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#aa89b7a769e54e331798e4d68d02a7b43">t_neorv32_spi</a></li> +<li>uint8Csn&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#a435c266758a440d32de4344472e3514a">t_neorv32_spi</a></li> +<li>uint8IsBusy&#160;:&#160;<a class="el" href="structt__neorv32__spi.html#a8ed31f9393bee5b963e08582b6c517ed">t_neorv32_spi</a></li> +</ul> + + +<h3><a id="index_w" name="index_w"></a>- w -</h3><ul> +<li>weekday&#160;:&#160;<a class="el" href="structdate__t.html#a44167cd71416886e55048310af6d4e1b">date_t</a></li> +</ul> + + +<h3><a id="index_y" name="index_y"></a>- y -</h3><ul> +<li>year&#160;:&#160;<a class="el" href="structdate__t.html#aabab1b1efd94b69bfb28b639c612dd4f">date_t</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/game__of__life_2main_8c.html b/sw/game__of__life_2main_8c.html new file mode 100644 index 0000000000..aa6cd55882 --- /dev/null +++ b/sw/game__of__life_2main_8c.html @@ -0,0 +1,460 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/game_of_life/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_46981071cfd8ec44311b09fdcf6c06a8.html">game_of_life</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Conway's game of life in a UART terminal. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a78c5b500f0f057bcaedf6fedeca7c537" id="r_a78c5b500f0f057bcaedf6fedeca7c537"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a78c5b500f0f057bcaedf6fedeca7c537">NUM_CELLS_X</a>&#160;&#160;&#160;160</td></tr> +<tr class="separator:a78c5b500f0f057bcaedf6fedeca7c537"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aed77778557404b38bebb05b5830368b4" id="r_aed77778557404b38bebb05b5830368b4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aed77778557404b38bebb05b5830368b4">NUM_CELLS_Y</a>&#160;&#160;&#160;40</td></tr> +<tr class="separator:aed77778557404b38bebb05b5830368b4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3f33bf77abbf35c245956489f8f7e3a7" id="r_a3f33bf77abbf35c245956489f8f7e3a7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3f33bf77abbf35c245956489f8f7e3a7">GEN_DELAY</a>&#160;&#160;&#160;500</td></tr> +<tr class="separator:a3f33bf77abbf35c245956489f8f7e3a7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abe6bebcf1cb4f5b4d522c1706eb48663" id="r_abe6bebcf1cb4f5b4d522c1706eb48663"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abe6bebcf1cb4f5b4d522c1706eb48663">CELL_DEAD</a>&#160;&#160;&#160;(' ')</td></tr> +<tr class="separator:abe6bebcf1cb4f5b4d522c1706eb48663"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afa6488273e16792d9c3da5e40e3f572d" id="r_afa6488273e16792d9c3da5e40e3f572d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afa6488273e16792d9c3da5e40e3f572d">CELL_ALIVE</a>&#160;&#160;&#160;('#')</td></tr> +<tr class="separator:afa6488273e16792d9c3da5e40e3f572d"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a819f10c5b644a07eeb069b6e7f12050e" id="r_a819f10c5b644a07eeb069b6e7f12050e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a819f10c5b644a07eeb069b6e7f12050e">clear_universe</a> (int u)</td></tr> +<tr class="separator:a819f10c5b644a07eeb069b6e7f12050e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5315eb56128f1ca40d9f4d477c345dd7" id="r_a5315eb56128f1ca40d9f4d477c345dd7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5315eb56128f1ca40d9f4d477c345dd7">set_cell</a> (int u, int x, int y)</td></tr> +<tr class="separator:a5315eb56128f1ca40d9f4d477c345dd7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6bd541a19c62ea9ec620eaad3f218d16" id="r_a6bd541a19c62ea9ec620eaad3f218d16"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6bd541a19c62ea9ec620eaad3f218d16">get_cell</a> (int u, int x, int y)</td></tr> +<tr class="separator:a6bd541a19c62ea9ec620eaad3f218d16"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a977190adaa24a3f49fca1540b51d25a0" id="r_a977190adaa24a3f49fca1540b51d25a0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a977190adaa24a3f49fca1540b51d25a0">get_neighborhood</a> (int u, int x, int y)</td></tr> +<tr class="separator:a977190adaa24a3f49fca1540b51d25a0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9a455dea83a25f656fcc5217ad513dac" id="r_a9a455dea83a25f656fcc5217ad513dac"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9a455dea83a25f656fcc5217ad513dac">print_universe</a> (int u)</td></tr> +<tr class="separator:a9a455dea83a25f656fcc5217ad513dac"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aac4bec7738b12f5a4b4d7a3a6cb1ab8d" id="r_aac4bec7738b12f5a4b4d7a3a6cb1ab8d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aac4bec7738b12f5a4b4d7a3a6cb1ab8d">pop_count</a> (int u)</td></tr> +<tr class="separator:aac4bec7738b12f5a4b4d7a3a6cb1ab8d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a840291bc02cba5474a4cb46a9b9566fe" id="r_a840291bc02cba5474a4cb46a9b9566fe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a840291bc02cba5474a4cb46a9b9566fe">main</a> (void)</td></tr> +<tr class="separator:a840291bc02cba5474a4cb46a9b9566fe"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:ae0b5214cf0cd93049e9df8a95a09d826" id="r_ae0b5214cf0cd93049e9df8a95a09d826"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae0b5214cf0cd93049e9df8a95a09d826">universe</a> [2][<a class="el" href="#a78c5b500f0f057bcaedf6fedeca7c537">NUM_CELLS_X</a>/8][<a class="el" href="#aed77778557404b38bebb05b5830368b4">NUM_CELLS_Y</a>]</td></tr> +<tr class="separator:ae0b5214cf0cd93049e9df8a95a09d826"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Conway's game of life in a UART terminal. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<a id="afa6488273e16792d9c3da5e40e3f572d" name="afa6488273e16792d9c3da5e40e3f572d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afa6488273e16792d9c3da5e40e3f572d">&#9670;&#160;</a></span>CELL_ALIVE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define CELL_ALIVE&#160;&#160;&#160;('#')</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Symbol for alive cell </p> + +</div> +</div> +<a id="abe6bebcf1cb4f5b4d522c1706eb48663" name="abe6bebcf1cb4f5b4d522c1706eb48663"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abe6bebcf1cb4f5b4d522c1706eb48663">&#9670;&#160;</a></span>CELL_DEAD</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define CELL_DEAD&#160;&#160;&#160;(' ')</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Symbol for dead cell </p> + +</div> +</div> +<a id="a3f33bf77abbf35c245956489f8f7e3a7" name="a3f33bf77abbf35c245956489f8f7e3a7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3f33bf77abbf35c245956489f8f7e3a7">&#9670;&#160;</a></span>GEN_DELAY</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define GEN_DELAY&#160;&#160;&#160;500</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Delay between generations in ms </p> + +</div> +</div> +<a id="a78c5b500f0f057bcaedf6fedeca7c537" name="a78c5b500f0f057bcaedf6fedeca7c537"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a78c5b500f0f057bcaedf6fedeca7c537">&#9670;&#160;</a></span>NUM_CELLS_X</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NUM_CELLS_X&#160;&#160;&#160;160</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Universe x size (has to be a multiple of 8) </p> + +</div> +</div> +<a id="aed77778557404b38bebb05b5830368b4" name="aed77778557404b38bebb05b5830368b4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aed77778557404b38bebb05b5830368b4">&#9670;&#160;</a></span>NUM_CELLS_Y</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NUM_CELLS_Y&#160;&#160;&#160;40</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Universe y size </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a819f10c5b644a07eeb069b6e7f12050e" name="a819f10c5b644a07eeb069b6e7f12050e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a819f10c5b644a07eeb069b6e7f12050e">&#9670;&#160;</a></span>clear_universe()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void clear_universe </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>u</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Kill all cells in universe.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">u</td><td>Universe select (0 or 1). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a6bd541a19c62ea9ec620eaad3f218d16" name="a6bd541a19c62ea9ec620eaad3f218d16"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6bd541a19c62ea9ec620eaad3f218d16">&#9670;&#160;</a></span>get_cell()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int get_cell </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>u</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>x</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>y</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get state of cell.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">u</td><td>Universe select (0 or 1). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>X coordinate of cell. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>Y coordinate of cell. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Cell is dead when 0, cell is alive when 1. </dd></dl> + +</div> +</div> +<a id="a977190adaa24a3f49fca1540b51d25a0" name="a977190adaa24a3f49fca1540b51d25a0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a977190adaa24a3f49fca1540b51d25a0">&#9670;&#160;</a></span>get_neighborhood()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int get_neighborhood </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>u</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>x</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>y</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get number of living cells in neighborhood.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">u</td><td>Universe select (0 or 1). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>X coordinate of the neighborhood's center cell. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>Y coordinate of the neighborhood's center cell. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Number of living cells in neighborhood (0..9). </dd></dl> + +</div> +</div> +<a id="a840291bc02cba5474a4cb46a9b9566fe" name="a840291bc02cba5474a4cb46a9b9566fe"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a840291bc02cba5474a4cb46a9b9566fe">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Conway's Game of Life.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the UART to be synthesized (the TRNG is optional).</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +<a id="aac4bec7738b12f5a4b4d7a3a6cb1ab8d" name="aac4bec7738b12f5a4b4d7a3a6cb1ab8d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aac4bec7738b12f5a4b4d7a3a6cb1ab8d">&#9670;&#160;</a></span>pop_count()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int pop_count </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>u</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Count living cells in universe.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">u</td><td>Universe select (0 or 1). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Number of living cells. </dd></dl> + +</div> +</div> +<a id="a9a455dea83a25f656fcc5217ad513dac" name="a9a455dea83a25f656fcc5217ad513dac"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9a455dea83a25f656fcc5217ad513dac">&#9670;&#160;</a></span>print_universe()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void print_universe </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>u</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print universe via UARt.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">u</td><td>Universe select (0 or 1). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a5315eb56128f1ca40d9f4d477c345dd7" name="a5315eb56128f1ca40d9f4d477c345dd7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5315eb56128f1ca40d9f4d477c345dd7">&#9670;&#160;</a></span>set_cell()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void set_cell </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>u</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>x</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>y</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Make cell alive.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">u</td><td>Universe select (0 or 1). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>X coordinate of cell. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>Y coordinate of cell. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<h2 class="groupheader">Variable Documentation</h2> +<a id="ae0b5214cf0cd93049e9df8a95a09d826" name="ae0b5214cf0cd93049e9df8a95a09d826"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae0b5214cf0cd93049e9df8a95a09d826">&#9670;&#160;</a></span>universe</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t universe[2][<a class="el" href="#a78c5b500f0f057bcaedf6fedeca7c537">NUM_CELLS_X</a>/8][<a class="el" href="#aed77778557404b38bebb05b5830368b4">NUM_CELLS_Y</a>]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>The universe </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals.html b/sw/globals.html new file mode 100644 index 0000000000..88b153e701 --- /dev/null +++ b/sw/globals.html @@ -0,0 +1,107 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index__5F" name="index__5F"></a>- _ -</h3><ul> +<li>__crt0_max_heap&#160;:&#160;<a class="el" href="neorv32_8h.html#aaa2cb9e7075a852870fd67eff2861b18">neorv32.h</a></li> +<li>__heap_end&#160;:&#160;<a class="el" href="neorv32_8h.html#ae6ef7c715931df8bdc331577da14119b">neorv32.h</a></li> +<li>__heap_start&#160;:&#160;<a class="el" href="neorv32_8h.html#a0eaa3dcfb1db0c72534046feb9fa9b60">neorv32.h</a></li> +<li>__neorv32_rte_print_hex_word()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a01bf6c01f5a8cda2132b9ac98824edc1">neorv32_rte.c</a></li> +<li>__neorv32_rte_vector_lut&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a2c8272b4628edddb943bcfad829b561a">neorv32_rte.c</a></li> +<li>__neorv32_xirq_core()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a14661d628dd31e6bfce89376c6614627">neorv32_xirq.c</a></li> +<li>__neorv32_xirq_dummy_handler()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#ae4d9362b23a1341c595a4cd239a87091">neorv32_xirq.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_a.html b/sw/globals_a.html new file mode 100644 index 0000000000..d55db3bd6a --- /dev/null +++ b/sw/globals_a.html @@ -0,0 +1,104 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_a" name="index_a"></a>- a -</h3><ul> +<li>adaptive_proportion_test()&#160;:&#160;<a class="el" href="demo__trng_2main_8c.html#a23a91e6fe2cc44f3c29baf0d331e05db">main.c</a></li> +<li>amo_var&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#a9141e95a5f98420ddf8a43e6d20ff6dc">main.c</a></li> +<li>AUTO_BOOT_TIMEOUT&#160;:&#160;<a class="el" href="bootloader_8c.html#af6fcb607a9c320da869b72aa30893a69">bootloader.c</a></li> +<li>aux_print_hex_byte()&#160;:&#160;<a class="el" href="bus__explorer_2main_8c.html#ac582208281cd6fce4eb61c234f312ef6">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_b.html b/sw/globals_b.html new file mode 100644 index 0000000000..6f2ddb59cb --- /dev/null +++ b/sw/globals_b.html @@ -0,0 +1,103 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_b" name="index_b"></a>- b -</h3><ul> +<li>BAUD_RATE&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f">main.c</a></li> +<li>bootloader_trap_handler()&#160;:&#160;<a class="el" href="bootloader_8c.html#af13b4b3d5e6597feacf331e6d16b08e9">bootloader.c</a></li> +<li>BUFFER_SIZE&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a6b20d41d6252e9871430c242cb1a56e7">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_c.html b/sw/globals_c.html new file mode 100644 index 0000000000..80ab332efa --- /dev/null +++ b/sw/globals_c.html @@ -0,0 +1,347 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_c" name="index_c"></a>- c -</h3><ul> +<li>CELL_ALIVE&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#afa6488273e16792d9c3da5e40e3f572d">main.c</a></li> +<li>CELL_DEAD&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#abe6bebcf1cb4f5b4d522c1706eb48663">main.c</a></li> +<li>CFS_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#ace79ee46daf3a1b689d9fe79dfcd6627">neorv32.h</a></li> +<li>CFS_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#aae182648a2c23d070b9db0295388e001">neorv32.h</a></li> +<li>CFS_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a095f41fbefaa7acc1bfdd65cd3ce06ea">neorv32.h</a></li> +<li>CFS_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#aae6b2ae3fba20ff80bfb59735f179c26">neorv32.h</a></li> +<li>CHANNEL_CFG_enum&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175">neorv32_pwm.h</a></li> +<li>check_result()&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#a4f4c6d8481b4100f90955ba5a70428a4">main.c</a></li> +<li>clear_universe()&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a819f10c5b644a07eeb069b6e7f12050e">main.c</a></li> +<li>CLK_PRSC_1024&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17">neorv32.h</a></li> +<li>CLK_PRSC_128&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e">neorv32.h</a></li> +<li>CLK_PRSC_2&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05">neorv32.h</a></li> +<li>CLK_PRSC_2048&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79">neorv32.h</a></li> +<li>CLK_PRSC_4&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1">neorv32.h</a></li> +<li>CLK_PRSC_4096&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee">neorv32.h</a></li> +<li>CLK_PRSC_64&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da">neorv32.h</a></li> +<li>CLK_PRSC_8&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9">neorv32.h</a></li> +<li>compute_rate()&#160;:&#160;<a class="el" href="demo__trng_2main_8c.html#abbde1237eed617466fb971a78c3acd1e">main.c</a></li> +<li>CRC_MODE16&#160;:&#160;<a class="el" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f">neorv32_crc.h</a></li> +<li>CRC_MODE32&#160;:&#160;<a class="el" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa">neorv32_crc.h</a></li> +<li>CRC_MODE8&#160;:&#160;<a class="el" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a">neorv32_crc.h</a></li> +<li>CSR_CFUREG0&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f">neorv32_cpu_csr.h</a></li> +<li>CSR_CFUREG1&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8">neorv32_cpu_csr.h</a></li> +<li>CSR_CFUREG2&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68">neorv32_cpu_csr.h</a></li> +<li>CSR_CFUREG3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf">neorv32_cpu_csr.h</a></li> +<li>CSR_CYCLE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e">neorv32_cpu_csr.h</a></li> +<li>CSR_CYCLEH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db">neorv32_cpu_csr.h</a></li> +<li>CSR_DCSR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9">neorv32_cpu_csr.h</a></li> +<li>CSR_DPC&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b">neorv32_cpu_csr.h</a></li> +<li>CSR_DSCRATCH0&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7">neorv32_cpu_csr.h</a></li> +<li>CSR_FCSR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6">neorv32_cpu_csr.h</a></li> +<li>CSR_FFLAGS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a">neorv32_cpu_csr.h</a></li> +<li>CSR_FFLAGS_DZ&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b">neorv32_cpu_csr.h</a></li> +<li>CSR_FFLAGS_NV&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165">neorv32_cpu_csr.h</a></li> +<li>CSR_FFLAGS_NX&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6">neorv32_cpu_csr.h</a></li> +<li>CSR_FFLAGS_OF&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e">neorv32_cpu_csr.h</a></li> +<li>CSR_FFLAGS_UF&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819">neorv32_cpu_csr.h</a></li> +<li>CSR_FRM&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812">neorv32_cpu_csr.h</a></li> +<li>CSR_INSTRET&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66">neorv32_cpu_csr.h</a></li> +<li>CSR_INSTRETH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153">neorv32_cpu_csr.h</a></li> +<li>CSR_MARCHID&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4">neorv32_cpu_csr.h</a></li> +<li>CSR_MCAUSE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b">neorv32_cpu_csr.h</a></li> +<li>CSR_MCONFIGPTR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTEREN&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTEREN_CY&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a3d0c8ff6ba2c557cb5b5d353bdb95790">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTEREN_IR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a97e36c94b71fa2f9a805bbe47b0bc1b5">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_CY&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM10&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM11&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM12&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM13&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM14&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM15&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM16&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM17&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM18&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM19&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM20&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM21&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM22&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM23&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM24&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM25&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM26&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM27&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM28&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM29&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM30&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM31&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM4&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM5&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM6&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM7&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM8&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM9&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_IR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa">neorv32_cpu_csr.h</a></li> +<li>CSR_MCYCLE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77">neorv32_cpu_csr.h</a></li> +<li>CSR_MCYCLEH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b">neorv32_cpu_csr.h</a></li> +<li>CSR_MENVCFG&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98">neorv32_cpu_csr.h</a></li> +<li>CSR_MENVCFGH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8">neorv32_cpu_csr.h</a></li> +<li>CSR_MEPC&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153">neorv32_cpu_csr.h</a></li> +<li>CSR_MHARTID&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER10&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER10H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER11&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER11H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER12&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER12H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER13&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER13H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER14&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER14H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER15&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER15H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER3H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER4&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER4H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER5&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER5H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER6&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER6H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER7&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER7H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER8&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER8H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER9&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER9H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT10&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT11&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT12&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT13&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT14&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT15&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT4&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT5&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT6&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT7&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT8&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT9&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ0E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ10E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ11E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ12E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ13E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ14E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ15E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ1E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ2E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ3E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ4E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ5E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ6E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ7E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ8E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ9E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_MEIE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_MSIE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_MTIE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083">neorv32_cpu_csr.h</a></li> +<li>CSR_MIMPID&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd">neorv32_cpu_csr.h</a></li> +<li>CSR_MINSTRET&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb">neorv32_cpu_csr.h</a></li> +<li>CSR_MINSTRETH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ0P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ10P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ11P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ12P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ13P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ14P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ15P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ1P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ2P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ3P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ4P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ5P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ6P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ7P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ8P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ9P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_MEIP&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_MSIP&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_MTIP&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_B&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_C&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_I&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_M&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_MXL_HI&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_MXL_LO&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_U&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_X&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193">neorv32_cpu_csr.h</a></li> +<li>CSR_MSCRATCH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS_MIE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS_MPIE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS_MPP_H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS_MPP_L&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS_MPRV&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS_TW&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUSH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067">neorv32_cpu_csr.h</a></li> +<li>CSR_MTINST&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8">neorv32_cpu_csr.h</a></li> +<li>CSR_MTVAL&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e">neorv32_cpu_csr.h</a></li> +<li>CSR_MTVEC&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21">neorv32_cpu_csr.h</a></li> +<li>CSR_MVENDORID&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_CLKGATE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a35543f2ac5cde6e142bca6791b7b36b1">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_FASTMUL&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_FASTSHIFT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_IS_SIM&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_RFHWRST&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_SDEXT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_SDTRIG&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_SMPMP&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZALRSC&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adf45adc0bcbec0c1ffa944099257a947">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZBA&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adfc9122d93a71bf6df178022a52d22c4">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZBB&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a815cbe0149cba2a69025f6bec9946a85">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZBKB&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adb26c1e5bf6ae112625621dddd331735">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZBKC&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac9e87153c096d656b40cb7abdf3afd55">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZBKX&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a34519a66e749d63dc5bc7c145c297b64">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZBS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a469e8e449f0e442df531c8cf2c4f35c5">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZFINX&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZICNTR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZICOND&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZICSR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZIFENCEI&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZIHPM&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKN&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad7e7454a30c82c3d91acbc8c259e8c25">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKND&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48f1de7f79a0633644ae02c463d49375">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKNE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a216ec44d5be3b158acb7e033e352bad1">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKNH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5fe8e591901e0fd7ba6706c70e9c76ec">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a2649bee3397c74ada7b72677308f38c0">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKSED&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a43213190abb77304a78c15196c90a044">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKSH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5e4bf05830b66410bbf2ef2c68e5fd18">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a31788af612f04bc6b2a2bd15c1fb63c1">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZMMUL&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZXCFU&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR0&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR1&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR10&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR11&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR12&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR13&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR14&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR15&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR2&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR4&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR5&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR6&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR7&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR8&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR9&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPCFG0&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPCFG1&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPCFG2&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPCFG3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850">neorv32_cpu_csr.h</a></li> +<li>CSR_TDATA1&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57">neorv32_cpu_csr.h</a></li> +<li>CSR_TDATA2&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc">neorv32_cpu_csr.h</a></li> +<li>CSR_TINFO&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b">neorv32_cpu_csr.h</a></li> +<li>CSR_TSELECT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d">neorv32_cpu_csr.h</a></li> +<li>cypher_data_hw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a9ad2780a4cfe0d9cb4f1a846a92063ae">main.c</a></li> +<li>cypher_data_sw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a33b2d9298edf94c5961e67a59c371d00">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_d.html b/sw/globals_d.html new file mode 100644 index 0000000000..3a914cfbb7 --- /dev/null +++ b/sw/globals_d.html @@ -0,0 +1,139 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_d" name="index_d"></a>- d -</h3><ul> +<li>data_block&#160;:&#160;<a class="el" href="demo__emulate__unaligned_2main_8c.html#a556f675911f865ead06c36072b1b9c3b">main.c</a></li> +<li>DATA_NUM&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#ac637695e266f3af7799e352b374412ad">main.c</a></li> +<li>DEBUG_INFO&#160;:&#160;<a class="el" href="demo__emulate__unaligned_2main_8c.html#a4407b4d6eae3ba7fe9538b1242a7e165">main.c</a></li> +<li>DMA_CMD_B2B&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a5e01d4454c97eb8e4ecd1455090bbfa9">neorv32_dma.h</a></li> +<li>DMA_CMD_B2SW&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#adfecb3debff251070e4f6eb809412129">neorv32_dma.h</a></li> +<li>DMA_CMD_B2UW&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#aeb63f99217f14d1ddde35c1f6c104e72">neorv32_dma.h</a></li> +<li>DMA_CMD_DST_CONST&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6a0ce532aad39e6489e9d52bcb6f4cd2">neorv32_dma.h</a></li> +<li>DMA_CMD_DST_INC&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a61caa2602c6b148af55d990e3c0ae6be">neorv32_dma.h</a></li> +<li>DMA_CMD_ENDIAN&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a18fb7faa0a35f562821ca854d7c648b4">neorv32_dma.h</a></li> +<li>DMA_CMD_SRC_CONST&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#ae380022d8b8fb70da91f0892f2bc32c8">neorv32_dma.h</a></li> +<li>DMA_CMD_SRC_INC&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#acc081d58b53d1eddd2bff35b128d7da2">neorv32_dma.h</a></li> +<li>DMA_CMD_W2W&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a13a16ba8d6daf9c82312bf4d392d15a8">neorv32_dma.h</a></li> +<li>DMA_CTRL_AUTO&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b">neorv32_dma.h</a></li> +<li>DMA_CTRL_BUSY&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb">neorv32_dma.h</a></li> +<li>DMA_CTRL_DONE&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc">neorv32_dma.h</a></li> +<li>DMA_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838">neorv32_dma.h</a></li> +<li>DMA_CTRL_ERROR_RD&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96">neorv32_dma.h</a></li> +<li>DMA_CTRL_ERROR_WR&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101">neorv32_dma.h</a></li> +<li>DMA_CTRL_FENCE&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00">neorv32_dma.h</a></li> +<li>DMA_CTRL_FIRQ_SEL_LSB&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9">neorv32_dma.h</a></li> +<li>DMA_CTRL_FIRQ_SEL_MSB&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a">neorv32_dma.h</a></li> +<li>DMA_CTRL_FIRQ_TYPE&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe">neorv32_dma.h</a></li> +<li>DMA_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#ace46f95dec73b33bf2535eb653bf8f65">neorv32.h</a></li> +<li>dma_firq_handler()&#160;:&#160;<a class="el" href="demo__dma_2main_8c.html#aefcc5abb86a652587ff69be120a66487">main.c</a></li> +<li>DMA_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a1fa2b25383e6d05cf26f3517091ddbbf">neorv32.h</a></li> +<li>DMA_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a568b54ba7dfdae736d8d685dc4d32113">neorv32.h</a></li> +<li>DMA_STATUS_BUSY&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d">neorv32_dma.h</a></li> +<li>DMA_STATUS_ERR_RD&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492">neorv32_dma.h</a></li> +<li>DMA_STATUS_ERR_WR&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8">neorv32_dma.h</a></li> +<li>DMA_STATUS_IDLE&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f">neorv32_dma.h</a></li> +<li>DMA_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#ad2e81443af8a4ce2db3a4e3c1a8fb784">neorv32.h</a></li> +<li>DMA_TTYPE_DST_INC&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da">neorv32_dma.h</a></li> +<li>DMA_TTYPE_ENDIAN&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802">neorv32_dma.h</a></li> +<li>DMA_TTYPE_NUM_LSB&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450">neorv32_dma.h</a></li> +<li>DMA_TTYPE_NUM_MSB&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd">neorv32_dma.h</a></li> +<li>DMA_TTYPE_QSEL_LSB&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2">neorv32_dma.h</a></li> +<li>DMA_TTYPE_QSEL_MSB&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5">neorv32_dma.h</a></li> +<li>DMA_TTYPE_SRC_INC&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec">neorv32_dma.h</a></li> +<li>dump_memory()&#160;:&#160;<a class="el" href="bus__explorer_2main_8c.html#a6405739c6012158151eb082c31c312da">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs.html b/sw/globals_defs.html new file mode 100644 index 0000000000..85d5891c63 --- /dev/null +++ b/sw/globals_defs.html @@ -0,0 +1,101 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_a" name="index_a"></a>- a -</h3><ul> +<li>AUTO_BOOT_TIMEOUT&#160;:&#160;<a class="el" href="bootloader_8c.html#af6fcb607a9c320da869b72aa30893a69">bootloader.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_b.html b/sw/globals_defs_b.html new file mode 100644 index 0000000000..52d824571c --- /dev/null +++ b/sw/globals_defs_b.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_b" name="index_b"></a>- b -</h3><ul> +<li>BAUD_RATE&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f">main.c</a></li> +<li>BUFFER_SIZE&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a6b20d41d6252e9871430c242cb1a56e7">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_c.html b/sw/globals_defs_c.html new file mode 100644 index 0000000000..97ee542c89 --- /dev/null +++ b/sw/globals_defs_c.html @@ -0,0 +1,106 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_c" name="index_c"></a>- c -</h3><ul> +<li>CELL_ALIVE&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#afa6488273e16792d9c3da5e40e3f572d">main.c</a></li> +<li>CELL_DEAD&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#abe6bebcf1cb4f5b4d522c1706eb48663">main.c</a></li> +<li>CFS_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#ace79ee46daf3a1b689d9fe79dfcd6627">neorv32.h</a></li> +<li>CFS_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#aae182648a2c23d070b9db0295388e001">neorv32.h</a></li> +<li>CFS_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a095f41fbefaa7acc1bfdd65cd3ce06ea">neorv32.h</a></li> +<li>CFS_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#aae6b2ae3fba20ff80bfb59735f179c26">neorv32.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_d.html b/sw/globals_defs_d.html new file mode 100644 index 0000000000..d474b70fd6 --- /dev/null +++ b/sw/globals_defs_d.html @@ -0,0 +1,115 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_d" name="index_d"></a>- d -</h3><ul> +<li>DATA_NUM&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#ac637695e266f3af7799e352b374412ad">main.c</a></li> +<li>DEBUG_INFO&#160;:&#160;<a class="el" href="demo__emulate__unaligned_2main_8c.html#a4407b4d6eae3ba7fe9538b1242a7e165">main.c</a></li> +<li>DMA_CMD_B2B&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a5e01d4454c97eb8e4ecd1455090bbfa9">neorv32_dma.h</a></li> +<li>DMA_CMD_B2SW&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#adfecb3debff251070e4f6eb809412129">neorv32_dma.h</a></li> +<li>DMA_CMD_B2UW&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#aeb63f99217f14d1ddde35c1f6c104e72">neorv32_dma.h</a></li> +<li>DMA_CMD_DST_CONST&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6a0ce532aad39e6489e9d52bcb6f4cd2">neorv32_dma.h</a></li> +<li>DMA_CMD_DST_INC&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a61caa2602c6b148af55d990e3c0ae6be">neorv32_dma.h</a></li> +<li>DMA_CMD_ENDIAN&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a18fb7faa0a35f562821ca854d7c648b4">neorv32_dma.h</a></li> +<li>DMA_CMD_SRC_CONST&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#ae380022d8b8fb70da91f0892f2bc32c8">neorv32_dma.h</a></li> +<li>DMA_CMD_SRC_INC&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#acc081d58b53d1eddd2bff35b128d7da2">neorv32_dma.h</a></li> +<li>DMA_CMD_W2W&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a13a16ba8d6daf9c82312bf4d392d15a8">neorv32_dma.h</a></li> +<li>DMA_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#ace46f95dec73b33bf2535eb653bf8f65">neorv32.h</a></li> +<li>DMA_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a1fa2b25383e6d05cf26f3517091ddbbf">neorv32.h</a></li> +<li>DMA_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a568b54ba7dfdae736d8d685dc4d32113">neorv32.h</a></li> +<li>DMA_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#ad2e81443af8a4ce2db3a4e3c1a8fb784">neorv32.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_e.html b/sw/globals_defs_e.html new file mode 100644 index 0000000000..2a26f0b9f9 --- /dev/null +++ b/sw/globals_defs_e.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_e" name="index_e"></a>- e -</h3><ul> +<li>EXE_BASE_ADDR&#160;:&#160;<a class="el" href="bootloader_8c.html#a18936dc79b9e5aa84df016b046a6b977">bootloader.c</a></li> +<li>EXE_SIGNATURE&#160;:&#160;<a class="el" href="bootloader_8c.html#a0035ad41f622dbfc2412318a8ed39257">bootloader.c</a>, <a class="el" href="demo__xip_2main_8c.html#a0035ad41f622dbfc2412318a8ed39257">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_f.html b/sw/globals_defs_f.html new file mode 100644 index 0000000000..0f8718285c --- /dev/null +++ b/sw/globals_defs_f.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_f" name="index_f"></a>- f -</h3><ul> +<li>FLASH_ABYTES&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#af9b3c37c806499fc435302f5bce6a122">main.c</a></li> +<li>FLASH_BASE&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a23a9099a5f8fc9c6e253c0eecb2be8db">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_g.html b/sw/globals_defs_g.html new file mode 100644 index 0000000000..ffd777def9 --- /dev/null +++ b/sw/globals_defs_g.html @@ -0,0 +1,105 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_g" name="index_g"></a>- g -</h3><ul> +<li>GEN_DELAY&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a3f33bf77abbf35c245956489f8f7e3a7">main.c</a></li> +<li>GPTMR_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a0a59186908b498cb92273b7767966e26">neorv32.h</a></li> +<li>GPTMR_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a4a3164d123ddddd07750f868e67d82d8">neorv32.h</a></li> +<li>GPTMR_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#aac38deeef36de0a474ab238a3054f860">neorv32.h</a></li> +<li>GPTMR_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a445543c36d1f78477aa8ea4841c720a1">neorv32.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_i.html b/sw/globals_defs_i.html new file mode 100644 index 0000000000..9def4966dc --- /dev/null +++ b/sw/globals_defs_i.html @@ -0,0 +1,101 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_i" name="index_i"></a>- i -</h3><ul> +<li>IO_BASE_ADDRESS&#160;:&#160;<a class="el" href="neorv32_8h.html#a1eb0cb7fed7e154e15cb4009880a879c">neorv32.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_m.html b/sw/globals_defs_m.html new file mode 100644 index 0000000000..e98494f0c8 --- /dev/null +++ b/sw/globals_defs_m.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_m" name="index_m"></a>- m -</h3><ul> +<li>MAX_DUTY&#160;:&#160;<a class="el" href="demo__pwm_2main_8c.html#a2351f30f0895b552e5fe9944d69e645d">main.c</a></li> +<li>MAX_INTENSITY&#160;:&#160;<a class="el" href="demo__neopixel_2main_8c.html#a1d1d5e7ff16f25b68fdf779befd298f7">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_n.html b/sw/globals_defs_n.html new file mode 100644 index 0000000000..6aa4aedae6 --- /dev/null +++ b/sw/globals_defs_n.html @@ -0,0 +1,158 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_n" name="index_n"></a>- n -</h3><ul> +<li>NEOLED_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a8d0409818600c0b2acfe8253e8f027b8">neorv32.h</a></li> +<li>NEOLED_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#aded7d7f5f4ba3a6d90f9a29e62a8cfab">neorv32.h</a></li> +<li>NEOLED_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#aca6cfc3f580c4dfe1e213009ee450c58">neorv32.h</a></li> +<li>NEOLED_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab4a2ac455d7426992de6877ea7325f21">neorv32.h</a></li> +<li>NEORV32_BOOTROM_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a9af9742516d8f0e43cee33882ea41157">neorv32.h</a></li> +<li>NEORV32_CFS&#160;:&#160;<a class="el" href="neorv32__cfs_8h.html#a6c101b306bd096f78d351e39b308d3e2">neorv32_cfs.h</a></li> +<li>NEORV32_CFS_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a41d6f97daef61641da96b9f72f6b272f">neorv32.h</a></li> +<li>neorv32_cfu_r3_instr&#160;:&#160;<a class="el" href="neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c">neorv32_cpu_cfu.h</a></li> +<li>neorv32_cfu_r4_instr&#160;:&#160;<a class="el" href="neorv32__cpu__cfu_8h.html#a046a640f7f4a7b1b99a824fb325e2079">neorv32_cpu_cfu.h</a></li> +<li>NEORV32_CLINT&#160;:&#160;<a class="el" href="neorv32__clint_8h.html#aa85ecb43f16fa798c5e583f08d29ca3e">neorv32_clint.h</a></li> +<li>NEORV32_CLINT_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab1522f52c3c24ba2245dfa2783932d42">neorv32.h</a></li> +<li>NEORV32_CRC&#160;:&#160;<a class="el" href="neorv32__crc_8h.html#a110962d2b370f9d7997e459d9fd34271">neorv32_crc.h</a></li> +<li>NEORV32_CRC_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a0e2377055bdc0f416b5ae4385610600d">neorv32.h</a></li> +<li>NEORV32_DM_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a9bf0149681677f7d87abf8f62e2d9a3d">neorv32.h</a></li> +<li>NEORV32_DMA&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a0dcb61a0e0d2b45beb7818015adc8639">neorv32_dma.h</a></li> +<li>NEORV32_DMA_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#aa8d3a83ffad1e71f0832a5da78d62008">neorv32.h</a></li> +<li>NEORV32_GPIO&#160;:&#160;<a class="el" href="neorv32__gpio_8h.html#a1e35bbf26b9d1aa5373af0b9468eb445">neorv32_gpio.h</a></li> +<li>NEORV32_GPIO_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a7fd1e24d4de2eed7bf9cd5391562c7f4">neorv32.h</a></li> +<li>NEORV32_GPTMR&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a9e047791588ff21fc4dc1b06456bdfd2">neorv32_gptmr.h</a></li> +<li>NEORV32_GPTMR_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a0991b1a5ba1e8c3550eb9770d43589d0">neorv32.h</a></li> +<li>neorv32_heap_begin_c&#160;:&#160;<a class="el" href="neorv32_8h.html#aca22a64c8c580dfde1676732d97ead7c">neorv32.h</a></li> +<li>neorv32_heap_end_c&#160;:&#160;<a class="el" href="neorv32_8h.html#ac8b656bd05c05176638ea3f922228ca5">neorv32.h</a></li> +<li>neorv32_heap_size_c&#160;:&#160;<a class="el" href="neorv32_8h.html#a32904e45632a47e21f7c9d873720cdc5">neorv32.h</a></li> +<li>NEORV32_NEOLED&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#a3ccc1097bc70f92235d693b612fa994a">neorv32_neoled.h</a></li> +<li>NEORV32_NEOLED_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a559fdce92e8af5efc426c8fc48d14f99">neorv32.h</a></li> +<li>NEORV32_ONEWIRE&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#a6f119e35d7ac01f110987508ff3becc9">neorv32_onewire.h</a></li> +<li>NEORV32_ONEWIRE_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a8d0b612e52b77395a05d4f18af6fcf00">neorv32.h</a></li> +<li>NEORV32_PWM&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#ad4cb534c29e26fa56c10bef7afab8f51">neorv32_pwm.h</a></li> +<li>NEORV32_PWM_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#afef7a6b121a788560b29e2ee2a58c725">neorv32.h</a></li> +<li>NEORV32_RTE_NUM_TRAPS&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad14a1ca41df1e9300bfd01aef07dce59">neorv32_rte.h</a></li> +<li>NEORV32_SDI&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#afd0921633d6523d9b7235055e9bbf928">neorv32_sdi.h</a></li> +<li>NEORV32_SDI_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a9b316ec038bd94ada42c9dab57a0a3cb">neorv32.h</a></li> +<li>NEORV32_SLINK&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#a6380d894432de119a20993096db534df">neorv32_slink.h</a></li> +<li>NEORV32_SLINK_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab5e6dc57886cd5ed98b86f22fc37d7cc">neorv32.h</a></li> +<li>NEORV32_SPI&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#a5f3afc4e268670c54d90df67fa38ca22">neorv32_spi.h</a></li> +<li>NEORV32_SPI_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#aa466dc5eace7351bd438606f0f7475a7">neorv32.h</a></li> +<li>NEORV32_SYSINFO&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a140e23434ef7e85b2b38d8ae9695227b">neorv32_sysinfo.h</a></li> +<li>NEORV32_SYSINFO_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a5aa936f38782232c7ed3eab1283ee536">neorv32.h</a></li> +<li>NEORV32_TRNG&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a9794ff3746eb5321ad9c2bf522ea26dd">neorv32_trng.h</a></li> +<li>NEORV32_TRNG_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab4846cd153e8a23deec45d81cc8372a2">neorv32.h</a></li> +<li>NEORV32_TWD&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#ac9995cfc63846945ac26992148cd9401">neorv32_twd.h</a></li> +<li>NEORV32_TWD_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a8ac9e39bd62e9c5d7bcde0d44716b958">neorv32.h</a></li> +<li>NEORV32_TWI&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a2769c2fe5e0de01b12fe4a5fad029768">neorv32_twi.h</a></li> +<li>NEORV32_TWI_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a4a741408a4bb0938e03b99555306db9c">neorv32.h</a></li> +<li>NEORV32_UART0&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#a4c880a6b27e46f459e750425258b1bdb">neorv32_uart.h</a></li> +<li>NEORV32_UART0_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a000b37f710043fe21e49b2fdbc039d94">neorv32.h</a></li> +<li>NEORV32_UART1&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#aa2a9ded4523f001bf69935c80247fa2d">neorv32_uart.h</a></li> +<li>NEORV32_UART1_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a26a1defe18ce222b8b4ed1c760344700">neorv32.h</a></li> +<li>NEORV32_WDT&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a78615b08cd799063011606d084fef46c">neorv32_wdt.h</a></li> +<li>NEORV32_WDT_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a3012986cdd5748ee96bcc74cd7108dea">neorv32.h</a></li> +<li>NEORV32_XIP&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a3d6f138a347c16883b51069428eb7c1e">neorv32_xip.h</a></li> +<li>NEORV32_XIP_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#ae0978315beac8399f96f520bda81c7fe">neorv32.h</a></li> +<li>NEORV32_XIRQ&#160;:&#160;<a class="el" href="neorv32__xirq_8h.html#a0c0886139e9837867202e5f6a83307c4">neorv32_xirq.h</a></li> +<li>NEORV32_XIRQ_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a942a897be2d4ae6820bee0f7bb3a0ff1">neorv32.h</a></li> +<li>NUM_CELLS_X&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a78c5b500f0f057bcaedf6fedeca7c537">main.c</a></li> +<li>NUM_CELLS_Y&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#aed77778557404b38bebb05b5830368b4">main.c</a></li> +<li>NUM_LEDS_24BIT&#160;:&#160;<a class="el" href="demo__neopixel_2main_8c.html#aa1dddb8d6b3b4d2f19afc3c09e2ff572">main.c</a></li> +<li>NUM_TEST_CASES&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_o.html b/sw/globals_defs_o.html new file mode 100644 index 0000000000..0f612654c8 --- /dev/null +++ b/sw/globals_defs_o.html @@ -0,0 +1,104 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_o" name="index_o"></a>- o -</h3><ul> +<li>ONEWIRE_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a8bb1918679e32e898af2d485cfa44afb">neorv32.h</a></li> +<li>ONEWIRE_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a3853ef999f99ca062e6025038811d0f0">neorv32.h</a></li> +<li>ONEWIRE_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a142f4a1c754edfab292706618d427b94">neorv32.h</a></li> +<li>ONEWIRE_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a3e7aaa405a7d1fcd71a36c4b6b5a4081">neorv32.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_p.html b/sw/globals_defs_p.html new file mode 100644 index 0000000000..1cec4fd971 --- /dev/null +++ b/sw/globals_defs_p.html @@ -0,0 +1,104 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_p" name="index_p"></a>- p -</h3><ul> +<li>PRINT_GETC&#160;:&#160;<a class="el" href="bootloader_8c.html#a999b04603115ce08b0cb33e333312480">bootloader.c</a></li> +<li>PRINT_PUTC&#160;:&#160;<a class="el" href="bootloader_8c.html#aa7afbe8348ebd1a876a4d247553292e9">bootloader.c</a></li> +<li>PRINT_TEXT&#160;:&#160;<a class="el" href="bootloader_8c.html#a0e5a66f68ecc7a6f42088f349707e852">bootloader.c</a></li> +<li>PRINT_XNUM&#160;:&#160;<a class="el" href="bootloader_8c.html#a2f5cc04cf9c85f5d2958b384e053053b">bootloader.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_r.html b/sw/globals_defs_r.html new file mode 100644 index 0000000000..d751744663 --- /dev/null +++ b/sw/globals_defs_r.html @@ -0,0 +1,111 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_r" name="index_r"></a>- r -</h3><ul> +<li>RUN_ADDSUB_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a2d16b9e484b7af7897c7ae83f945ceca">main.c</a></li> +<li>RUN_CLASSIFY_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a7e134923925fa24fd1090281c3a416c3">main.c</a></li> +<li>RUN_COMPARE_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a4ee0f6d28896a97d2c0cad866e77b874">main.c</a></li> +<li>RUN_CONV_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#aa3b6c4d49be7372de9e771a0475306ac">main.c</a></li> +<li>RUN_CSR_TESTS&#160;:&#160;<a class="el" href="floating__point__test_2main_8c.html#a7ec330b668b5b24d666d7769ccecfee3">main.c</a></li> +<li>RUN_EXC_TESTS&#160;:&#160;<a class="el" href="floating__point__test_2main_8c.html#a1a1af220e72c69b03d13b2df53650e10">main.c</a></li> +<li>RUN_MINMAX_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#aed386f612417aeeeac8b08db27d515e4">main.c</a></li> +<li>RUN_MUL_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a97323ecaf1ae85e68a736b06bc3b58f8">main.c</a></li> +<li>RUN_SGNINJ_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a94f0b0908f48f383145ed61ef8eb0713">main.c</a></li> +<li>RUN_TIMING_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a6969308bd3633928893a2666f1df66fc">main.c</a></li> +<li>RUN_UNAVAIL_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a923de9c3e55322d85522740c0d0ff867">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_s.html b/sw/globals_defs_s.html new file mode 100644 index 0000000000..6afec1c931 --- /dev/null +++ b/sw/globals_defs_s.html @@ -0,0 +1,126 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_s" name="index_s"></a>- s -</h3><ul> +<li>SDI_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a30cf20b6d704c50cc5c46238bb43646f">neorv32.h</a></li> +<li>SDI_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a68611c0dfbe331739eff10230ac3fede">neorv32.h</a></li> +<li>SDI_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#aa0ff72ea560d7e1462787dc31bd467cf">neorv32.h</a></li> +<li>SDI_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a68925ca3f482f148caedd36118fd8d79">neorv32.h</a></li> +<li>SILENT_MODE&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013">main.c</a></li> +<li>SLINK_RX_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a8680ab1f14e512f21913572b35cbbf77">neorv32.h</a></li> +<li>SLINK_RX_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a5c48d5c4effb47cdb019aa2da7c84526">neorv32.h</a></li> +<li>SLINK_RX_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a4fff18e72d10377cdcb8d2ac0a617a5d">neorv32.h</a></li> +<li>SLINK_RX_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab1fdaedb2c4c8753ef3be87c82568dda">neorv32.h</a></li> +<li>SLINK_TX_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a232fe0eb5665373b6e2b464bdc228df2">neorv32.h</a></li> +<li>SLINK_TX_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#ac8e98b2af75c8e31f9815dee3dcbaf8e">neorv32.h</a></li> +<li>SLINK_TX_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a4e039d13b8d3f20453e1bb6b40512e43">neorv32.h</a></li> +<li>SLINK_TX_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a7fbe28901775e284d5700086f0b0bfcd">neorv32.h</a></li> +<li>SPI_BOOT_BASE_ADDR&#160;:&#160;<a class="el" href="bootloader_8c.html#a418adcf57119600c3580fd2297d28de0">bootloader.c</a></li> +<li>SPI_EN&#160;:&#160;<a class="el" href="bootloader_8c.html#aea75cf0485ce0a4ea320eba994859686">bootloader.c</a></li> +<li>SPI_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab8fcd3f80c373eb0f9d0fc6bf64ca626">neorv32.h</a></li> +<li>SPI_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#ab2f58f746febb29a9828447c733f8043">neorv32.h</a></li> +<li>SPI_FLASH_ADDR_BYTES&#160;:&#160;<a class="el" href="bootloader_8c.html#afe60a31c8561952f2f734fd67e6f7406">bootloader.c</a></li> +<li>SPI_FLASH_CLK_PRSC&#160;:&#160;<a class="el" href="bootloader_8c.html#a709071a651213770b4efe6e6e055ec3d">bootloader.c</a></li> +<li>SPI_FLASH_CS&#160;:&#160;<a class="el" href="bootloader_8c.html#aa2132454aada86216009f3af206899b1">bootloader.c</a></li> +<li>SPI_FLASH_SECTOR_SIZE&#160;:&#160;<a class="el" href="bootloader_8c.html#a00924a8ba223b2ca0e7031259b292c84">bootloader.c</a></li> +<li>SPI_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a4c1cd9ec9f80da2080e5d0d35cc524dd">neorv32.h</a></li> +<li>SPI_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a83c212f1f5d8ee2a5921b3b2b19e9cc4">neorv32.h</a></li> +<li>STATUS_LED_EN&#160;:&#160;<a class="el" href="bootloader_8c.html#aa9696325b450773c7a87c991abca3a54">bootloader.c</a></li> +<li>STATUS_LED_PIN&#160;:&#160;<a class="el" href="bootloader_8c.html#a089a71f836911c71b3f73fdd3b4b890b">bootloader.c</a></li> +<li>str&#160;:&#160;<a class="el" href="bootloader_8c.html#af6cf19e40e97afb5a7c29f7b439d091d">bootloader.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_t.html b/sw/globals_defs_t.html new file mode 100644 index 0000000000..f71f3f3a5a --- /dev/null +++ b/sw/globals_defs_t.html @@ -0,0 +1,109 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_t" name="index_t"></a>- t -</h3><ul> +<li>TESTCASES&#160;:&#160;<a class="el" href="demo__cfs_2main_8c.html#a906949f076e3e0d0082af3c3b1acb518">main.c</a></li> +<li>TWD_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a7cd6e1c5a9213256b277d8ef74bfb564">neorv32.h</a></li> +<li>TWD_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#ab61a869973c8d027360f9c1f47fb5b01">neorv32.h</a></li> +<li>TWD_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#ad00097ae9632a0f11c0dab96e272cff5">neorv32.h</a></li> +<li>TWD_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a3dc1579e0bd1718b8f24cda6b54ae43a">neorv32.h</a></li> +<li>TWI_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a0913144fce247e24ccd0f178b9ac32b7">neorv32.h</a></li> +<li>TWI_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a48b80113ca718fbdc50d75e1ec96a1ff">neorv32.h</a></li> +<li>TWI_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a1ac29f2f7bace5ba92b2b68a4541a60c">neorv32.h</a></li> +<li>TWI_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a0afc1a759116d4d73a199ef769bced47">neorv32.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_u.html b/sw/globals_defs_u.html new file mode 100644 index 0000000000..202cccb134 --- /dev/null +++ b/sw/globals_defs_u.html @@ -0,0 +1,119 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_u" name="index_u"></a>- u -</h3><ul> +<li>UART0_RX_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a6b55ce6abe6b141000a6bb00949169e9">neorv32.h</a></li> +<li>UART0_RX_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a0b738b26abb2b951f1f5c5d9525d7701">neorv32.h</a></li> +<li>UART0_RX_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#ae8588cca20d5e36f74c5207c376389a1">neorv32.h</a></li> +<li>UART0_RX_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a7a849638eff31f2e1955bdc53d4fc84d">neorv32.h</a></li> +<li>UART0_TX_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#aff756a395771f22c5f412f23f177ea7d">neorv32.h</a></li> +<li>UART0_TX_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#addbe29166bb77bc045ad0e3db68e57e9">neorv32.h</a></li> +<li>UART0_TX_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a9dc37695ca169bc0eb93898e7aeeee58">neorv32.h</a></li> +<li>UART0_TX_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab50df423fdba86bb83bc5d90a4c3bb20">neorv32.h</a></li> +<li>UART1_RX_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a6c118c1784d8446360b00cde97437ca7">neorv32.h</a></li> +<li>UART1_RX_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a2e70d3a4e2973d224643813fcf315a20">neorv32.h</a></li> +<li>UART1_RX_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#ab1c351f5ea19ac9ea864155be9cc0b4b">neorv32.h</a></li> +<li>UART1_RX_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#ad0b9eb2ee1f411d7fccdf4fe263214e1">neorv32.h</a></li> +<li>UART1_TX_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a0039bae3454a22e71d64e70d674f5d6a">neorv32.h</a></li> +<li>UART1_TX_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#ac4060532b7aa390623f54720460a2680">neorv32.h</a></li> +<li>UART1_TX_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a6af270d7ae8b1cde30e44eb9142491d3">neorv32.h</a></li> +<li>UART1_TX_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a4cc50287c7a53982761a8116396ff7dd">neorv32.h</a></li> +<li>UART_BAUD&#160;:&#160;<a class="el" href="bootloader_8c.html#a1fac9153314479ad0ad495d752f0224a">bootloader.c</a></li> +<li>UART_EN&#160;:&#160;<a class="el" href="bootloader_8c.html#af1c2f103ac6e3183f08b39099fab2be9">bootloader.c</a></li> +<li>UART_HW_HANDSHAKE_EN&#160;:&#160;<a class="el" href="bootloader_8c.html#a20e93d623ce07939c3fdd53898f9d583">bootloader.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_w.html b/sw/globals_defs_w.html new file mode 100644 index 0000000000..d480832790 --- /dev/null +++ b/sw/globals_defs_w.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_w" name="index_w"></a>- w -</h3><ul> +<li>WDT_PASSWORD&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#af2a2bd9c74bdba1b46bd92025bd00ab6">neorv32_wdt.h</a></li> +<li>WDT_TIMEOUT_S&#160;:&#160;<a class="el" href="demo__wdt_2main_8c.html#a01af3905e60b1869f669315f4a1297f5">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_defs_x.html b/sw/globals_defs_x.html new file mode 100644 index 0000000000..e0ff92db11 --- /dev/null +++ b/sw/globals_defs_x.html @@ -0,0 +1,109 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented macros with links to the documentation:</div> + +<h3><a id="index_x" name="index_x"></a>- x -</h3><ul> +<li>XIP_CLK_PRSC&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#aec72efe062dbdb149ae6d4f8b1be6793">main.c</a></li> +<li>XIP_EN&#160;:&#160;<a class="el" href="bootloader_8c.html#a2cf31934b909299fb93bb5eebdbc7c9e">bootloader.c</a></li> +<li>XIP_MEM_BASE_ADDRESS&#160;:&#160;<a class="el" href="neorv32_8h.html#aa01bea676e878a9e87ca10ce2d91e51f">neorv32.h</a></li> +<li>XIRQ_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#afe0cb262d517c7da73d6b5dc78886334">neorv32.h</a></li> +<li>XIRQ_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a866768963f8648363dce40de9f34d61b">neorv32.h</a></li> +<li>XIRQ_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a95387d3482ec8e5c1d734805fdf64fa5">neorv32.h</a></li> +<li>XIRQ_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a16b9a7444833b5581df073661deb8f3a">neorv32.h</a></li> +<li>xstr&#160;:&#160;<a class="el" href="bootloader_8c.html#aff6b53dd58cea43d24393a9a2f79e772">bootloader.c</a></li> +<li>XTEA_ROUNDS&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a36801eebef583b6c3438709144834e3e">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_e.html b/sw/globals_e.html new file mode 100644 index 0000000000..8accda0943 --- /dev/null +++ b/sw/globals_e.html @@ -0,0 +1,116 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_e" name="index_e"></a>- e -</h3><ul> +<li>ERROR_CHECKSUM&#160;:&#160;<a class="el" href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a471ebe6c0766abc6fa4e82a09bfdb985">bootloader.c</a></li> +<li>ERROR_CODES_enum&#160;:&#160;<a class="el" href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088">bootloader.c</a></li> +<li>ERROR_FLASH&#160;:&#160;<a class="el" href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a684d6723fa25e7651e13d99fb249363c">bootloader.c</a></li> +<li>error_message&#160;:&#160;<a class="el" href="bootloader_8c.html#a6fea855ffe2fa0cd5ea9f98c0d5adc4d">bootloader.c</a></li> +<li>ERROR_SIGNATURE&#160;:&#160;<a class="el" href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088ad41014563cb3ca69ab69b94d43e97caa">bootloader.c</a></li> +<li>ERROR_SIZE&#160;:&#160;<a class="el" href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a2d77ed1c715fb969a1faa01c71625f2d">bootloader.c</a></li> +<li>exe_available&#160;:&#160;<a class="el" href="bootloader_8c.html#a0f9fcfdf758260b9b79b6eda063dd87a">bootloader.c</a></li> +<li>EXE_BASE_ADDR&#160;:&#160;<a class="el" href="bootloader_8c.html#a18936dc79b9e5aa84df016b046a6b977">bootloader.c</a></li> +<li>EXE_OFFSET_CHECKSUM&#160;:&#160;<a class="el" href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febabc27a855096a70dca0f8bc148a123be4">bootloader.c</a></li> +<li>EXE_OFFSET_DATA&#160;:&#160;<a class="el" href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febaea032c54a21057710ef2021638972ce6">bootloader.c</a></li> +<li>EXE_OFFSET_SIGNATURE&#160;:&#160;<a class="el" href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feba61100996f309c45b8b628ade2e3acc7f">bootloader.c</a></li> +<li>EXE_OFFSET_SIZE&#160;:&#160;<a class="el" href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febacc430caa4bff2fef4568c757893fe2fe">bootloader.c</a></li> +<li>EXE_SIGNATURE&#160;:&#160;<a class="el" href="bootloader_8c.html#a0035ad41f622dbfc2412318a8ed39257">bootloader.c</a>, <a class="el" href="demo__xip_2main_8c.html#a0035ad41f622dbfc2412318a8ed39257">main.c</a></li> +<li>EXE_STREAM_FLASH&#160;:&#160;<a class="el" href="bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83a98526cd8f81d570c57d98193b32cf114">bootloader.c</a></li> +<li>EXE_STREAM_SOURCE_enum&#160;:&#160;<a class="el" href="bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83">bootloader.c</a></li> +<li>EXE_STREAM_UART&#160;:&#160;<a class="el" href="bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83ab149261ddf3f08e44e9d2538e384f58f">bootloader.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_enum.html b/sw/globals_enum.html new file mode 100644 index 0000000000..6cb2da4784 --- /dev/null +++ b/sw/globals_enum.html @@ -0,0 +1,168 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enums with links to the documentation:</div> + +<h3><a id="index_c" name="index_c"></a>- c -</h3><ul> +<li>CHANNEL_CFG_enum&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175">neorv32_pwm.h</a></li> +</ul> + + +<h3><a id="index_e" name="index_e"></a>- e -</h3><ul> +<li>ERROR_CODES_enum&#160;:&#160;<a class="el" href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088">bootloader.c</a></li> +<li>EXE_STREAM_SOURCE_enum&#160;:&#160;<a class="el" href="bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83">bootloader.c</a></li> +</ul> + + +<h3><a id="index_n" name="index_n"></a>- n -</h3><ul> +<li>NEORV32_CLOCK_PRSC_enum&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">neorv32.h</a></li> +<li>NEORV32_CRC_MODE_enum&#160;:&#160;<a class="el" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447">neorv32_crc.h</a></li> +<li>NEORV32_CSR_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_FFLAGS_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204b">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_MCOUNTEREN_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_MCOUNTINHIBIT_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfe">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_MIE_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_MIP_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_MISA_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830c">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_MSTATUS_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_XISA_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387">neorv32_cpu_csr.h</a></li> +<li>NEORV32_DMA_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4">neorv32_dma.h</a></li> +<li>NEORV32_DMA_STATUS_enum&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74b">neorv32_dma.h</a></li> +<li>NEORV32_DMA_TTYPE_enum&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9">neorv32_dma.h</a></li> +<li>NEORV32_EXCEPTION_CODES_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">neorv32_cpu_csr.h</a></li> +<li>NEORV32_EXECUTABLE_enum&#160;:&#160;<a class="el" href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feb">bootloader.c</a></li> +<li>NEORV32_GPTMR_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988">neorv32_gptmr.h</a></li> +<li>NEORV32_HPMCNT_EVENT_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfe">neorv32_cpu_csr.h</a></li> +<li>NEORV32_NEOLED_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412">neorv32_neoled.h</a></li> +<li>NEORV32_ONEWIRE_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831">neorv32_onewire.h</a></li> +<li>NEORV32_ONEWIRE_DCMD_enum&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26">neorv32_onewire.h</a></li> +<li>NEORV32_PMP_MODES_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5">neorv32_cpu_csr.h</a></li> +<li>NEORV32_PMPCFG_ATTRIBUTES_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930ea">neorv32_cpu_csr.h</a></li> +<li>NEORV32_RTE_TRAP_enum&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">neorv32_rte.h</a></li> +<li>NEORV32_SDI_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6">neorv32_sdi.h</a></li> +<li>NEORV32_SLINK_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1">neorv32_slink.h</a></li> +<li>NEORV32_SLINK_ROUTE_enum&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45">neorv32_slink.h</a></li> +<li>NEORV32_SLINK_STATUS_enum&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bf">neorv32_slink.h</a></li> +<li>NEORV32_SPI_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3b">neorv32_spi.h</a></li> +<li>NEORV32_SPI_DATA_enum&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8">neorv32_spi.h</a></li> +<li>NEORV32_SYSINFO_CACHE_enum&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1ea">neorv32_sysinfo.h</a></li> +<li>NEORV32_SYSINFO_MEM_enum&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5f">neorv32_sysinfo.h</a></li> +<li>NEORV32_SYSINFO_SOC_enum&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08">neorv32_sysinfo.h</a></li> +<li>NEORV32_TRNG_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1a">neorv32_trng.h</a></li> +<li>NEORV32_TRNG_DATA_enum&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2">neorv32_trng.h</a></li> +<li>NEORV32_TWD_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18">neorv32_twd.h</a></li> +<li>NEORV32_TWD_DATA_enum&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8">neorv32_twd.h</a></li> +<li>NEORV32_TWI_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafa">neorv32_twi.h</a></li> +<li>NEORV32_TWI_DCMD_enum&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8">neorv32_twi.h</a></li> +<li>NEORV32_UART_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afc">neorv32_uart.h</a></li> +<li>NEORV32_UART_DATA_enum&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2">neorv32_uart.h</a></li> +<li>NEORV32_WDT_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23e">neorv32_wdt.h</a></li> +<li>NEORV32_WDT_RCAUSE_enum&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049">neorv32_wdt.h</a></li> +<li>NEORV32_XIP_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceb">neorv32_xip.h</a></li> +</ul> + + +<h3><a id="index_s" name="index_s"></a>- s -</h3><ul> +<li>SPI_FLASH_CMD&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12e">main.c</a></li> +<li>SPI_FLASH_CMD_enum&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fed">bootloader.c</a></li> +<li>SPI_FLASH_SREG&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08e">main.c</a></li> +<li>SPI_FLASH_SREG_enum&#160;:&#160;<a class="el" href="bootloader_8c.html#a97299f563ebc1fca4c663b025a15136f">bootloader.c</a></li> +</ul> + + +<h3><a id="index_x" name="index_x"></a>- x -</h3><ul> +<li>XIRQ_TRIGGER_enum&#160;:&#160;<a class="el" href="neorv32__xirq_8h.html#a19aaba6e0cfedfee3cf96f3ea5323151">neorv32_xirq.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval.html b/sw/globals_eval.html new file mode 100644 index 0000000000..551cf7003f --- /dev/null +++ b/sw/globals_eval.html @@ -0,0 +1,335 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_c" name="index_c"></a>- c -</h3><ul> +<li>CLK_PRSC_1024&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17">neorv32.h</a></li> +<li>CLK_PRSC_128&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e">neorv32.h</a></li> +<li>CLK_PRSC_2&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05">neorv32.h</a></li> +<li>CLK_PRSC_2048&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79">neorv32.h</a></li> +<li>CLK_PRSC_4&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1">neorv32.h</a></li> +<li>CLK_PRSC_4096&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee">neorv32.h</a></li> +<li>CLK_PRSC_64&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da">neorv32.h</a></li> +<li>CLK_PRSC_8&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9">neorv32.h</a></li> +<li>CRC_MODE16&#160;:&#160;<a class="el" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f">neorv32_crc.h</a></li> +<li>CRC_MODE32&#160;:&#160;<a class="el" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa">neorv32_crc.h</a></li> +<li>CRC_MODE8&#160;:&#160;<a class="el" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a">neorv32_crc.h</a></li> +<li>CSR_CFUREG0&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f">neorv32_cpu_csr.h</a></li> +<li>CSR_CFUREG1&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8">neorv32_cpu_csr.h</a></li> +<li>CSR_CFUREG2&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68">neorv32_cpu_csr.h</a></li> +<li>CSR_CFUREG3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf">neorv32_cpu_csr.h</a></li> +<li>CSR_CYCLE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e">neorv32_cpu_csr.h</a></li> +<li>CSR_CYCLEH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db">neorv32_cpu_csr.h</a></li> +<li>CSR_DCSR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9">neorv32_cpu_csr.h</a></li> +<li>CSR_DPC&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b">neorv32_cpu_csr.h</a></li> +<li>CSR_DSCRATCH0&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7">neorv32_cpu_csr.h</a></li> +<li>CSR_FCSR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6">neorv32_cpu_csr.h</a></li> +<li>CSR_FFLAGS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a">neorv32_cpu_csr.h</a></li> +<li>CSR_FFLAGS_DZ&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b">neorv32_cpu_csr.h</a></li> +<li>CSR_FFLAGS_NV&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165">neorv32_cpu_csr.h</a></li> +<li>CSR_FFLAGS_NX&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6">neorv32_cpu_csr.h</a></li> +<li>CSR_FFLAGS_OF&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e">neorv32_cpu_csr.h</a></li> +<li>CSR_FFLAGS_UF&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819">neorv32_cpu_csr.h</a></li> +<li>CSR_FRM&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812">neorv32_cpu_csr.h</a></li> +<li>CSR_INSTRET&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66">neorv32_cpu_csr.h</a></li> +<li>CSR_INSTRETH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153">neorv32_cpu_csr.h</a></li> +<li>CSR_MARCHID&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4">neorv32_cpu_csr.h</a></li> +<li>CSR_MCAUSE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b">neorv32_cpu_csr.h</a></li> +<li>CSR_MCONFIGPTR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTEREN&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTEREN_CY&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a3d0c8ff6ba2c557cb5b5d353bdb95790">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTEREN_IR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a97e36c94b71fa2f9a805bbe47b0bc1b5">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_CY&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM10&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM11&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM12&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM13&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM14&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM15&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM16&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM17&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM18&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM19&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM20&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM21&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM22&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM23&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM24&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM25&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM26&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM27&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM28&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM29&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM30&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM31&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM4&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM5&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM6&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM7&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM8&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_HPM9&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a">neorv32_cpu_csr.h</a></li> +<li>CSR_MCOUNTINHIBIT_IR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa">neorv32_cpu_csr.h</a></li> +<li>CSR_MCYCLE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77">neorv32_cpu_csr.h</a></li> +<li>CSR_MCYCLEH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b">neorv32_cpu_csr.h</a></li> +<li>CSR_MENVCFG&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98">neorv32_cpu_csr.h</a></li> +<li>CSR_MENVCFGH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8">neorv32_cpu_csr.h</a></li> +<li>CSR_MEPC&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153">neorv32_cpu_csr.h</a></li> +<li>CSR_MHARTID&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER10&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER10H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER11&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER11H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER12&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER12H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER13&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER13H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER14&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER14H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER15&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER15H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER3H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER4&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER4H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER5&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER5H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER6&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER6H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER7&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER7H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER8&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER8H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER9&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMCOUNTER9H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT10&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT11&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT12&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT13&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT14&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT15&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT4&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT5&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT6&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT7&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT8&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79">neorv32_cpu_csr.h</a></li> +<li>CSR_MHPMEVENT9&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ0E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ10E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ11E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ12E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ13E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ14E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ15E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ1E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ2E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ3E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ4E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ5E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ6E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ7E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ8E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_FIRQ9E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_MEIE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_MSIE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a">neorv32_cpu_csr.h</a></li> +<li>CSR_MIE_MTIE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083">neorv32_cpu_csr.h</a></li> +<li>CSR_MIMPID&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd">neorv32_cpu_csr.h</a></li> +<li>CSR_MINSTRET&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb">neorv32_cpu_csr.h</a></li> +<li>CSR_MINSTRETH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ0P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ10P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ11P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ12P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ13P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ14P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ15P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ1P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ2P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ3P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ4P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ5P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ6P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ7P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ8P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_FIRQ9P&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_MEIP&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_MSIP&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159">neorv32_cpu_csr.h</a></li> +<li>CSR_MIP_MTIP&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_B&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_C&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_E&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_I&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_M&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_MXL_HI&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_MXL_LO&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_U&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb">neorv32_cpu_csr.h</a></li> +<li>CSR_MISA_X&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193">neorv32_cpu_csr.h</a></li> +<li>CSR_MSCRATCH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS_MIE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS_MPIE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS_MPP_H&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS_MPP_L&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS_MPRV&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUS_TW&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d">neorv32_cpu_csr.h</a></li> +<li>CSR_MSTATUSH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067">neorv32_cpu_csr.h</a></li> +<li>CSR_MTINST&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8">neorv32_cpu_csr.h</a></li> +<li>CSR_MTVAL&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e">neorv32_cpu_csr.h</a></li> +<li>CSR_MTVEC&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21">neorv32_cpu_csr.h</a></li> +<li>CSR_MVENDORID&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_CLKGATE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a35543f2ac5cde6e142bca6791b7b36b1">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_FASTMUL&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_FASTSHIFT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_IS_SIM&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_RFHWRST&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_SDEXT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_SDTRIG&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_SMPMP&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZALRSC&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adf45adc0bcbec0c1ffa944099257a947">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZBA&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adfc9122d93a71bf6df178022a52d22c4">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZBB&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a815cbe0149cba2a69025f6bec9946a85">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZBKB&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adb26c1e5bf6ae112625621dddd331735">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZBKC&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac9e87153c096d656b40cb7abdf3afd55">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZBKX&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a34519a66e749d63dc5bc7c145c297b64">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZBS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a469e8e449f0e442df531c8cf2c4f35c5">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZFINX&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZICNTR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZICOND&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZICSR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZIFENCEI&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZIHPM&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKN&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad7e7454a30c82c3d91acbc8c259e8c25">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKND&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48f1de7f79a0633644ae02c463d49375">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKNE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a216ec44d5be3b158acb7e033e352bad1">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKNH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5fe8e591901e0fd7ba6706c70e9c76ec">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a2649bee3397c74ada7b72677308f38c0">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKSED&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a43213190abb77304a78c15196c90a044">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKSH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5e4bf05830b66410bbf2ef2c68e5fd18">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZKT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a31788af612f04bc6b2a2bd15c1fb63c1">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZMMUL&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f">neorv32_cpu_csr.h</a></li> +<li>CSR_MXISA_ZXCFU&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR0&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR1&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR10&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR11&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR12&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR13&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR14&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR15&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR2&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR4&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR5&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR6&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR7&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR8&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPADDR9&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPCFG0&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPCFG1&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPCFG2&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446">neorv32_cpu_csr.h</a></li> +<li>CSR_PMPCFG3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850">neorv32_cpu_csr.h</a></li> +<li>CSR_TDATA1&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57">neorv32_cpu_csr.h</a></li> +<li>CSR_TDATA2&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc">neorv32_cpu_csr.h</a></li> +<li>CSR_TINFO&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b">neorv32_cpu_csr.h</a></li> +<li>CSR_TSELECT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d">neorv32_cpu_csr.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_d.html b/sw/globals_eval_d.html new file mode 100644 index 0000000000..2e21b19f05 --- /dev/null +++ b/sw/globals_eval_d.html @@ -0,0 +1,121 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_d" name="index_d"></a>- d -</h3><ul> +<li>DMA_CTRL_AUTO&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b">neorv32_dma.h</a></li> +<li>DMA_CTRL_BUSY&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb">neorv32_dma.h</a></li> +<li>DMA_CTRL_DONE&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc">neorv32_dma.h</a></li> +<li>DMA_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838">neorv32_dma.h</a></li> +<li>DMA_CTRL_ERROR_RD&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96">neorv32_dma.h</a></li> +<li>DMA_CTRL_ERROR_WR&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101">neorv32_dma.h</a></li> +<li>DMA_CTRL_FENCE&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00">neorv32_dma.h</a></li> +<li>DMA_CTRL_FIRQ_SEL_LSB&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9">neorv32_dma.h</a></li> +<li>DMA_CTRL_FIRQ_SEL_MSB&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a">neorv32_dma.h</a></li> +<li>DMA_CTRL_FIRQ_TYPE&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe">neorv32_dma.h</a></li> +<li>DMA_STATUS_BUSY&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d">neorv32_dma.h</a></li> +<li>DMA_STATUS_ERR_RD&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492">neorv32_dma.h</a></li> +<li>DMA_STATUS_ERR_WR&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8">neorv32_dma.h</a></li> +<li>DMA_STATUS_IDLE&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f">neorv32_dma.h</a></li> +<li>DMA_TTYPE_DST_INC&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da">neorv32_dma.h</a></li> +<li>DMA_TTYPE_ENDIAN&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802">neorv32_dma.h</a></li> +<li>DMA_TTYPE_NUM_LSB&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450">neorv32_dma.h</a></li> +<li>DMA_TTYPE_NUM_MSB&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd">neorv32_dma.h</a></li> +<li>DMA_TTYPE_QSEL_LSB&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2">neorv32_dma.h</a></li> +<li>DMA_TTYPE_QSEL_MSB&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5">neorv32_dma.h</a></li> +<li>DMA_TTYPE_SRC_INC&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec">neorv32_dma.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_e.html b/sw/globals_eval_e.html new file mode 100644 index 0000000000..b42cb7a048 --- /dev/null +++ b/sw/globals_eval_e.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_e" name="index_e"></a>- e -</h3><ul> +<li>ERROR_CHECKSUM&#160;:&#160;<a class="el" href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a471ebe6c0766abc6fa4e82a09bfdb985">bootloader.c</a></li> +<li>ERROR_FLASH&#160;:&#160;<a class="el" href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a684d6723fa25e7651e13d99fb249363c">bootloader.c</a></li> +<li>ERROR_SIGNATURE&#160;:&#160;<a class="el" href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088ad41014563cb3ca69ab69b94d43e97caa">bootloader.c</a></li> +<li>ERROR_SIZE&#160;:&#160;<a class="el" href="bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a2d77ed1c715fb969a1faa01c71625f2d">bootloader.c</a></li> +<li>EXE_OFFSET_CHECKSUM&#160;:&#160;<a class="el" href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febabc27a855096a70dca0f8bc148a123be4">bootloader.c</a></li> +<li>EXE_OFFSET_DATA&#160;:&#160;<a class="el" href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febaea032c54a21057710ef2021638972ce6">bootloader.c</a></li> +<li>EXE_OFFSET_SIGNATURE&#160;:&#160;<a class="el" href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feba61100996f309c45b8b628ade2e3acc7f">bootloader.c</a></li> +<li>EXE_OFFSET_SIZE&#160;:&#160;<a class="el" href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febacc430caa4bff2fef4568c757893fe2fe">bootloader.c</a></li> +<li>EXE_STREAM_FLASH&#160;:&#160;<a class="el" href="bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83a98526cd8f81d570c57d98193b32cf114">bootloader.c</a></li> +<li>EXE_STREAM_UART&#160;:&#160;<a class="el" href="bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83ab149261ddf3f08e44e9d2538e384f58f">bootloader.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_f.html b/sw/globals_eval_f.html new file mode 100644 index 0000000000..4a78fae639 --- /dev/null +++ b/sw/globals_eval_f.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_f" name="index_f"></a>- f -</h3><ul> +<li>FLASH_SREG_BUSY&#160;:&#160;<a class="el" href="bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa133cd87673ce9a612da494583e03dae9">bootloader.c</a></li> +<li>FLASH_SREG_WEL&#160;:&#160;<a class="el" href="bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa22e8c983d74430ea0930e37781e88bf9">bootloader.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_g.html b/sw/globals_eval_g.html new file mode 100644 index 0000000000..2074a8d933 --- /dev/null +++ b/sw/globals_eval_g.html @@ -0,0 +1,107 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_g" name="index_g"></a>- g -</h3><ul> +<li>GPTMR_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90">neorv32_gptmr.h</a></li> +<li>GPTMR_CTRL_IRQ_CLR&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38">neorv32_gptmr.h</a></li> +<li>GPTMR_CTRL_IRQ_PND&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a">neorv32_gptmr.h</a></li> +<li>GPTMR_CTRL_MODE&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43">neorv32_gptmr.h</a></li> +<li>GPTMR_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3">neorv32_gptmr.h</a></li> +<li>GPTMR_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298">neorv32_gptmr.h</a></li> +<li>GPTMR_CTRL_PRSC2&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833">neorv32_gptmr.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_h.html b/sw/globals_eval_h.html new file mode 100644 index 0000000000..98922ce195 --- /dev/null +++ b/sw/globals_eval_h.html @@ -0,0 +1,112 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_h" name="index_h"></a>- h -</h3><ul> +<li>HPMCNT_EVENT_BRANCH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_BRANCHED&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_COMPR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_CY&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_IR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_LOAD&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_STORE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_TM&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_TRAP&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_WAIT_ALU&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_WAIT_DIS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_WAIT_LSU&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b">neorv32_cpu_csr.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_n.html b/sw/globals_eval_n.html new file mode 100644 index 0000000000..67a673bea5 --- /dev/null +++ b/sw/globals_eval_n.html @@ -0,0 +1,130 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_n" name="index_n"></a>- n -</h3><ul> +<li>NEOLED_CTRL_BUFS_0&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_BUFS_1&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_BUFS_2&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_BUFS_3&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_IRQ_CONF&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_MODE&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_PRSC2&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_STROBE&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ONE_H_0&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ONE_H_1&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ONE_H_2&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ONE_H_3&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ONE_H_4&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_TOT_0&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_TOT_1&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_TOT_2&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_TOT_3&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_TOT_4&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ZERO_H_0&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ZERO_H_1&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ZERO_H_2&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ZERO_H_3&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ZERO_H_4&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_TX_BUSY&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_TX_HALF&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73">neorv32_neoled.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_o.html b/sw/globals_eval_o.html new file mode 100644 index 0000000000..b48aa2ad26 --- /dev/null +++ b/sw/globals_eval_o.html @@ -0,0 +1,117 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_o" name="index_o"></a>- o -</h3><ul> +<li>ONEWIRE_CTRL_BUSY&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_CLEAR&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831adfe5373712e0c02da3aa5dfd8ca5e51e">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_CLKDIV0&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_CLKDIV7&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a3903370331c6ae15cd37381bc64b6016">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a101cd15b58450d9740ab92bb5c40ba63">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a74d1259bee8e3e1d18cc69a2d8ce4749">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_SENSE&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a5db9e3557d447c62039ad3437caa9884">neorv32_onewire.h</a></li> +<li>ONEWIRE_DCMD_CMD_HI&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aeb1f95a9b6f3b4a295578e874a1ad5d0">neorv32_onewire.h</a></li> +<li>ONEWIRE_DCMD_CMD_LO&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26ac095ac82ef2be6e67b5c9f6b9f5c4379">neorv32_onewire.h</a></li> +<li>ONEWIRE_DCMD_DATA_LSB&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a035b3e4021a1959a7cbd8954e838c324">neorv32_onewire.h</a></li> +<li>ONEWIRE_DCMD_DATA_MSB&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a36fe4def67f02a3d06dbe47231d6f21d">neorv32_onewire.h</a></li> +<li>ONEWIRE_DCMD_PRESENCE&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aa4cd11972bbc09f7a7eab8e129b280b4">neorv32_onewire.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_p.html b/sw/globals_eval_p.html new file mode 100644 index 0000000000..22315d7dc8 --- /dev/null +++ b/sw/globals_eval_p.html @@ -0,0 +1,117 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_p" name="index_p"></a>- p -</h3><ul> +<li>PMP_NA4&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892">neorv32_cpu_csr.h</a></li> +<li>PMP_NAPOT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820">neorv32_cpu_csr.h</a></li> +<li>PMP_OFF&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4">neorv32_cpu_csr.h</a></li> +<li>PMP_TOR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1">neorv32_cpu_csr.h</a></li> +<li>PMPCFG_A_LSB&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1">neorv32_cpu_csr.h</a></li> +<li>PMPCFG_A_MSB&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4">neorv32_cpu_csr.h</a></li> +<li>PMPCFG_L&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14">neorv32_cpu_csr.h</a></li> +<li>PMPCFG_R&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6">neorv32_cpu_csr.h</a></li> +<li>PMPCFG_W&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f">neorv32_cpu_csr.h</a></li> +<li>PMPCFG_X&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d">neorv32_cpu_csr.h</a></li> +<li>PWM_CFG_CDIV_LSB&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175acc7e31e4b3f0e7ab0a0306a107109b4f">neorv32_pwm.h</a></li> +<li>PWM_CFG_CDIV_MSB&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a6f741e102b7e15e946714360e81f4bb2">neorv32_pwm.h</a></li> +<li>PWM_CFG_DUTY_LSB&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a9aa8249716b15c92368c93b36bf7db43">neorv32_pwm.h</a></li> +<li>PWM_CFG_DUTY_MSB&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175af5d9dcb5740c39cfe8f9bfb5c1b66341">neorv32_pwm.h</a></li> +<li>PWM_CFG_EN&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a2b766bfa9653705025b745e0809c432a">neorv32_pwm.h</a></li> +<li>PWM_CFG_PRSC_LSB&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aefe2211fe39acffb40ca738639b3d5f5">neorv32_pwm.h</a></li> +<li>PWM_CFG_PRSC_MSB&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aa100b419699cd3c6787a9168a3ffec3d">neorv32_pwm.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_r.html b/sw/globals_eval_r.html new file mode 100644 index 0000000000..774662fd49 --- /dev/null +++ b/sw/globals_eval_r.html @@ -0,0 +1,129 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_r" name="index_r"></a>- r -</h3><ul> +<li>RTE_TRAP_BREAKPOINT&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_0&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_1&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_10&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_11&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_12&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_13&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_14&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_15&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_2&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_3&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_4&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_5&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_6&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_7&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_8&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_9&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76">neorv32_rte.h</a></li> +<li>RTE_TRAP_I_ACCESS&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4">neorv32_rte.h</a></li> +<li>RTE_TRAP_I_ILLEGAL&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2">neorv32_rte.h</a></li> +<li>RTE_TRAP_I_MISALIGNED&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81">neorv32_rte.h</a></li> +<li>RTE_TRAP_L_ACCESS&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab">neorv32_rte.h</a></li> +<li>RTE_TRAP_L_MISALIGNED&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f">neorv32_rte.h</a></li> +<li>RTE_TRAP_MEI&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff">neorv32_rte.h</a></li> +<li>RTE_TRAP_MENV_CALL&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d">neorv32_rte.h</a></li> +<li>RTE_TRAP_MSI&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174">neorv32_rte.h</a></li> +<li>RTE_TRAP_MTI&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff">neorv32_rte.h</a></li> +<li>RTE_TRAP_S_ACCESS&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7">neorv32_rte.h</a></li> +<li>RTE_TRAP_S_MISALIGNED&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232">neorv32_rte.h</a></li> +<li>RTE_TRAP_UENV_CALL&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc">neorv32_rte.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_s.html b/sw/globals_eval_s.html new file mode 100644 index 0000000000..a182fae138 --- /dev/null +++ b/sw/globals_eval_s.html @@ -0,0 +1,230 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_s" name="index_s"></a>- s -</h3><ul> +<li>SDI_CTRL_CS_ACTIVE&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63">neorv32_sdi.h</a></li> +<li>SDI_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809">neorv32_sdi.h</a></li> +<li>SDI_CTRL_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4">neorv32_sdi.h</a></li> +<li>SDI_CTRL_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716">neorv32_sdi.h</a></li> +<li>SDI_CTRL_IRQ_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0">neorv32_sdi.h</a></li> +<li>SDI_CTRL_IRQ_RX_FULL&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d">neorv32_sdi.h</a></li> +<li>SDI_CTRL_IRQ_RX_HALF&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281">neorv32_sdi.h</a></li> +<li>SDI_CTRL_IRQ_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210">neorv32_sdi.h</a></li> +<li>SDI_CTRL_IRQ_TX_NHALF&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed">neorv32_sdi.h</a></li> +<li>SDI_CTRL_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0">neorv32_sdi.h</a></li> +<li>SDI_CTRL_RX_FULL&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a">neorv32_sdi.h</a></li> +<li>SDI_CTRL_RX_HALF&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4">neorv32_sdi.h</a></li> +<li>SDI_CTRL_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8">neorv32_sdi.h</a></li> +<li>SDI_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a">neorv32_sdi.h</a></li> +<li>SDI_CTRL_TX_NHALF&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9">neorv32_sdi.h</a></li> +<li>SLINK_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a">neorv32_slink.h</a></li> +<li>SLINK_CTRL_IRQ_RX_FULL&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309">neorv32_slink.h</a></li> +<li>SLINK_CTRL_IRQ_RX_HALF&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392">neorv32_slink.h</a></li> +<li>SLINK_CTRL_IRQ_RX_NEMPTY&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854">neorv32_slink.h</a></li> +<li>SLINK_CTRL_IRQ_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88">neorv32_slink.h</a></li> +<li>SLINK_CTRL_IRQ_TX_NFULL&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa">neorv32_slink.h</a></li> +<li>SLINK_CTRL_IRQ_TX_NHALF&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_CLR&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_EMPTY&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_FULL&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_HALF&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_LAST&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa">neorv32_slink.h</a></li> +<li>SLINK_CTRL_TX_CLR&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f">neorv32_slink.h</a></li> +<li>SLINK_CTRL_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854">neorv32_slink.h</a></li> +<li>SLINK_CTRL_TX_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d">neorv32_slink.h</a></li> +<li>SLINK_CTRL_TX_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943">neorv32_slink.h</a></li> +<li>SLINK_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee">neorv32_slink.h</a></li> +<li>SLINK_CTRL_TX_HALF&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78">neorv32_slink.h</a></li> +<li>SLINK_FIFO_EMPTY&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c">neorv32_slink.h</a></li> +<li>SLINK_FIFO_FULL&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211">neorv32_slink.h</a></li> +<li>SLINK_FIFO_HALF&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9">neorv32_slink.h</a></li> +<li>SLINK_ROUTE_DST_LSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80">neorv32_slink.h</a></li> +<li>SLINK_ROUTE_DST_MSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1">neorv32_slink.h</a></li> +<li>SLINK_ROUTE_SRC_LSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2">neorv32_slink.h</a></li> +<li>SLINK_ROUTE_SRC_MSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983">neorv32_slink.h</a></li> +<li>SPI_CS_ACTIVE&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580">neorv32_spi.h</a></li> +<li>SPI_CTRL_BUSY&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c">neorv32_spi.h</a></li> +<li>SPI_CTRL_CDIV0&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f">neorv32_spi.h</a></li> +<li>SPI_CTRL_CDIV1&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48">neorv32_spi.h</a></li> +<li>SPI_CTRL_CDIV2&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46">neorv32_spi.h</a></li> +<li>SPI_CTRL_CDIV3&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29">neorv32_spi.h</a></li> +<li>SPI_CTRL_CPHA&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0">neorv32_spi.h</a></li> +<li>SPI_CTRL_CPOL&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315">neorv32_spi.h</a></li> +<li>SPI_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea">neorv32_spi.h</a></li> +<li>SPI_CTRL_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb">neorv32_spi.h</a></li> +<li>SPI_CTRL_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed">neorv32_spi.h</a></li> +<li>SPI_CTRL_HIGHSPEED&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e">neorv32_spi.h</a></li> +<li>SPI_CTRL_IRQ_IDLE&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2">neorv32_spi.h</a></li> +<li>SPI_CTRL_IRQ_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0">neorv32_spi.h</a></li> +<li>SPI_CTRL_IRQ_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622">neorv32_spi.h</a></li> +<li>SPI_CTRL_IRQ_TX_HALF&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b">neorv32_spi.h</a></li> +<li>SPI_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e">neorv32_spi.h</a></li> +<li>SPI_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61">neorv32_spi.h</a></li> +<li>SPI_CTRL_PRSC2&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a">neorv32_spi.h</a></li> +<li>SPI_CTRL_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633">neorv32_spi.h</a></li> +<li>SPI_CTRL_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6">neorv32_spi.h</a></li> +<li>SPI_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905">neorv32_spi.h</a></li> +<li>SPI_CTRL_TX_NHALF&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4">neorv32_spi.h</a></li> +<li>SPI_DATA_CMD&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6">neorv32_spi.h</a></li> +<li>SPI_DATA_CSEN&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2">neorv32_spi.h</a></li> +<li>SPI_DATA_LSB&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4">neorv32_spi.h</a></li> +<li>SPI_DATA_MSB&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600">neorv32_spi.h</a></li> +<li>SPI_FLASH_CMD_PAGE_PROGRAM&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda31c8d698c551d081a0adeafb988ed49e">bootloader.c</a></li> +<li>SPI_FLASH_CMD_READ&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda6c1994ba2cfd97e0c77dcdf8bbdfdfa6">bootloader.c</a>, <a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea6c1994ba2cfd97e0c77dcdf8bbdfdfa6">main.c</a></li> +<li>SPI_FLASH_CMD_READ_STATUS&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda5fbc6551a10549b38e5ab4a76c38f214">bootloader.c</a>, <a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea5fbc6551a10549b38e5ab4a76c38f214">main.c</a></li> +<li>SPI_FLASH_CMD_SECTOR_ERASE&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedacd62141d6331f66e31bd252e2a92b836">bootloader.c</a>, <a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eacd62141d6331f66e31bd252e2a92b836">main.c</a></li> +<li>SPI_FLASH_CMD_WAKE&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda25bf16cd42b1fd1d95e0957b5be137d2">bootloader.c</a></li> +<li>SPI_FLASH_CMD_WRITE&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea528cebc54176f6f4c0a8f7f16fb28ca1">main.c</a></li> +<li>SPI_FLASH_CMD_WRITE_DISABLE&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedaa91d3c1d788b21fc798a5976c9f0da77">bootloader.c</a>, <a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eaa91d3c1d788b21fc798a5976c9f0da77">main.c</a></li> +<li>SPI_FLASH_CMD_WRITE_ENABLE&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda152e091e93778f217f8b766298351513">bootloader.c</a>, <a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea152e091e93778f217f8b766298351513">main.c</a></li> +<li>SPI_FLASH_SREG_WEL&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08ea90f3b76faed13819ee13e574d1bff0c1">main.c</a></li> +<li>SPI_FLASH_SREG_WIP&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08eac84de63bbea3989c71bcc92d1d01cfa4">main.c</a></li> +<li>SYSINFO_CACHE_DATA_BLOCK_SIZE_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa8a2c7079b44f4255196de49d6d59afdb">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_DATA_BLOCK_SIZE_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaaec544d85ce3296ca9e97e833e20936e">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_DATA_NUM_BLOCKS_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabb743d3ca41bf44aa6ff188ec898cfb8">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_DATA_NUM_BLOCKS_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa5778928b290b3b1cba42412de4dabf96">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_INST_BLOCK_SIZE_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa1bdccae04b3bd84988297c16ffbefaf2">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_INST_BLOCK_SIZE_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf4a91f729e16adc72c2419d9ad3807e5">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_INST_NUM_BLOCKS_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabd13283ebd48dee48aee2cff3a560fe9">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_INST_NUM_BLOCKS_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa02f235d7d2fc30c4ae3a383a631d9060">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XBUS_BLOCK_SIZE_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa3f6e68cdf6bb641902a9a6d32c1f9d9e">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XBUS_BLOCK_SIZE_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa908c60a836b03129098cb70fe2a860a1">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XBUS_NUM_BLOCKS_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa73553a14d3425498be9d3802ca5f1459">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XBUS_NUM_BLOCKS_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaade7f119164ff2c3800b4464a65ca247b">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XIP_BLOCK_SIZE_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaea0a88adaa9d0b5e1f4e5cca630ed6f8">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XIP_BLOCK_SIZE_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa44d4d12c0395e924b8bf7dc40059bfba">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XIP_NUM_BLOCKS_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa90ae265a72ea53d99b474798e721c317">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XIP_NUM_BLOCKS_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf88eacb3ed63d5a048a554927812460b">neorv32_sysinfo.h</a></li> +<li>SYSINFO_MEM_BOOT&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa0f4e1e1c9320949bdacd2bc7ba6179f7">neorv32_sysinfo.h</a></li> +<li>SYSINFO_MEM_DMEM&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa8a46c064e5a1339978a5fb1f41301894">neorv32_sysinfo.h</a></li> +<li>SYSINFO_MEM_IMEM&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa807d9e70e78e2ba3d5bfb902cc1cdc53">neorv32_sysinfo.h</a></li> +<li>SYSINFO_MEM_res&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa1671eeca5b3a6d1c8069658e0b7bc182">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_BOOTLOADER&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a6899a935ae8c4aef08d828f250342e9a">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_DCACHE&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a9823c2c0945997ed0d7e5eb473d81e41">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_ICACHE&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a124c4c2b101008b0e3f1d82efec11c26">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IMEM_ROM&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aaeafc2591f2cc95e9ff1fdee1e1c26e8">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_CFS&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ae725c2452eeb33e3230dcfb3450598e6">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_CLINT&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08adc914c065f5b51ae0881a6b62b54a3db">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_CRC&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ab89821e2c61ccb9db6324ee503f9dfa6">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_DMA&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a24658727efef9747414b5da8f26de66d">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_GPIO&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a62a2337b33a2f65b6efd5c91e699c2d1">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_GPTMR&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4aea6c006f9c999720b1dd6166a01afe">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_NEOLED&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a164c5c9dc702b4b5fc71110fc047c7f1">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_ONEWIRE&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aa8ec3b39b36f13ee4f97a72700e881a8">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_PWM&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a8dc202143c3b13850bccf16380466399">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_SDI&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a84088f6664a3dc19041dfad5b551ced9">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_SLINK&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a26b25f1b47f62e98ff0920544f56b57e">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_SPI&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4cf4b1a83a4b52efbf26eace21f5ab20">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_TRNG&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a44892276837b2b1bbe6ef9faa715ad5d">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_TWD&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3bbac94e7f1f021f14cefa929b79e9d9">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_TWI&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a179401244ac42bc4aac3108ca9bbb9c3">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_UART0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a244710794e00c93e91a7f13d533cb139">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_UART1&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a52b0ca1ef2af5e9c9a0250440b2de9e5">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_WDT&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08afc964f39427cbc4090a960967eada7be">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_XIRQ&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ad1b8d38e3715485242756cd37b7c1fe9">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_MEM_INT_DMEM&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a58ff6e112c09f798be014fdf84385135">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_MEM_INT_IMEM&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a1c2fbb0cc03a1df2e5e8a472f3f1ca57">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_OCD&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3e50b1c24eec0f1811d5630e6dd33e93">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_OCD_AUTH&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a161826adba27e19186c5005626c160b8">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_XBUS&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08add6721803c9d79f1e50248927ba30e16">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_XBUS_CACHE&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a579f26ab04d4fd9af8e419df465695ca">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_XIP&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a516a2e254ae63e017caefbeed20f54e9">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_XIP_CACHE&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ac943fc33a2c1c25c3ab075228b87c0ef">neorv32_sysinfo.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_t.html b/sw/globals_eval_t.html new file mode 100644 index 0000000000..4445f61ff9 --- /dev/null +++ b/sw/globals_eval_t.html @@ -0,0 +1,178 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_t" name="index_t"></a>- t -</h3><ul> +<li>TRAP_CODE_BREAKPOINT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_0&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_1&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_10&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_11&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_12&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_13&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_14&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_15&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_2&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_4&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_5&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_6&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_7&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_8&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_9&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_I_ACCESS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_I_ILLEGAL&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_I_MISALIGNED&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_L_ACCESS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_L_MISALIGNED&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_MEI&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_MENV_CALL&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_MSI&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_MTI&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_S_ACCESS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_S_MISALIGNED&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_UENV_CALL&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02">neorv32_cpu_csr.h</a></li> +<li>TRNG_CTRL_AVAIL&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aac0a6c8451985a61dc522509ded22695f">neorv32_trng.h</a></li> +<li>TRNG_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d">neorv32_trng.h</a></li> +<li>TRNG_CTRL_FIFO_CLR&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac">neorv32_trng.h</a></li> +<li>TRNG_CTRL_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52">neorv32_trng.h</a></li> +<li>TRNG_CTRL_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5">neorv32_trng.h</a></li> +<li>TRNG_CTRL_SIM_MODE&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5">neorv32_trng.h</a></li> +<li>TRNG_DATA_LSB&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac2a7a79da7010342366ea97a2af2ebe6">neorv32_trng.h</a></li> +<li>TRNG_DATA_MSB&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac73221cb67facda1db8fc9591e2f6364">neorv32_trng.h</a></li> +<li>TWD_CTRL_BUSY&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a71eb18275ffd7138251049c39294f4f3">neorv32_twd.h</a></li> +<li>TWD_CTRL_CLR_RX&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a1a951d8cf167b79bffdd8f19033ba657">neorv32_twd.h</a></li> +<li>TWD_CTRL_CLR_TX&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ab2d8eef73a9cc3de9bf99c5bf9c7114b">neorv32_twd.h</a></li> +<li>TWD_CTRL_DEV_ADDR0&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a3cc82a5ab8ad0ac4cff85b40d2ed6ffe">neorv32_twd.h</a></li> +<li>TWD_CTRL_DEV_ADDR6&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18abea8949a5164bd28f1504a34dadb17c2">neorv32_twd.h</a></li> +<li>TWD_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aded9f8ad7a2e0217e73d8484246157b2">neorv32_twd.h</a></li> +<li>TWD_CTRL_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a943bbe073ea36da264cb16f5a9f2acc9">neorv32_twd.h</a></li> +<li>TWD_CTRL_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af121649145e5403bf44246d416c26530">neorv32_twd.h</a></li> +<li>TWD_CTRL_FSEL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aef0fcc46f5595fa73fe547f0737f85e6">neorv32_twd.h</a></li> +<li>TWD_CTRL_IRQ_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad59552e7f3c7c747307f71e78ac1c00b">neorv32_twd.h</a></li> +<li>TWD_CTRL_IRQ_RX_FULL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af6d6b5bda034fc7af54036c95b94c01a">neorv32_twd.h</a></li> +<li>TWD_CTRL_IRQ_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a73bfda5ccd72ba0c8deed6d848013757">neorv32_twd.h</a></li> +<li>TWD_CTRL_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aaf31cc771b97f6b1f4d2da2347f43878">neorv32_twd.h</a></li> +<li>TWD_CTRL_RX_FULL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad1360350bafec23f10e28ffddefa625a">neorv32_twd.h</a></li> +<li>TWD_CTRL_SENSE_SCL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a8816adbecd0c929c88134e9e41efcf5c">neorv32_twd.h</a></li> +<li>TWD_CTRL_SENSE_SDA&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18acc0cdd72b63e7a029e97ae942754958c">neorv32_twd.h</a></li> +<li>TWD_CTRL_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a428ca1617d4bc287fbf03bfc74d12dfd">neorv32_twd.h</a></li> +<li>TWD_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a243f36178c91f94ccc848399a3b715b5">neorv32_twd.h</a></li> +<li>TWD_DATA_LSB&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a5f5e055b2d8ea968da1670251b70f824">neorv32_twd.h</a></li> +<li>TWD_DATA_MSB&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a8f40d28bfc00d40ba03560bf44d47829">neorv32_twd.h</a></li> +<li>TWI_CTRL_BUSY&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d">neorv32_twi.h</a></li> +<li>TWI_CTRL_CDIV0&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31">neorv32_twi.h</a></li> +<li>TWI_CTRL_CDIV1&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674">neorv32_twi.h</a></li> +<li>TWI_CTRL_CDIV2&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12">neorv32_twi.h</a></li> +<li>TWI_CTRL_CDIV3&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc">neorv32_twi.h</a></li> +<li>TWI_CTRL_CLKSTR&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48">neorv32_twi.h</a></li> +<li>TWI_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694">neorv32_twi.h</a></li> +<li>TWI_CTRL_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb">neorv32_twi.h</a></li> +<li>TWI_CTRL_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75">neorv32_twi.h</a></li> +<li>TWI_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9">neorv32_twi.h</a></li> +<li>TWI_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df">neorv32_twi.h</a></li> +<li>TWI_CTRL_PRSC2&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31">neorv32_twi.h</a></li> +<li>TWI_CTRL_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671">neorv32_twi.h</a></li> +<li>TWI_CTRL_SENSE_SCL&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa51ea52c7ad18f1a8bcb6c2a979802107">neorv32_twi.h</a></li> +<li>TWI_CTRL_SENSE_SDA&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaf715b63c5c3edbd1e61766df53c2dd6c">neorv32_twi.h</a></li> +<li>TWI_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb">neorv32_twi.h</a></li> +<li>TWI_DCMD_ACK&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5">neorv32_twi.h</a></li> +<li>TWI_DCMD_CMD_HI&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e">neorv32_twi.h</a></li> +<li>TWI_DCMD_CMD_LO&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e">neorv32_twi.h</a></li> +<li>TWI_DCMD_LSB&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56">neorv32_twi.h</a></li> +<li>TWI_DCMD_MSB&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d">neorv32_twi.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_u.html b/sw/globals_eval_u.html new file mode 100644 index 0000000000..be55e68679 --- /dev/null +++ b/sw/globals_eval_u.html @@ -0,0 +1,137 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_u" name="index_u"></a>- u -</h3><ul> +<li>UART_CTRL_BAUD0&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD1&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD2&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD3&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD4&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD5&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD6&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD7&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD8&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD9&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e">neorv32_uart.h</a></li> +<li>UART_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2">neorv32_uart.h</a></li> +<li>UART_CTRL_HWFC_EN&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c">neorv32_uart.h</a></li> +<li>UART_CTRL_IRQ_RX_FULL&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a">neorv32_uart.h</a></li> +<li>UART_CTRL_IRQ_RX_HALF&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175">neorv32_uart.h</a></li> +<li>UART_CTRL_IRQ_RX_NEMPTY&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851">neorv32_uart.h</a></li> +<li>UART_CTRL_IRQ_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c">neorv32_uart.h</a></li> +<li>UART_CTRL_IRQ_TX_NHALF&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1">neorv32_uart.h</a></li> +<li>UART_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183">neorv32_uart.h</a></li> +<li>UART_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2">neorv32_uart.h</a></li> +<li>UART_CTRL_PRSC2&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70">neorv32_uart.h</a></li> +<li>UART_CTRL_RX_CLR&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33">neorv32_uart.h</a></li> +<li>UART_CTRL_RX_FULL&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166">neorv32_uart.h</a></li> +<li>UART_CTRL_RX_HALF&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247">neorv32_uart.h</a></li> +<li>UART_CTRL_RX_NEMPTY&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff">neorv32_uart.h</a></li> +<li>UART_CTRL_RX_OVER&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632">neorv32_uart.h</a></li> +<li>UART_CTRL_SIM_MODE&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1">neorv32_uart.h</a></li> +<li>UART_CTRL_TX_BUSY&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25">neorv32_uart.h</a></li> +<li>UART_CTRL_TX_CLR&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431">neorv32_uart.h</a></li> +<li>UART_CTRL_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46">neorv32_uart.h</a></li> +<li>UART_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411">neorv32_uart.h</a></li> +<li>UART_CTRL_TX_NHALF&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9">neorv32_uart.h</a></li> +<li>UART_DATA_RTX_LSB&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195">neorv32_uart.h</a></li> +<li>UART_DATA_RTX_MSB&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb">neorv32_uart.h</a></li> +<li>UART_DATA_RX_FIFO_SIZE_LSB&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef">neorv32_uart.h</a></li> +<li>UART_DATA_RX_FIFO_SIZE_MSB&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225">neorv32_uart.h</a></li> +<li>UART_DATA_TX_FIFO_SIZE_LSB&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e">neorv32_uart.h</a></li> +<li>UART_DATA_TX_FIFO_SIZE_MSB&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529">neorv32_uart.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_w.html b/sw/globals_eval_w.html new file mode 100644 index 0000000000..a28317f8e5 --- /dev/null +++ b/sw/globals_eval_w.html @@ -0,0 +1,113 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_w" name="index_w"></a>- w -</h3><ul> +<li>WDT_CTRL_DBEN&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9">neorv32_wdt.h</a></li> +<li>WDT_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f">neorv32_wdt.h</a></li> +<li>WDT_CTRL_LOCK&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3">neorv32_wdt.h</a></li> +<li>WDT_CTRL_RCAUSE_HI&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd">neorv32_wdt.h</a></li> +<li>WDT_CTRL_RCAUSE_LO&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779">neorv32_wdt.h</a></li> +<li>WDT_CTRL_SEN&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148">neorv32_wdt.h</a></li> +<li>WDT_CTRL_STRICT&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac">neorv32_wdt.h</a></li> +<li>WDT_CTRL_TIMEOUT_LSB&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609">neorv32_wdt.h</a></li> +<li>WDT_CTRL_TIMEOUT_MSB&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7">neorv32_wdt.h</a></li> +<li>WDT_RCAUSE_ACC&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a10999a782ffc2c26f601615f76121376">neorv32_wdt.h</a></li> +<li>WDT_RCAUSE_EXT&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0">neorv32_wdt.h</a></li> +<li>WDT_RCAUSE_OCD&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e">neorv32_wdt.h</a></li> +<li>WDT_RCAUSE_TMO&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a7273d24bb65d3f40c1d289ce5cbc1a40">neorv32_wdt.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_eval_x.html b/sw/globals_eval_x.html new file mode 100644 index 0000000000..5212f6be36 --- /dev/null +++ b/sw/globals_eval_x.html @@ -0,0 +1,122 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented enum values with links to the documentation:</div> + +<h3><a id="index_x" name="index_x"></a>- x -</h3><ul> +<li>XIP_CTRL_BURST_EN&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c">neorv32_xip.h</a></li> +<li>XIP_CTRL_CDIV0&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3">neorv32_xip.h</a></li> +<li>XIP_CTRL_CDIV1&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073">neorv32_xip.h</a></li> +<li>XIP_CTRL_CDIV2&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445">neorv32_xip.h</a></li> +<li>XIP_CTRL_CDIV3&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef">neorv32_xip.h</a></li> +<li>XIP_CTRL_CPHA&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d">neorv32_xip.h</a></li> +<li>XIP_CTRL_CPOL&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f">neorv32_xip.h</a></li> +<li>XIP_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045">neorv32_xip.h</a></li> +<li>XIP_CTRL_HIGHSPEED&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781">neorv32_xip.h</a></li> +<li>XIP_CTRL_PHY_BUSY&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5">neorv32_xip.h</a></li> +<li>XIP_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d">neorv32_xip.h</a></li> +<li>XIP_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af">neorv32_xip.h</a></li> +<li>XIP_CTRL_PRSC2&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086">neorv32_xip.h</a></li> +<li>XIP_CTRL_RD_CMD_LSB&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b">neorv32_xip.h</a></li> +<li>XIP_CTRL_RD_CMD_MSB&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7">neorv32_xip.h</a></li> +<li>XIP_CTRL_SPI_CSEN&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080">neorv32_xip.h</a></li> +<li>XIP_CTRL_SPI_NBYTES_LSB&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a">neorv32_xip.h</a></li> +<li>XIP_CTRL_SPI_NBYTES_MSB&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c">neorv32_xip.h</a></li> +<li>XIP_CTRL_XIP_ABYTES_LSB&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df">neorv32_xip.h</a></li> +<li>XIP_CTRL_XIP_ABYTES_MSB&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc">neorv32_xip.h</a></li> +<li>XIP_CTRL_XIP_BUSY&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a">neorv32_xip.h</a></li> +<li>XIP_CTRL_XIP_EN&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937">neorv32_xip.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_f.html b/sw/globals_f.html new file mode 100644 index 0000000000..09656db5d8 --- /dev/null +++ b/sw/globals_f.html @@ -0,0 +1,104 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_f" name="index_f"></a>- f -</h3><ul> +<li>FLASH_ABYTES&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#af9b3c37c806499fc435302f5bce6a122">main.c</a></li> +<li>FLASH_BASE&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a23a9099a5f8fc9c6e253c0eecb2be8db">main.c</a></li> +<li>FLASH_SREG_BUSY&#160;:&#160;<a class="el" href="bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa133cd87673ce9a612da494583e03dae9">bootloader.c</a></li> +<li>FLASH_SREG_WEL&#160;:&#160;<a class="el" href="bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa22e8c983d74430ea0930e37781e88bf9">bootloader.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func.html b/sw/globals_func.html new file mode 100644 index 0000000000..b6669ab9cf --- /dev/null +++ b/sw/globals_func.html @@ -0,0 +1,103 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index__5F" name="index__5F"></a>- _ -</h3><ul> +<li>__neorv32_rte_print_hex_word()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a01bf6c01f5a8cda2132b9ac98824edc1">neorv32_rte.c</a></li> +<li>__neorv32_xirq_core()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a14661d628dd31e6bfce89376c6614627">neorv32_xirq.c</a></li> +<li>__neorv32_xirq_dummy_handler()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#ae4d9362b23a1341c595a4cd239a87091">neorv32_xirq.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_a.html b/sw/globals_func_a.html new file mode 100644 index 0000000000..6bec563e51 --- /dev/null +++ b/sw/globals_func_a.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_a" name="index_a"></a>- a -</h3><ul> +<li>adaptive_proportion_test()&#160;:&#160;<a class="el" href="demo__trng_2main_8c.html#a23a91e6fe2cc44f3c29baf0d331e05db">main.c</a></li> +<li>aux_print_hex_byte()&#160;:&#160;<a class="el" href="bus__explorer_2main_8c.html#ac582208281cd6fce4eb61c234f312ef6">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_b.html b/sw/globals_func_b.html new file mode 100644 index 0000000000..0725b3caa9 --- /dev/null +++ b/sw/globals_func_b.html @@ -0,0 +1,101 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_b" name="index_b"></a>- b -</h3><ul> +<li>bootloader_trap_handler()&#160;:&#160;<a class="el" href="bootloader_8c.html#af13b4b3d5e6597feacf331e6d16b08e9">bootloader.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_c.html b/sw/globals_func_c.html new file mode 100644 index 0000000000..bd1ee8d6f1 --- /dev/null +++ b/sw/globals_func_c.html @@ -0,0 +1,103 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_c" name="index_c"></a>- c -</h3><ul> +<li>check_result()&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#a4f4c6d8481b4100f90955ba5a70428a4">main.c</a></li> +<li>clear_universe()&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a819f10c5b644a07eeb069b6e7f12050e">main.c</a></li> +<li>compute_rate()&#160;:&#160;<a class="el" href="demo__trng_2main_8c.html#abbde1237eed617466fb971a78c3acd1e">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_d.html b/sw/globals_func_d.html new file mode 100644 index 0000000000..066ea24082 --- /dev/null +++ b/sw/globals_func_d.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_d" name="index_d"></a>- d -</h3><ul> +<li>dma_firq_handler()&#160;:&#160;<a class="el" href="demo__dma_2main_8c.html#aefcc5abb86a652587ff69be120a66487">main.c</a></li> +<li>dump_memory()&#160;:&#160;<a class="el" href="bus__explorer_2main_8c.html#a6405739c6012158151eb082c31c312da">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_g.html b/sw/globals_func_g.html new file mode 100644 index 0000000000..ac0b744414 --- /dev/null +++ b/sw/globals_func_g.html @@ -0,0 +1,108 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_g" name="index_g"></a>- g -</h3><ul> +<li>generate_histogram()&#160;:&#160;<a class="el" href="demo__trng_2main_8c.html#a4e49f5e3feb4bd5755f919cd3310b506">main.c</a></li> +<li>get_cell()&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a6bd541a19c62ea9ec620eaad3f218d16">main.c</a></li> +<li>get_exe()&#160;:&#160;<a class="el" href="bootloader_8c.html#ac18819795adb6dbdd52b0587e7fbb569">bootloader.c</a></li> +<li>get_exe_word()&#160;:&#160;<a class="el" href="bootloader_8c.html#ac58d9f7dc79a549bde1cb50f619c19af">bootloader.c</a></li> +<li>get_neighborhood()&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a977190adaa24a3f49fca1540b51d25a0">main.c</a></li> +<li>get_test_vector()&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a73c70bd0fb6d695cb113eaeb50923e3e">main.c</a></li> +<li>global_trap_handler()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a9a64ce0ee69c4c32cecc8b2b2746604c">main.c</a></li> +<li>gptmr_firq_handler()&#160;:&#160;<a class="el" href="demo__gptmr_2main_8c.html#a2bd89412466a65329711bfd5c29199c9">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_h.html b/sw/globals_func_h.html new file mode 100644 index 0000000000..31db95f6e7 --- /dev/null +++ b/sw/globals_func_h.html @@ -0,0 +1,103 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_h" name="index_h"></a>- h -</h3><ul> +<li>hexdump()&#160;:&#160;<a class="el" href="bus__explorer_2main_8c.html#a02640a99db37b8d92b9edffc9720a210">main.c</a></li> +<li>hsv2rgb()&#160;:&#160;<a class="el" href="demo__neopixel_2main_8c.html#a2736ec755f9e10c80bf66f727f870ffc">main.c</a></li> +<li>hw_breakpoint_handler()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a31d9e432f6a368e6222f5e0907eeb6f4">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_m.html b/sw/globals_func_m.html new file mode 100644 index 0000000000..b7bef9087f --- /dev/null +++ b/sw/globals_func_m.html @@ -0,0 +1,104 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_m" name="index_m"></a>- m -</h3><ul> +<li>main()&#160;:&#160;<a class="el" href="bootloader_8c.html#a840291bc02cba5474a4cb46a9b9566fe">bootloader.c</a>, <a class="el" href="atomic__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main.c</a></li> +<li>main_destructor_test()&#160;:&#160;<a class="el" href="demo__newlib_2main_8c.html#a7076a1dfd3c18c91fcf665ce54b087b3">main.c</a></li> +<li>msi_irq_handler()&#160;:&#160;<a class="el" href="demo__clint_2main_8c.html#a8e5e335f226a7dac74e2f117f07bebf6">main.c</a></li> +<li>mti_irq_handler()&#160;:&#160;<a class="el" href="demo__clint_2main_8c.html#a56e848c71747fc350f1697e84797871f">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_n.html b/sw/globals_func_n.html new file mode 100644 index 0000000000..5d1a196ecd --- /dev/null +++ b/sw/globals_func_n.html @@ -0,0 +1,352 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_n" name="index_n"></a>- n -</h3><ul> +<li>neorv32_aux_date2unixtime()&#160;:&#160;<a class="el" href="neorv32__aux_8c.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c">neorv32_aux.c</a>, <a class="el" href="neorv32__aux_8h.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c">neorv32_aux.h</a></li> +<li>neorv32_aux_hexstr2uint64()&#160;:&#160;<a class="el" href="neorv32__aux_8c.html#a05a5482da3b72a5bdf2181e754143d79">neorv32_aux.c</a>, <a class="el" href="neorv32__aux_8h.html#a05a5482da3b72a5bdf2181e754143d79">neorv32_aux.h</a></li> +<li>neorv32_aux_itoa()&#160;:&#160;<a class="el" href="neorv32__aux_8c.html#af72230251bc58d3142353849f63d5667">neorv32_aux.c</a>, <a class="el" href="neorv32__aux_8h.html#af72230251bc58d3142353849f63d5667">neorv32_aux.h</a></li> +<li>neorv32_aux_unixtime2date()&#160;:&#160;<a class="el" href="neorv32__aux_8c.html#a885a81838a91b57797e849cb835c6887">neorv32_aux.c</a>, <a class="el" href="neorv32__aux_8h.html#a885a81838a91b57797e849cb835c6887">neorv32_aux.h</a></li> +<li>neorv32_aux_xorshift32()&#160;:&#160;<a class="el" href="neorv32__aux_8c.html#aff31dd983f75f70eeae331c65acaa50e">neorv32_aux.c</a>, <a class="el" href="neorv32__aux_8h.html#aff31dd983f75f70eeae331c65acaa50e">neorv32_aux.h</a></li> +<li>neorv32_cfs_available()&#160;:&#160;<a class="el" href="neorv32__cfs_8c.html#abac96dfaefe433eca1c0b93fa6183d2e">neorv32_cfs.c</a>, <a class="el" href="neorv32__cfs_8h.html#abac96dfaefe433eca1c0b93fa6183d2e">neorv32_cfs.h</a></li> +<li>neorv32_clint_available()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#a197e7946193987bf04a08aa0563462bf">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#a197e7946193987bf04a08aa0563462bf">neorv32_clint.h</a></li> +<li>neorv32_clint_msi_clr()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#a6655e1e21cc94cda4e5c21544a72c758">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#a6655e1e21cc94cda4e5c21544a72c758">neorv32_clint.h</a></li> +<li>neorv32_clint_msi_set()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#a4478c86505e3a22b774208006060b8a4">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#a4478c86505e3a22b774208006060b8a4">neorv32_clint.h</a></li> +<li>neorv32_clint_mtimecmp_get()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#a1d6526b096fbf99fdde2632bff7ce8df">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#a1d6526b096fbf99fdde2632bff7ce8df">neorv32_clint.h</a></li> +<li>neorv32_clint_mtimecmp_set()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#af1e2ff4ce5f3a20b07eeaac50685110a">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#af1e2ff4ce5f3a20b07eeaac50685110a">neorv32_clint.h</a></li> +<li>neorv32_clint_time_get()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#a94364eb5e89145b5e2b61ac6d3eeccd4">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#a94364eb5e89145b5e2b61ac6d3eeccd4">neorv32_clint.h</a></li> +<li>neorv32_clint_time_set()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#af8e6985da6cd629a0572edd8c70cd888">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#af8e6985da6cd629a0572edd8c70cd888">neorv32_clint.h</a></li> +<li>neorv32_clint_unixtime_get()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#a89aa592a96260e68f99df71a194facaa">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#a89aa592a96260e68f99df71a194facaa">neorv32_clint.h</a></li> +<li>neorv32_clint_unixtime_set()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#abe9bcd07591e9c2d3e27435809bf4bdd">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#abe9bcd07591e9c2d3e27435809bf4bdd">neorv32_clint.h</a></li> +<li>neorv32_cpu_amoaddw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#ada27ec89b2530f7b7f14de947cc82bf9">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#ada27ec89b2530f7b7f14de947cc82bf9">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amoandw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#a9b4540dadbfd5da907117570d8006e36">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#a9b4540dadbfd5da907117570d8006e36">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amolr()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8h.html#ad4437bbc61a4e40d7d01dfe9459f6639">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amomaxuw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#a31a6a3b5a33655f4a7b27d4c85b75f07">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#a31a6a3b5a33655f4a7b27d4c85b75f07">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amomaxw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#a62cf36637d7a04079228acecfe8a5cf3">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#a62cf36637d7a04079228acecfe8a5cf3">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amominuw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#a1281e18b95cd525073e1123c5d04e9e2">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#a1281e18b95cd525073e1123c5d04e9e2">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amominw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#a8e383fb8825538b5579d5ce075830697">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#a8e383fb8825538b5579d5ce075830697">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amoorw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#adc80b1f2b3a4e70fee44c0edb08fc402">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#adc80b1f2b3a4e70fee44c0edb08fc402">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amosc()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8h.html#a5e73eaa273c41a06972e862976fda53c">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amoswapw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#aad0d96e61bacc3af13ff471dd44ca8e9">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#aad0d96e61bacc3af13ff471dd44ca8e9">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amoxorw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#a65b67f48356fa9b30596485473311377">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#a65b67f48356fa9b30596485473311377">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_cfu_available()&#160;:&#160;<a class="el" href="neorv32__cpu__cfu_8c.html#a13019b8afa1a80c0e5c24eb4d72e75c1">neorv32_cpu_cfu.c</a>, <a class="el" href="neorv32__cpu__cfu_8h.html#a13019b8afa1a80c0e5c24eb4d72e75c1">neorv32_cpu_cfu.h</a></li> +<li>neorv32_cpu_csr_clr()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#ab8f533ddbc3a3af5e3bca2287ac10122">neorv32_cpu.h</a></li> +<li>neorv32_cpu_csr_read()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#aab7a9f9cf608599f2b124dd499cb8418">neorv32_cpu.h</a></li> +<li>neorv32_cpu_csr_set()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a25a09de97229aac839ef6f74da604acf">neorv32_cpu.h</a></li> +<li>neorv32_cpu_csr_write()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#afb5ef6e0b1a3e26570edfd8379490455">neorv32_cpu.h</a></li> +<li>neorv32_cpu_delay_ms()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#aa9027535b13d9f9325e734997fc4a137">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#aa9027535b13d9f9325e734997fc4a137">neorv32_cpu.h</a></li> +<li>neorv32_cpu_get_clk_from_prsc()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#a8346fb926f84f3d7bccbb4741105505f">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#a8346fb926f84f3d7bccbb4741105505f">neorv32_cpu.h</a></li> +<li>neorv32_cpu_get_cycle()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#ac3fd7dc7cd1e0a08225c41820af27f92">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#ac3fd7dc7cd1e0a08225c41820af27f92">neorv32_cpu.h</a></li> +<li>neorv32_cpu_get_instret()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#a387aa304770b05594c4acca128a60a75">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#a387aa304770b05594c4acca128a60a75">neorv32_cpu.h</a></li> +<li>neorv32_cpu_goto_user_mode()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#aca49efb45d3808ad76cf65ba291f546d">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#aca49efb45d3808ad76cf65ba291f546d">neorv32_cpu.h</a></li> +<li>neorv32_cpu_hpm_get_num_counters()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#a70f49b80322aa457f29f7671f94a183d">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#a70f49b80322aa457f29f7671f94a183d">neorv32_cpu.h</a></li> +<li>neorv32_cpu_hpm_get_size()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#adb3ae542bbb0ddf9f562a4e42bc24d10">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#adb3ae542bbb0ddf9f562a4e42bc24d10">neorv32_cpu.h</a></li> +<li>neorv32_cpu_load_signed_byte()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a31f903596ab1bcddea79fdf608eaa666">neorv32_cpu.h</a></li> +<li>neorv32_cpu_load_signed_half()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#ae9c8b6c681536ddea3aff0e63f30ef70">neorv32_cpu.h</a></li> +<li>neorv32_cpu_load_unsigned_byte()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#ac54ec9b59e17c7cd9b9907abee82ce95">neorv32_cpu.h</a></li> +<li>neorv32_cpu_load_unsigned_half()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a32544cd652debb4affb308806a115d5b">neorv32_cpu.h</a></li> +<li>neorv32_cpu_load_unsigned_word()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a3b6cf445e2136486564ef3d3473c91dd">neorv32_cpu.h</a></li> +<li>neorv32_cpu_pmp_configure_region()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#aa458a700619b2f7666cfcffe02ec2e2c">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#aa458a700619b2f7666cfcffe02ec2e2c">neorv32_cpu.h</a></li> +<li>neorv32_cpu_pmp_get_granularity()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#ad4f8160f4821b6691e9682ef60c7cd7b">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#ad4f8160f4821b6691e9682ef60c7cd7b">neorv32_cpu.h</a></li> +<li>neorv32_cpu_pmp_get_num_regions()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#a27dd614bc270dfa30ed73323ebda2d2d">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#a27dd614bc270dfa30ed73323ebda2d2d">neorv32_cpu.h</a></li> +<li>neorv32_cpu_set_mcycle()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#a232d0290c459dc790d989fcdc4d121bf">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#a232d0290c459dc790d989fcdc4d121bf">neorv32_cpu.h</a></li> +<li>neorv32_cpu_set_minstret()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#a5c3cf52498abb3cf3c14a724b287ecf0">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#a5c3cf52498abb3cf3c14a724b287ecf0">neorv32_cpu.h</a></li> +<li>neorv32_cpu_sleep()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a769ca4556213619f6fea4ff6bfb979dd">neorv32_cpu.h</a></li> +<li>neorv32_cpu_store_unsigned_byte()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#aeec8ad2a82885c40a307346f9003483e">neorv32_cpu.h</a></li> +<li>neorv32_cpu_store_unsigned_half()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a31f30f6d6542758cd3073a9939b07653">neorv32_cpu.h</a></li> +<li>neorv32_cpu_store_unsigned_word()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a173bb06b4ae9c8964469068dafcb7b0e">neorv32_cpu.h</a></li> +<li>neorv32_crc_available()&#160;:&#160;<a class="el" href="neorv32__crc_8c.html#aa46c647317752f8bb6d5836d4876a704">neorv32_crc.c</a>, <a class="el" href="neorv32__crc_8h.html#aa46c647317752f8bb6d5836d4876a704">neorv32_crc.h</a></li> +<li>neorv32_crc_block()&#160;:&#160;<a class="el" href="neorv32__crc_8c.html#a9243006e6cc94c03450646d26a7289b2">neorv32_crc.c</a>, <a class="el" href="neorv32__crc_8h.html#a9243006e6cc94c03450646d26a7289b2">neorv32_crc.h</a></li> +<li>neorv32_crc_get()&#160;:&#160;<a class="el" href="neorv32__crc_8c.html#a444b88f1536f65acc301fb19eddcf227">neorv32_crc.c</a>, <a class="el" href="neorv32__crc_8h.html#a444b88f1536f65acc301fb19eddcf227">neorv32_crc.h</a></li> +<li>neorv32_crc_setup()&#160;:&#160;<a class="el" href="neorv32__crc_8c.html#a4ff5f7b91e9f668535ed33b6382ae623">neorv32_crc.c</a>, <a class="el" href="neorv32__crc_8h.html#a4ff5f7b91e9f668535ed33b6382ae623">neorv32_crc.h</a></li> +<li>neorv32_crc_single()&#160;:&#160;<a class="el" href="neorv32__crc_8c.html#ad9d50c76a485160667d486bce32cbeb8">neorv32_crc.c</a>, <a class="el" href="neorv32__crc_8h.html#ad9d50c76a485160667d486bce32cbeb8">neorv32_crc.h</a></li> +<li>neorv32_dma_available()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a13260c3252f0375d8982590d270d7dfd">neorv32_dma.h</a></li> +<li>neorv32_dma_disable()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6df244028455cf7f8d4cf1520c4670a7">neorv32_dma.h</a></li> +<li>neorv32_dma_done()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#afc8cc32f7d80d0f5ab33b2f1ecf77956">neorv32_dma.h</a></li> +<li>neorv32_dma_enable()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#ac3b72447e8a132faf26577ac714b8284">neorv32_dma.h</a></li> +<li>neorv32_dma_fence_disable()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a8f37adfa07050b0a1cb8430c9ce1fcc2">neorv32_dma.h</a></li> +<li>neorv32_dma_fence_enable()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a2c7257567ccdb7a986f5ef7c74d3917c">neorv32_dma.h</a></li> +<li>neorv32_dma_status()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#aa116f9714174abbe8a3583e441fee24b">neorv32_dma.h</a></li> +<li>neorv32_dma_transfer()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a2ce0d31e04604b2523135d52a877febf">neorv32_dma.h</a></li> +<li>neorv32_dma_transfer_auto()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6ebd1595ee6fa0e6cbfbd1ce7476f18e">neorv32_dma.h</a></li> +<li>neorv32_gpio_available()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#a41d39a41ba5879eb85d3ed4481fcff81">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#a41d39a41ba5879eb85d3ed4481fcff81">neorv32_gpio.h</a></li> +<li>neorv32_gpio_pin_get()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#afa3ee54aca47ff35f706b627ac66e95a">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#afa3ee54aca47ff35f706b627ac66e95a">neorv32_gpio.h</a></li> +<li>neorv32_gpio_pin_set()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#a60fd0830d634f0c1f784d815384665cb">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#a60fd0830d634f0c1f784d815384665cb">neorv32_gpio.h</a></li> +<li>neorv32_gpio_pin_toggle()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#a1958850fc1689eae9ddfcaa4a7513400">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#a1958850fc1689eae9ddfcaa4a7513400">neorv32_gpio.h</a></li> +<li>neorv32_gpio_port_get()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#ac42379f2fb5ca0bb63850d7957852b84">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#ac42379f2fb5ca0bb63850d7957852b84">neorv32_gpio.h</a></li> +<li>neorv32_gpio_port_set()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#a8dc7846945e4609fc96d81caee99ac00">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#a789222709485cd8467aad5eddf69d2df">neorv32_gpio.h</a></li> +<li>neorv32_gpio_port_toggle()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#a210529f789779387d3f014e6253e803f">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#a210529f789779387d3f014e6253e803f">neorv32_gpio.h</a></li> +<li>neorv32_gptmr_available()&#160;:&#160;<a class="el" href="neorv32__gptmr_8c.html#ae79a08c52ad3e83f9c4393acfabf035f">neorv32_gptmr.c</a>, <a class="el" href="neorv32__gptmr_8h.html#ae79a08c52ad3e83f9c4393acfabf035f">neorv32_gptmr.h</a></li> +<li>neorv32_gptmr_disable()&#160;:&#160;<a class="el" href="neorv32__gptmr_8c.html#a7c9bc6d28ad12611b08fa2867c2db874">neorv32_gptmr.c</a>, <a class="el" href="neorv32__gptmr_8h.html#a7c9bc6d28ad12611b08fa2867c2db874">neorv32_gptmr.h</a></li> +<li>neorv32_gptmr_enable()&#160;:&#160;<a class="el" href="neorv32__gptmr_8c.html#a59e684348835772a7e83446e478d4a13">neorv32_gptmr.c</a>, <a class="el" href="neorv32__gptmr_8h.html#a59e684348835772a7e83446e478d4a13">neorv32_gptmr.h</a></li> +<li>neorv32_gptmr_irq_ack()&#160;:&#160;<a class="el" href="neorv32__gptmr_8c.html#ac73aa4e41a064abb4ca554a389888e67">neorv32_gptmr.c</a>, <a class="el" href="neorv32__gptmr_8h.html#ac73aa4e41a064abb4ca554a389888e67">neorv32_gptmr.h</a></li> +<li>neorv32_gptmr_setup()&#160;:&#160;<a class="el" href="neorv32__gptmr_8c.html#a6aa27efd2163eebf8fc49fe1c591708f">neorv32_gptmr.c</a>, <a class="el" href="neorv32__gptmr_8h.html#a6aa27efd2163eebf8fc49fe1c591708f">neorv32_gptmr.h</a></li> +<li>neorv32_neoled_available()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a57398d92fb4fc735b33e89271726e1d6">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a57398d92fb4fc735b33e89271726e1d6">neorv32_neoled.h</a></li> +<li>neorv32_neoled_disable()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a8daaa97a85e0eb94d4a38eb2119ea183">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a8daaa97a85e0eb94d4a38eb2119ea183">neorv32_neoled.h</a></li> +<li>neorv32_neoled_enable()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a8181d5c1d15b7b5eecdc018341ac14fa">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a8181d5c1d15b7b5eecdc018341ac14fa">neorv32_neoled.h</a></li> +<li>neorv32_neoled_get_buffer_size()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a81c2c49198531fb6551eb288e29c084e">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a81c2c49198531fb6551eb288e29c084e">neorv32_neoled.h</a></li> +<li>neorv32_neoled_set_mode()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a484fcc6797b6d9cef86192e9593ec33d">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a484fcc6797b6d9cef86192e9593ec33d">neorv32_neoled.h</a></li> +<li>neorv32_neoled_setup()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#ac6e94602453779a2791bd0734465f5a3">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#ac6e94602453779a2791bd0734465f5a3">neorv32_neoled.h</a></li> +<li>neorv32_neoled_setup_ws2812()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#adade69c7368c28180b9992d5f0ab6031">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#adade69c7368c28180b9992d5f0ab6031">neorv32_neoled.h</a></li> +<li>neorv32_neoled_strobe_blocking()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a5aa9eb4dd3655fa08e1b61eb0f36589c">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a5aa9eb4dd3655fa08e1b61eb0f36589c">neorv32_neoled.h</a></li> +<li>neorv32_neoled_strobe_nonblocking()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#abf7882b949373df0774fc9cc20c2bd2e">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#abf7882b949373df0774fc9cc20c2bd2e">neorv32_neoled.h</a></li> +<li>neorv32_neoled_write_blocking()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a3ee5b3602da3ae982628e2802587e451">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a3ee5b3602da3ae982628e2802587e451">neorv32_neoled.h</a></li> +<li>neorv32_neoled_write_nonblocking()&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ad2a318bd59be12de34797ced0f7743c6">neorv32_neoled.h</a></li> +<li>neorv32_onewire_available()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a865e5c381fd3c27c6981a589a5124d1e">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a865e5c381fd3c27c6981a589a5124d1e">neorv32_onewire.h</a></li> +<li>neorv32_onewire_busy()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a01b6236b89c045ddbd58398361c6ee0a">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a01b6236b89c045ddbd58398361c6ee0a">neorv32_onewire.h</a></li> +<li>neorv32_onewire_disable()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a7e329eeb1cd98301a53b271a6a102385">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a7e329eeb1cd98301a53b271a6a102385">neorv32_onewire.h</a></li> +<li>neorv32_onewire_enable()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#ae6fe766e7decf18869cfb86bba741ca4">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#ae6fe766e7decf18869cfb86bba741ca4">neorv32_onewire.h</a></li> +<li>neorv32_onewire_flush()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a05e220711255e82460bc92010199eb53">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a05e220711255e82460bc92010199eb53">neorv32_onewire.h</a></li> +<li>neorv32_onewire_get_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a32128bfcea4d8c8e31b0b59498e59798">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a32128bfcea4d8c8e31b0b59498e59798">neorv32_onewire.h</a></li> +<li>neorv32_onewire_read_bit()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#aace8398062b759256a516e6245aced83">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#aace8398062b759256a516e6245aced83">neorv32_onewire.h</a></li> +<li>neorv32_onewire_read_bit_blocking()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#ace8b7cf697b068b6b51676d84dec5960">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#ace8b7cf697b068b6b51676d84dec5960">neorv32_onewire.h</a></li> +<li>neorv32_onewire_read_bit_get()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#aa4a19d2d8dc3b3401307615aec201190">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#aa4a19d2d8dc3b3401307615aec201190">neorv32_onewire.h</a></li> +<li>neorv32_onewire_read_byte()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a01ddba7a9148be542b5c52e39e6f46d6">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a01ddba7a9148be542b5c52e39e6f46d6">neorv32_onewire.h</a></li> +<li>neorv32_onewire_read_byte_blocking()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a7510e65a26aeefb40e994fd00667537e">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a7510e65a26aeefb40e994fd00667537e">neorv32_onewire.h</a></li> +<li>neorv32_onewire_read_byte_get()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a4c7eec15c095c97c939163f631f51dab">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a4c7eec15c095c97c939163f631f51dab">neorv32_onewire.h</a></li> +<li>neorv32_onewire_reset()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a3072f7167831edc95dee44ecfef6a0d4">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a3072f7167831edc95dee44ecfef6a0d4">neorv32_onewire.h</a></li> +<li>neorv32_onewire_reset_blocking()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#af8ca6be495176797b7da3857e2f794f9">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#af8ca6be495176797b7da3857e2f794f9">neorv32_onewire.h</a></li> +<li>neorv32_onewire_reset_get_presence()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a43eb8a08eeaa83e3d7e9aa5058a4269f">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a43eb8a08eeaa83e3d7e9aa5058a4269f">neorv32_onewire.h</a></li> +<li>neorv32_onewire_sense()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a122531c7154126858c46d89e003d838d">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a122531c7154126858c46d89e003d838d">neorv32_onewire.h</a></li> +<li>neorv32_onewire_setup()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a224005037387484dfa510a1355a62828">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a224005037387484dfa510a1355a62828">neorv32_onewire.h</a></li> +<li>neorv32_onewire_write_bit()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a49d0a2a386f129fd2f4fed880bba31d4">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a49d0a2a386f129fd2f4fed880bba31d4">neorv32_onewire.h</a></li> +<li>neorv32_onewire_write_bit_blocking()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a6f7b6690a2437e0b574a8a9a23dc0eaa">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a6f7b6690a2437e0b574a8a9a23dc0eaa">neorv32_onewire.h</a></li> +<li>neorv32_onewire_write_byte()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a23b96b68c3214b188525eb102cafb620">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a23b96b68c3214b188525eb102cafb620">neorv32_onewire.h</a></li> +<li>neorv32_onewire_write_byte_blocking()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#ac78557c77482b59394677f42fda4fdf1">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#ac78557c77482b59394677f42fda4fdf1">neorv32_onewire.h</a></li> +<li>neorv32_pmw_get_num_channels()&#160;:&#160;<a class="el" href="neorv32__pwm_8c.html#a43d8a47dc79ebac24c8a7d2d8247d2a5">neorv32_pwm.c</a>, <a class="el" href="neorv32__pwm_8h.html#a43d8a47dc79ebac24c8a7d2d8247d2a5">neorv32_pwm.h</a></li> +<li>neorv32_pwm_available()&#160;:&#160;<a class="el" href="neorv32__pwm_8c.html#afb12c860b2f7fa6cd1e069ea540da41c">neorv32_pwm.c</a>, <a class="el" href="neorv32__pwm_8h.html#afb12c860b2f7fa6cd1e069ea540da41c">neorv32_pwm.h</a></li> +<li>neorv32_pwm_ch_disable()&#160;:&#160;<a class="el" href="neorv32__pwm_8c.html#a7bc39afa807b7c2e06d6fd8b4dc7506c">neorv32_pwm.c</a>, <a class="el" href="neorv32__pwm_8h.html#a7bc39afa807b7c2e06d6fd8b4dc7506c">neorv32_pwm.h</a></li> +<li>neorv32_pwm_ch_enable()&#160;:&#160;<a class="el" href="neorv32__pwm_8c.html#af00e67388ef9186e051e518883ad9a40">neorv32_pwm.c</a>, <a class="el" href="neorv32__pwm_8h.html#af00e67388ef9186e051e518883ad9a40">neorv32_pwm.h</a></li> +<li>neorv32_pwm_ch_set_clock()&#160;:&#160;<a class="el" href="neorv32__pwm_8c.html#a784672443179a7c1e604f23854e001f4">neorv32_pwm.c</a>, <a class="el" href="neorv32__pwm_8h.html#a784672443179a7c1e604f23854e001f4">neorv32_pwm.h</a></li> +<li>neorv32_pwm_ch_set_duty()&#160;:&#160;<a class="el" href="neorv32__pwm_8c.html#a518bad33405039fadd668d16276acb14">neorv32_pwm.c</a>, <a class="el" href="neorv32__pwm_8h.html#a518bad33405039fadd668d16276acb14">neorv32_pwm.h</a></li> +<li>neorv32_rte_context_get()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a65e71acc8916b42b59dc2cf6bba30ba3">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a65e71acc8916b42b59dc2cf6bba30ba3">neorv32_rte.h</a></li> +<li>neorv32_rte_context_put()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#ae13a9c1fd59ad71afb0d47cf9a0b303e">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#ae13a9c1fd59ad71afb0d47cf9a0b303e">neorv32_rte.h</a></li> +<li>neorv32_rte_core()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#ad6ab21f2218a3e88e0cc50d0643dafad">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#ad6ab21f2218a3e88e0cc50d0643dafad">neorv32_rte.h</a></li> +<li>neorv32_rte_debug_handler()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a65422bb44f1e7bc011e9bfc5d8451ebe">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a65422bb44f1e7bc011e9bfc5d8451ebe">neorv32_rte.h</a></li> +<li>neorv32_rte_handler_install()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a2cf31cfa569a03a20d554b6400c4c5e2">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a2cf31cfa569a03a20d554b6400c4c5e2">neorv32_rte.h</a></li> +<li>neorv32_rte_handler_uninstall()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a10fde6229bf391e46148405616404a65">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a10fde6229bf391e46148405616404a65">neorv32_rte.h</a></li> +<li>neorv32_rte_print_about()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#aa442c0e39f9156a131c3432fda587692">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#aa442c0e39f9156a131c3432fda587692">neorv32_rte.h</a></li> +<li>neorv32_rte_print_hw_config()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a05e8304963e402d228a76aff1868771c">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a05e8304963e402d228a76aff1868771c">neorv32_rte.h</a></li> +<li>neorv32_rte_print_hw_version()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#aad6f5256a265807c4cde163bcba8dae9">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#aad6f5256a265807c4cde163bcba8dae9">neorv32_rte.h</a></li> +<li>neorv32_rte_print_license()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#acd96aa73eebe6d4bbc9aabe1230cbabc">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#acd96aa73eebe6d4bbc9aabe1230cbabc">neorv32_rte.h</a></li> +<li>neorv32_rte_print_logo()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a16df1b48f2e1258a51d3bb7f49531cf3">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a16df1b48f2e1258a51d3bb7f49531cf3">neorv32_rte.h</a></li> +<li>neorv32_rte_setup()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a343e1913bdc37db9b168fb4def0e6170">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a343e1913bdc37db9b168fb4def0e6170">neorv32_rte.h</a></li> +<li>neorv32_sdi_available()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a51412722efdb18cd09667622b215e825">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a51412722efdb18cd09667622b215e825">neorv32_sdi.h</a></li> +<li>neorv32_sdi_check_cs()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a2636cf1959ce1f3eb4b77c00ca2e2707">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a2636cf1959ce1f3eb4b77c00ca2e2707">neorv32_sdi.h</a></li> +<li>neorv32_sdi_disable()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a8bd54bca8aea6147651c8115ee616f54">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a8bd54bca8aea6147651c8115ee616f54">neorv32_sdi.h</a></li> +<li>neorv32_sdi_enable()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a5d68b9b1642baf3519076e55a22a8f61">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a5d68b9b1642baf3519076e55a22a8f61">neorv32_sdi.h</a></li> +<li>neorv32_sdi_get()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a4d54ce22ec97eb83da118439576e3277">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a4d54ce22ec97eb83da118439576e3277">neorv32_sdi.h</a></li> +<li>neorv32_sdi_get_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a7390faeb01b4de3dd5ac18335736b90c">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a7390faeb01b4de3dd5ac18335736b90c">neorv32_sdi.h</a></li> +<li>neorv32_sdi_put()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#ac7a262d16c42bbac27723ff779545569">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#ac7a262d16c42bbac27723ff779545569">neorv32_sdi.h</a></li> +<li>neorv32_sdi_setup()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a3246118dc0d7e1f61bc2485bbab44149">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a3246118dc0d7e1f61bc2485bbab44149">neorv32_sdi.h</a></li> +<li>neorv32_slink_available()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#aaf0f7bc96b797e819ccaae94292d9ddb">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#aaf0f7bc96b797e819ccaae94292d9ddb">neorv32_slink.h</a></li> +<li>neorv32_slink_check_last()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#a3e02c558548c1c6178c49adee9a007f7">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#a3e02c558548c1c6178c49adee9a007f7">neorv32_slink.h</a></li> +<li>neorv32_slink_get()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#ace319592c12dc6a0fe1b7dd66bdf9284">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#ace319592c12dc6a0fe1b7dd66bdf9284">neorv32_slink.h</a></li> +<li>neorv32_slink_get_rx_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#a575c7663ca0bd07c95b1d45152a3ddf8">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#a575c7663ca0bd07c95b1d45152a3ddf8">neorv32_slink.h</a></li> +<li>neorv32_slink_get_src()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#a1a9269f42552a849450aecd99f7ec7a0">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#a1a9269f42552a849450aecd99f7ec7a0">neorv32_slink.h</a></li> +<li>neorv32_slink_get_tx_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#aaf0d0d1b890353d4f3bf49450ec2fad2">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#aaf0d0d1b890353d4f3bf49450ec2fad2">neorv32_slink.h</a></li> +<li>neorv32_slink_put()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#aaa9fdb9cbfa7888e92790ab65431d21d">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#aaa9fdb9cbfa7888e92790ab65431d21d">neorv32_slink.h</a></li> +<li>neorv32_slink_put_last()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#a2136bc0b12ee2e6703e84a6417a1e8eb">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#a2136bc0b12ee2e6703e84a6417a1e8eb">neorv32_slink.h</a></li> +<li>neorv32_slink_rx_clear()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#ad149fea81e6d28f77450b8ba50cf706e">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#ad149fea81e6d28f77450b8ba50cf706e">neorv32_slink.h</a></li> +<li>neorv32_slink_rx_status()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#ad57fc0941fe32e8bf423ce3e57e2c10a">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#ad57fc0941fe32e8bf423ce3e57e2c10a">neorv32_slink.h</a></li> +<li>neorv32_slink_set_dst()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc">neorv32_slink.h</a></li> +<li>neorv32_slink_setup()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#a8f0b4a768f53a72a5c16034e160ce321">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#a8f0b4a768f53a72a5c16034e160ce321">neorv32_slink.h</a></li> +<li>neorv32_slink_tx_clear()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#ac7484e9e3848f94efe016dd064f6a57f">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#ac7484e9e3848f94efe016dd064f6a57f">neorv32_slink.h</a></li> +<li>neorv32_slink_tx_status()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#ad0252e7ae915e5840cd17e8c52e94a1c">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#ad0252e7ae915e5840cd17e8c52e94a1c">neorv32_slink.h</a></li> +<li>neorv32_spi_available()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a7266ee439d0ec11c5cedd4bf1a258272">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a7266ee439d0ec11c5cedd4bf1a258272">neorv32_spi.h</a></li> +<li>neorv32_spi_busy()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a332c7a1be511812ac0a2b102c165398a">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a332c7a1be511812ac0a2b102c165398a">neorv32_spi.h</a></li> +<li>neorv32_spi_check_cs()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a82bb4d4c222b2bdc57e917c348481501">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a82bb4d4c222b2bdc57e917c348481501">neorv32_spi.h</a></li> +<li>neorv32_spi_cs_dis()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#aa10ec90ccba6325eeeebb8f6f298d30c">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#aa10ec90ccba6325eeeebb8f6f298d30c">neorv32_spi.h</a></li> +<li>neorv32_spi_cs_dis_nonblocking()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#ad8dd1b5a85a9daef4c8c21c9990884c1">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#ad8dd1b5a85a9daef4c8c21c9990884c1">neorv32_spi.h</a></li> +<li>neorv32_spi_cs_en()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a737961d040ac09567350f89034f9e122">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a737961d040ac09567350f89034f9e122">neorv32_spi.h</a></li> +<li>neorv32_spi_cs_en_nonblocking()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a97b5536347a27b053f071ba49071ba6f">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a97b5536347a27b053f071ba49071ba6f">neorv32_spi.h</a></li> +<li>neorv32_spi_disable()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a817dd9a38bfceb2048e40874a83ba169">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a817dd9a38bfceb2048e40874a83ba169">neorv32_spi.h</a></li> +<li>neorv32_spi_enable()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a8fa25d144ccb20a2faf0450c8dddd16e">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a8fa25d144ccb20a2faf0450c8dddd16e">neorv32_spi.h</a></li> +<li>neorv32_spi_get_clock_speed()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a01c6b63d7349447e2277f2649c3c89f2">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a01c6b63d7349447e2277f2649c3c89f2">neorv32_spi.h</a></li> +<li>neorv32_spi_get_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#ae1c4da7e4dc2e42b04d7187f684f142c">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#ae1c4da7e4dc2e42b04d7187f684f142c">neorv32_spi.h</a></li> +<li>neorv32_spi_get_nonblocking()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#aad66fa8f8d1a92d4f355de7579bfbfd2">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#aad66fa8f8d1a92d4f355de7579bfbfd2">neorv32_spi.h</a></li> +<li>neorv32_spi_highspeed_disable()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a67e9717635e272bc0e04408135a2f04d">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a67e9717635e272bc0e04408135a2f04d">neorv32_spi.h</a></li> +<li>neorv32_spi_highspeed_enable()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#acf131faa3ad970c19a3cd8a47cb54f65">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#acf131faa3ad970c19a3cd8a47cb54f65">neorv32_spi.h</a></li> +<li>neorv32_spi_init()&#160;:&#160;<a class="el" href="neorv32__spi__irq_8c.html#a4aa4746fd210ecc0c3614089a6951ddf">neorv32_spi_irq.c</a>, <a class="el" href="neorv32__spi__irq_8h.html#a4aa4746fd210ecc0c3614089a6951ddf">neorv32_spi_irq.h</a></li> +<li>neorv32_spi_isr()&#160;:&#160;<a class="el" href="neorv32__spi__irq_8c.html#aa641816bb302df497664aa21ea69ed16">neorv32_spi_irq.c</a>, <a class="el" href="neorv32__spi__irq_8h.html#aa641816bb302df497664aa21ea69ed16">neorv32_spi_irq.h</a></li> +<li>neorv32_spi_put_nonblocking()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#aec8583e988789e846d21c2a35e6b06e7">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#aec8583e988789e846d21c2a35e6b06e7">neorv32_spi.h</a></li> +<li>neorv32_spi_rw()&#160;:&#160;<a class="el" href="neorv32__spi__irq_8c.html#a1f44ed849415d8e1d659c0485762c485">neorv32_spi_irq.c</a>, <a class="el" href="neorv32__spi__irq_8h.html#a1f44ed849415d8e1d659c0485762c485">neorv32_spi_irq.h</a></li> +<li>neorv32_spi_rw_busy()&#160;:&#160;<a class="el" href="neorv32__spi__irq_8c.html#a1863e19932bc6a79f2ca27d23eb74ef5">neorv32_spi_irq.c</a>, <a class="el" href="neorv32__spi__irq_8h.html#a1863e19932bc6a79f2ca27d23eb74ef5">neorv32_spi_irq.h</a></li> +<li>neorv32_spi_setup()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a7d8124d986b69210081df6f1aa653552">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a7d8124d986b69210081df6f1aa653552">neorv32_spi.h</a></li> +<li>neorv32_spi_trans()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a7af79950eefc26e67a89bde02f255532">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a7af79950eefc26e67a89bde02f255532">neorv32_spi.h</a></li> +<li>neorv32_sysinfo_get_clk()&#160;:&#160;<a class="el" href="neorv32__sysinfo_8c.html#a098105f8a133087f286c7010c5dec8dd">neorv32_sysinfo.c</a>, <a class="el" href="neorv32__sysinfo_8h.html#a098105f8a133087f286c7010c5dec8dd">neorv32_sysinfo.h</a></li> +<li>neorv32_sysinfo_set_clk()&#160;:&#160;<a class="el" href="neorv32__sysinfo_8c.html#a9b1ca94e298533641547ee448e1c52b3">neorv32_sysinfo.c</a>, <a class="el" href="neorv32__sysinfo_8h.html#a9b1ca94e298533641547ee448e1c52b3">neorv32_sysinfo.h</a></li> +<li>neorv32_trng_available()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#af0c4139ff68763623b3d658a8dd8b5ce">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#af0c4139ff68763623b3d658a8dd8b5ce">neorv32_trng.h</a></li> +<li>neorv32_trng_check_sim_mode()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#aba36f08dd88f2f3e58353ae72eaa14f7">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#aba36f08dd88f2f3e58353ae72eaa14f7">neorv32_trng.h</a></li> +<li>neorv32_trng_disable()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#ae838bc980e28c300dc2c9c3f34a46bb8">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#ae838bc980e28c300dc2c9c3f34a46bb8">neorv32_trng.h</a></li> +<li>neorv32_trng_enable()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#af64df166369d79bf744de06c8a962304">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#af64df166369d79bf744de06c8a962304">neorv32_trng.h</a></li> +<li>neorv32_trng_fifo_clear()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#a87cfe338e2ff559f96c73f729465f967">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#a87cfe338e2ff559f96c73f729465f967">neorv32_trng.h</a></li> +<li>neorv32_trng_get()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#a9148bcb6a7c448c364e78fa98aac6985">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#a9148bcb6a7c448c364e78fa98aac6985">neorv32_trng.h</a></li> +<li>neorv32_trng_get_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#ad24e44372f4fd1ed29a6967dccab4fb0">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#ad24e44372f4fd1ed29a6967dccab4fb0">neorv32_trng.h</a></li> +<li>neorv32_twd_available()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#ae6392461557d300b3b9c1f8e63a7dcc7">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#ae6392461557d300b3b9c1f8e63a7dcc7">neorv32_twd.h</a></li> +<li>neorv32_twd_busy()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a90e8f83ff4f6f05a5aef0046e82dc908">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a90e8f83ff4f6f05a5aef0046e82dc908">neorv32_twd.h</a></li> +<li>neorv32_twd_clear_rx()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#ab12e92dfbe37710c12b44fed97c01c06">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#ab12e92dfbe37710c12b44fed97c01c06">neorv32_twd.h</a></li> +<li>neorv32_twd_clear_tx()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a38f7c54e2b356851f3b18011796f3902">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a38f7c54e2b356851f3b18011796f3902">neorv32_twd.h</a></li> +<li>neorv32_twd_disable()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#af82c89d23e3fc3fbd61c750ecb25d0dc">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#af82c89d23e3fc3fbd61c750ecb25d0dc">neorv32_twd.h</a></li> +<li>neorv32_twd_enable()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a7fa01904130031ab2dee77b4058061c7">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a7fa01904130031ab2dee77b4058061c7">neorv32_twd.h</a></li> +<li>neorv32_twd_get()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a6382d25525ff9bb88e6df0802f0037e2">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a6382d25525ff9bb88e6df0802f0037e2">neorv32_twd.h</a></li> +<li>neorv32_twd_get_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a4fe22b79183dc7d07a1b84a70328a00b">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a4fe22b79183dc7d07a1b84a70328a00b">neorv32_twd.h</a></li> +<li>neorv32_twd_put()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a0cbf868493aa8931e5c5bc71e5b478a4">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a0cbf868493aa8931e5c5bc71e5b478a4">neorv32_twd.h</a></li> +<li>neorv32_twd_rx_available()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#af2b925dffe4e4d0f8412052b92281066">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#af2b925dffe4e4d0f8412052b92281066">neorv32_twd.h</a></li> +<li>neorv32_twd_rx_full()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a138bd6bdefed2a24b746ddb550a02407">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a138bd6bdefed2a24b746ddb550a02407">neorv32_twd.h</a></li> +<li>neorv32_twd_sense_scl()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a4d167a59c4297e0e93af5a74091bd752">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a4d167a59c4297e0e93af5a74091bd752">neorv32_twd.h</a></li> +<li>neorv32_twd_sense_sda()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a6b728dd7e359c1f3ae170a4dae054a31">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a6b728dd7e359c1f3ae170a4dae054a31">neorv32_twd.h</a></li> +<li>neorv32_twd_setup()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#ace89f57655c6aacf6e05a5b6a29a1616">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#ace89f57655c6aacf6e05a5b6a29a1616">neorv32_twd.h</a></li> +<li>neorv32_twd_tx_empty()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#ae106ee8a74649853eab1b2a07c2c0ede">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#ae106ee8a74649853eab1b2a07c2c0ede">neorv32_twd.h</a></li> +<li>neorv32_twd_tx_full()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#ac06102b8e4f692415ec91d37253a3118">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#ac06102b8e4f692415ec91d37253a3118">neorv32_twd.h</a></li> +<li>neorv32_twi_available()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#aa2e01ebbc0c82d65ed4ded351f4d8711">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#aa2e01ebbc0c82d65ed4ded351f4d8711">neorv32_twi.h</a></li> +<li>neorv32_twi_busy()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a4fff1ddade320f6cc568c6266f2c2acd">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a4fff1ddade320f6cc568c6266f2c2acd">neorv32_twi.h</a></li> +<li>neorv32_twi_disable()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#ae5f31e737c7a6c3c86070ff34cb0d861">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#ae5f31e737c7a6c3c86070ff34cb0d861">neorv32_twi.h</a></li> +<li>neorv32_twi_enable()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a22717887cffff1e6830756bc73140e7b">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a22717887cffff1e6830756bc73140e7b">neorv32_twi.h</a></li> +<li>neorv32_twi_generate_start()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a633d460e4735eb369d74a834b03c8b78">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a633d460e4735eb369d74a834b03c8b78">neorv32_twi.h</a></li> +<li>neorv32_twi_generate_start_nonblocking()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#adbf2eaed0c76221da5c3091665fc885e">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#adbf2eaed0c76221da5c3091665fc885e">neorv32_twi.h</a></li> +<li>neorv32_twi_generate_stop()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#ad352447adcccccabd4e20577b34fbece">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#ad352447adcccccabd4e20577b34fbece">neorv32_twi.h</a></li> +<li>neorv32_twi_generate_stop_nonblocking()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#aa22430aab0a38d88cbd2c4220c573da0">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#aa22430aab0a38d88cbd2c4220c573da0">neorv32_twi.h</a></li> +<li>neorv32_twi_get()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a7735376d26560866b153ed205dfcb2ba">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a7735376d26560866b153ed205dfcb2ba">neorv32_twi.h</a></li> +<li>neorv32_twi_get_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2">neorv32_twi.h</a></li> +<li>neorv32_twi_send_nonblocking()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a28fc44cce5d28f6e8c32268b239b07d5">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a28fc44cce5d28f6e8c32268b239b07d5">neorv32_twi.h</a></li> +<li>neorv32_twi_sense_scl()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a71e204837e71ce8c18c66e2ef3e7d9ef">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a71e204837e71ce8c18c66e2ef3e7d9ef">neorv32_twi.h</a></li> +<li>neorv32_twi_sense_sda()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a7645e3ba5a92ea0fbe446dbaac33b363">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a7645e3ba5a92ea0fbe446dbaac33b363">neorv32_twi.h</a></li> +<li>neorv32_twi_setup()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a7ea6f3509a7cf622234d4b83e33afbe3">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a7ea6f3509a7cf622234d4b83e33afbe3">neorv32_twi.h</a></li> +<li>neorv32_twi_trans()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#ac7020f3379602f11c47ca16f1bd82f2e">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#ac7020f3379602f11c47ca16f1bd82f2e">neorv32_twi.h</a></li> +<li>neorv32_uart_available()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#abef6415b0391dc055713404312196682">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#abef6415b0391dc055713404312196682">neorv32_uart.h</a></li> +<li>neorv32_uart_char_received()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#adedb0e07efb232717534017167a5be98">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#adedb0e07efb232717534017167a5be98">neorv32_uart.h</a></li> +<li>neorv32_uart_char_received_get()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#aa490df3a9bb2aa3215fa6fad34ffe7d1">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#aa490df3a9bb2aa3215fa6fad34ffe7d1">neorv32_uart.h</a></li> +<li>neorv32_uart_disable()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#ae18804ccd29ec2fd1cc06e9ce985b704">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#ae18804ccd29ec2fd1cc06e9ce985b704">neorv32_uart.h</a></li> +<li>neorv32_uart_enable()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#afa0533e81d53057c36f4997a2dbbe2bc">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#afa0533e81d53057c36f4997a2dbbe2bc">neorv32_uart.h</a></li> +<li>neorv32_uart_get_rx_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#af85fb929c912d3edef3d86ffa833982a">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#af85fb929c912d3edef3d86ffa833982a">neorv32_uart.h</a></li> +<li>neorv32_uart_get_tx_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a031e3e27c8783c299623468020a22b0e">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a031e3e27c8783c299623468020a22b0e">neorv32_uart.h</a></li> +<li>neorv32_uart_getc()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a2efd432f63b8d36d44263d0b1f39a6dc">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a2efd432f63b8d36d44263d0b1f39a6dc">neorv32_uart.h</a></li> +<li>neorv32_uart_printf()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#ab8c1f9f451def9126ab2749d7bbe50d9">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#ab8c1f9f451def9126ab2749d7bbe50d9">neorv32_uart.h</a></li> +<li>neorv32_uart_putc()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a9bc7bb94a50b74e1145b78eec6094129">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a9bc7bb94a50b74e1145b78eec6094129">neorv32_uart.h</a></li> +<li>neorv32_uart_puts()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a45a07d5e71677162baaa1025759c67a2">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a45a07d5e71677162baaa1025759c67a2">neorv32_uart.h</a></li> +<li>neorv32_uart_rtscts_disable()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a7b2f924ef4554b1fa90433c38d97558d">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a7b2f924ef4554b1fa90433c38d97558d">neorv32_uart.h</a></li> +<li>neorv32_uart_rtscts_enable()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a734b610f4cd1b474d7763f9700a715ec">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a734b610f4cd1b474d7763f9700a715ec">neorv32_uart.h</a></li> +<li>neorv32_uart_rx_clear()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#afe0de59c14faff1e0c890d5465be25f0">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#afe0de59c14faff1e0c890d5465be25f0">neorv32_uart.h</a></li> +<li>neorv32_uart_scan()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#ac429964878bd6deab61d9ed8659bca75">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#ac429964878bd6deab61d9ed8659bca75">neorv32_uart.h</a></li> +<li>neorv32_uart_setup()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a9cdec36f2723c5373664022d1b68b841">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a9cdec36f2723c5373664022d1b68b841">neorv32_uart.h</a></li> +<li>neorv32_uart_tx_busy()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#aa7bef48a58e044c246b8c4ad32864502">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#aa7bef48a58e044c246b8c4ad32864502">neorv32_uart.h</a></li> +<li>neorv32_uart_tx_clear()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a27971954262a2fd1f21d3bf1ba27e87c">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a27971954262a2fd1f21d3bf1ba27e87c">neorv32_uart.h</a></li> +<li>neorv32_uart_vprintf()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a8714cdb1c04d94bec322c6215ea10238">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a8714cdb1c04d94bec322c6215ea10238">neorv32_uart.h</a></li> +<li>neorv32_wdt_available()&#160;:&#160;<a class="el" href="neorv32__wdt_8c.html#a459a918c5a86c0167e8c748352d39827">neorv32_wdt.c</a>, <a class="el" href="neorv32__wdt_8h.html#a459a918c5a86c0167e8c748352d39827">neorv32_wdt.h</a></li> +<li>neorv32_wdt_disable()&#160;:&#160;<a class="el" href="neorv32__wdt_8c.html#aba52520582392a671e2b717715a330b2">neorv32_wdt.c</a>, <a class="el" href="neorv32__wdt_8h.html#aba52520582392a671e2b717715a330b2">neorv32_wdt.h</a></li> +<li>neorv32_wdt_feed()&#160;:&#160;<a class="el" href="neorv32__wdt_8c.html#ae4e86c42ed45eefdec43d9ece08b98a4">neorv32_wdt.c</a>, <a class="el" href="neorv32__wdt_8h.html#ae4e86c42ed45eefdec43d9ece08b98a4">neorv32_wdt.h</a></li> +<li>neorv32_wdt_get_cause()&#160;:&#160;<a class="el" href="neorv32__wdt_8c.html#a80fa8d178d18c9b02d32d93e815b532e">neorv32_wdt.c</a>, <a class="el" href="neorv32__wdt_8h.html#a80fa8d178d18c9b02d32d93e815b532e">neorv32_wdt.h</a></li> +<li>neorv32_wdt_setup()&#160;:&#160;<a class="el" href="neorv32__wdt_8c.html#a2aa72608191d34ef41c5f545988ff400">neorv32_wdt.c</a>, <a class="el" href="neorv32__wdt_8h.html#a2aa72608191d34ef41c5f545988ff400">neorv32_wdt.h</a></li> +<li>neorv32_xip_available()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#afe2e5682a26cafdb0585d2233bccc7c6">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#afe2e5682a26cafdb0585d2233bccc7c6">neorv32_xip.h</a></li> +<li>neorv32_xip_get_clock_speed()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#a88f728101e82939bf7f8b9ab5a904706">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#a88f728101e82939bf7f8b9ab5a904706">neorv32_xip.h</a></li> +<li>neorv32_xip_highspeed_disable()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#ad74f2842ed2251e3ae5c19e06dced0c3">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#ad74f2842ed2251e3ae5c19e06dced0c3">neorv32_xip.h</a></li> +<li>neorv32_xip_highspeed_enable()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#a6aef2ea29451ba2aa55160da777a5115">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#a6aef2ea29451ba2aa55160da777a5115">neorv32_xip.h</a></li> +<li>neorv32_xip_setup()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#a549d68abdf5a3d7484abe6d5370bb999">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#a549d68abdf5a3d7484abe6d5370bb999">neorv32_xip.h</a></li> +<li>neorv32_xip_spi_trans()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#a92f1446a3bb7fe6dee5dbed33882b223">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#a92f1446a3bb7fe6dee5dbed33882b223">neorv32_xip.h</a></li> +<li>neorv32_xip_start()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#a0ab2c36c973030a811e6d7abe0afc393">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#a0ab2c36c973030a811e6d7abe0afc393">neorv32_xip.h</a></li> +<li>neorv32_xirq_available()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#aaf30757d526030a8d81081915ab29a76">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#aaf30757d526030a8d81081915ab29a76">neorv32_xirq.h</a></li> +<li>neorv32_xirq_channel_disable()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#ae17509ad0c828aa9b36747b253cdbf0a">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#ae17509ad0c828aa9b36747b253cdbf0a">neorv32_xirq.h</a></li> +<li>neorv32_xirq_channel_enable()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#abe63c0968c94b472082c8156a1a7db5c">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#abe63c0968c94b472082c8156a1a7db5c">neorv32_xirq.h</a></li> +<li>neorv32_xirq_get_num()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a717a8e34908cc01345e68920e76f229c">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#a717a8e34908cc01345e68920e76f229c">neorv32_xirq.h</a></li> +<li>neorv32_xirq_global_disable()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#ac64d3ff5619968499bccebebe6a6cab3">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#ac64d3ff5619968499bccebebe6a6cab3">neorv32_xirq.h</a></li> +<li>neorv32_xirq_global_enable()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a76468156ef52b371e06bc2ca8eddcd27">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#a76468156ef52b371e06bc2ca8eddcd27">neorv32_xirq.h</a></li> +<li>neorv32_xirq_install()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a9129984f91c02afafaa072a5d86f9876">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#a9129984f91c02afafaa072a5d86f9876">neorv32_xirq.h</a></li> +<li>neorv32_xirq_setup()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a9295997fce7114a8205325c4d75dd200">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#a9295997fce7114a8205325c4d75dd200">neorv32_xirq.h</a></li> +<li>neorv32_xirq_setup_trigger()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a0d137f09d1e7dcd31c157b856033ac42">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#a0d137f09d1e7dcd31c157b856033ac42">neorv32_xirq.h</a></li> +<li>neorv32_xirq_uninstall()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a49ae67d1d5066cd795149e96b81127f7">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#a49ae67d1d5066cd795149e96b81127f7">neorv32_xirq.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_p.html b/sw/globals_func_p.html new file mode 100644 index 0000000000..ce22d38737 --- /dev/null +++ b/sw/globals_func_p.html @@ -0,0 +1,107 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_p" name="index_p"></a>- p -</h3><ul> +<li>pop_count()&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#aac4bec7738b12f5a4b4d7a3a6cb1ab8d">main.c</a></li> +<li>print_help()&#160;:&#160;<a class="el" href="bootloader_8c.html#a402ea961bfc2ffeee61e3a7c330b1559">bootloader.c</a></li> +<li>print_hex_byte()&#160;:&#160;<a class="el" href="demo__twi_2main_8c.html#a2ebc688bc1dad328693fc0974b378fa0">main.c</a></li> +<li>print_hex_word()&#160;:&#160;<a class="el" href="bootloader_8c.html#a70b7d5c3b3ae97e4e72e84c4bc28fb8a">bootloader.c</a></li> +<li>print_random_data()&#160;:&#160;<a class="el" href="demo__trng_2main_8c.html#a64205d97b57c99dc5e95b8621827f4a4">main.c</a></li> +<li>print_report()&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#a99377a057d14aaa9b45f8cab890e8cf7">main.c</a></li> +<li>print_universe()&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a9a455dea83a25f656fcc5217ad513dac">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_r.html b/sw/globals_func_r.html new file mode 100644 index 0000000000..34cd69cd48 --- /dev/null +++ b/sw/globals_func_r.html @@ -0,0 +1,148 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_r" name="index_r"></a>- r -</h3><ul> +<li>read_byte()&#160;:&#160;<a class="el" href="demo__onewire_2main_8c.html#a951a31029af34715f20856eb82432637">main.c</a></li> +<li>read_memory()&#160;:&#160;<a class="el" href="bus__explorer_2main_8c.html#afc9b1ab3db46eccf51d55c715fa2fbd4">main.c</a></li> +<li>repetition_count_test()&#160;:&#160;<a class="el" href="demo__trng_2main_8c.html#af37eae672fee5e81f00a1dbf51b7e417">main.c</a></li> +<li>riscv_emulate_fadds()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a9d676567276439875c9b1a15b892b555">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fclasss()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ae41a0bf9d28c35f4d6db7177ccf8ee06">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fcvt_sw()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0f2260b7b5793a95c49670379fc89617">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fcvt_swu()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a10a05bface37bff32c78ed0746845794">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fcvt_ws()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a292365fe41a7a661e61ae746306ba5e9">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fcvt_wus()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aad9fc7337e09081cf8c5bff8c28776c8">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fdivs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aeaf46a17b671278be2bf804159827a40">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_feqs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a7cb3c6570b911cd1dfb7b6e798cc1d21">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fles()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac5fdef0607602fa0bdb93b3535fd709e">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_flts()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2b802122d53a2ce517b3d39fec34d7e0">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fmadds()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a39212f2e2bb0f1752092a1732f93edf3">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fmaxs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af9b16a32d2bb13c8af5a678271d74889">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fmins()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a872cd30fb61190bd1ac719d25b01f5a3">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fmsubs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a05d0d5a8eb9422e93448efdeb679cabf">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fmuls()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ad43e8bdf4a6fbe229d22d24680f2be80">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fnmadds()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac8bb4450b39854ab07839e8f3505361c">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fnmsubs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a833638b346722dfa9d7d5c8d60998ec8">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fsgnjns()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0c985e626ed1d69314f4e3a0f1f58624">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fsgnjs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a12498d635f422f607b9b83facf3050dd">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fsgnjxs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a98caf7f310820052ae96ce0f45e6cd26">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fsqrts()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a1ceb3450f1e5c62d3079cd0e93c03501">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fsubs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ace5d95b855ec1aa8eacdb5bbeea58197">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fadds()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a4b151fcb252fc7b894f247f5af6a1809">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fclasss()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3064a5c57b5f45d57c4d19eb798724f6">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fcvt_sw()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2103eb86052f6f8e24a8a848ffc6528a">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fcvt_swu()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a837b7330f9d568791687ae1384b8ef28">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fcvt_ws()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a523fa0fb6f521311c7f44692c586b3ee">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fcvt_wus()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3bc6ee3059a7e99b187c4ea5e217715b">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fdivs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ab6a9d15643e3085ff80c7883f183a42b">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_feqs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af4ddfae45807d4e41f758672ee14cf7b">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fles()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#adb83fab39d91e9291da2b7b07830cf82">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_flts()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a85aa18294a58997db2c324184196669c">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fmadds()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abbdb403cdeef414fa2f867b702d5f6eb">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fmaxs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87c1ce499e5e43554cb0f407cf0d3f7f">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fmins()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abf7f9e466906306d9755fd5bc7946e3c">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fmsubs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a03aba9c70c5286dacebaeb0ef5219cc9">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fmuls()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87a106e0d24a3183712e438d2bcbfa2d">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fnmadds()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa6473bc2d2721b57277b83a3ae0cfdb6">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fnmsubs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a639fc7bd75933888540e9cceb67221a0">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fsgnjns()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa4010772a986d03929ba7a43dfdcddd9">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fsgnjs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aff3acd90bcfbda96945f95a0e0bae12b">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fsgnjxs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2235d91cdac03bf8071003a5c59b9dd0">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fsqrts()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a17e2b7a399c956d548a609185084ea3c">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fsubs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af8473ba61abab8ae2e3ecbaf22d70e89">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>rte_service_handler()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a349743a03307abb5130a3e89d903971b">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_s.html b/sw/globals_func_s.html new file mode 100644 index 0000000000..8c72d59df8 --- /dev/null +++ b/sw/globals_func_s.html @@ -0,0 +1,131 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_s" name="index_s"></a>- s -</h3><ul> +<li>save_exe()&#160;:&#160;<a class="el" href="bootloader_8c.html#ababfffe8e7036179e150ad3b9bda3a74">bootloader.c</a></li> +<li>scan_bus()&#160;:&#160;<a class="el" href="demo__onewire_2main_8c.html#ac07c9cfd80ac2e24be9dac6cf943b7de">main.c</a></li> +<li>scan_twi()&#160;:&#160;<a class="el" href="demo__twi_2main_8c.html#aace46ee34e954f9ebee5873beb0785f1">main.c</a></li> +<li>sdi_get()&#160;:&#160;<a class="el" href="demo__sdi_2main_8c.html#aa25f620a5631e862252be1d5429e8585">main.c</a></li> +<li>sdi_put()&#160;:&#160;<a class="el" href="demo__sdi_2main_8c.html#ae3dc843520a800d7ba2b5d6be03d9c3d">main.c</a></li> +<li>send_twi()&#160;:&#160;<a class="el" href="demo__twi_2main_8c.html#aa94edd4f55a3ac18913f661f4bc16fb1">main.c</a></li> +<li>set_cell()&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a5315eb56128f1ca40d9f4d477c345dd7">main.c</a></li> +<li>set_clock()&#160;:&#160;<a class="el" href="demo__twi_2main_8c.html#acee0c1770467f85a150d072ac7e1252f">main.c</a></li> +<li>setup_access()&#160;:&#160;<a class="el" href="bus__explorer_2main_8c.html#a2b6196c2e97a7f7702c0068780304ec1">main.c</a></li> +<li>show_1wire_commands()&#160;:&#160;<a class="el" href="demo__onewire_2main_8c.html#a29d5831498c2eaf0415d6f01efb9e7ce">main.c</a></li> +<li>show_arrays()&#160;:&#160;<a class="el" href="demo__dma_2main_8c.html#a8ad0c7bfd07edb6d42d86b166347206b">main.c</a></li> +<li>show_help()&#160;:&#160;<a class="el" href="demo__onewire_2main_8c.html#af25820ed386a66a0d6bb4dcdd2204704">main.c</a></li> +<li>sim_irq_trigger()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#ada24f2cd9d2d384265517f539711de62">main.c</a></li> +<li>slink_firq_handler()&#160;:&#160;<a class="el" href="demo__slink_2main_8c.html#a48c79e20ed1d4138d61b5593bdbe537a">main.c</a></li> +<li>spi_cs()&#160;:&#160;<a class="el" href="demo__spi_2main_8c.html#a6f94991b8943a141ed4124585222470d">main.c</a></li> +<li>spi_flash_check()&#160;:&#160;<a class="el" href="bootloader_8c.html#a1919595ed2232aebb3e774b916ab1662">bootloader.c</a></li> +<li>spi_flash_erase_sector()&#160;:&#160;<a class="el" href="bootloader_8c.html#a0d877f0611dfcee32a483c8a3660eb1b">bootloader.c</a></li> +<li>spi_flash_read_byte()&#160;:&#160;<a class="el" href="bootloader_8c.html#a09e72e2debdd94929b2be4c7713d5e17">bootloader.c</a></li> +<li>spi_flash_read_status()&#160;:&#160;<a class="el" href="bootloader_8c.html#a005966cd0b32f3d5c041028c4b1c99f5">bootloader.c</a></li> +<li>spi_flash_wakeup()&#160;:&#160;<a class="el" href="bootloader_8c.html#a1fbdccc60f05756213c9f3d64bac6d47">bootloader.c</a></li> +<li>spi_flash_write_addr()&#160;:&#160;<a class="el" href="bootloader_8c.html#a6a8caddda6e729d747726471b0b0f742">bootloader.c</a></li> +<li>spi_flash_write_byte()&#160;:&#160;<a class="el" href="bootloader_8c.html#a006c27b7d80897b78ab8cd83a391331f">bootloader.c</a></li> +<li>spi_flash_write_disable()&#160;:&#160;<a class="el" href="bootloader_8c.html#a82d26a2d6293ed7fd44a5c622adfbd45">bootloader.c</a></li> +<li>spi_flash_write_enable()&#160;:&#160;<a class="el" href="bootloader_8c.html#a9642e28ef2baec5b356ad9a70970d0e6">bootloader.c</a></li> +<li>spi_flash_write_word()&#160;:&#160;<a class="el" href="bootloader_8c.html#a717c72166af7c2ff7e73bd0b47128338">bootloader.c</a></li> +<li>spi_irq_handler()&#160;:&#160;<a class="el" href="demo__spi__irq_2main_8c.html#a7e266cc5247c999948dacc2102bd184a">main.c</a></li> +<li>spi_setup()&#160;:&#160;<a class="el" href="demo__spi_2main_8c.html#a755192be6c3cf9904564b0eee99de445">main.c</a></li> +<li>spi_trans()&#160;:&#160;<a class="el" href="demo__spi_2main_8c.html#a13e10b34fbbffca6c31f0ce25b3f8432">main.c</a></li> +<li>start_app()&#160;:&#160;<a class="el" href="bootloader_8c.html#ae8de91537ac2782f0f0ebc3b2d4fb1df">bootloader.c</a></li> +<li>subnormal_flush()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a791f880781a1bcea1861471be7d1a851">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>system_error()&#160;:&#160;<a class="el" href="bootloader_8c.html#a3bdfe2f25b1bfb42f80624ffff22ab01">bootloader.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_t.html b/sw/globals_func_t.html new file mode 100644 index 0000000000..3e5ff3edc1 --- /dev/null +++ b/sw/globals_func_t.html @@ -0,0 +1,105 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_t" name="index_t"></a>- t -</h3><ul> +<li>test_fail()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a1e0a5d63896fa26a6c25c0012fc6b938">main.c</a></li> +<li>test_ok()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#ae61d39109b2747429ec3a3c1b5533598">main.c</a></li> +<li>trap_handler_emulate_amo()&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#aafcbf639ae4f66e5dfe9dea511a59f9d">main.c</a></li> +<li>trap_handler_emulate_unaligned_lw()&#160;:&#160;<a class="el" href="demo__emulate__unaligned_2main_8c.html#a07da42351229525998965b219e827460">main.c</a></li> +<li>trigger_module_dummy()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#ac91bfdd45696444673dc7d6b1b644082">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_u.html b/sw/globals_func_u.html new file mode 100644 index 0000000000..26a1bc7ff1 --- /dev/null +++ b/sw/globals_func_u.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_u" name="index_u"></a>- u -</h3><ul> +<li>uart_get_executable()&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a0458656f8a108ff31f4bbbd005f029a0">main.c</a></li> +<li>uart_get_word()&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a3043d09bdc155f57f45cd91e0cd4d15b">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_v.html b/sw/globals_func_v.html new file mode 100644 index 0000000000..f29e417c73 --- /dev/null +++ b/sw/globals_func_v.html @@ -0,0 +1,104 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_v" name="index_v"></a>- v -</h3><ul> +<li>vectored_global_handler()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a9504ca74fdb80711a88d2a16d4cb4cf4">main.c</a></li> +<li>vectored_irq_table()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a0d695ebfaae3b4614ddb62640cbf8b7b">main.c</a></li> +<li>vectored_mei_handler()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a1a455bede4ab48f32d3ed0868e398044">main.c</a></li> +<li>verify_result()&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a941ef8d24fd8e8fe4536626b2ce72410">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_w.html b/sw/globals_func_w.html new file mode 100644 index 0000000000..b0c619738d --- /dev/null +++ b/sw/globals_func_w.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_w" name="index_w"></a>- w -</h3><ul> +<li>write_byte()&#160;:&#160;<a class="el" href="demo__onewire_2main_8c.html#a28283848f09bf8feebc860a51545f487">main.c</a></li> +<li>write_memory()&#160;:&#160;<a class="el" href="bus__explorer_2main_8c.html#a96729fb5279642ac56c8e6a513789b45">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_func_x.html b/sw/globals_func_x.html new file mode 100644 index 0000000000..520ab20490 --- /dev/null +++ b/sw/globals_func_x.html @@ -0,0 +1,111 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions with links to the documentation:</div> + +<h3><a id="index_x" name="index_x"></a>- x -</h3><ul> +<li>xip_flash_access_check()&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a23bd7bd7b0808d919fd09ac0a8258498">main.c</a></li> +<li>xip_flash_erase_sector()&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a9e0b2714126b6699ddb65485c93293e4">main.c</a></li> +<li>xip_flash_program()&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a4ddfa8fdc072cadeef18a4a10bc8b174">main.c</a></li> +<li>xirq_handler_ch0()&#160;:&#160;<a class="el" href="demo__xirq_2main_8c.html#a8874ccfc0b56171c359b5c2ceaf2bd80">main.c</a></li> +<li>xirq_handler_ch1()&#160;:&#160;<a class="el" href="demo__xirq_2main_8c.html#abfe0c0bc47a683ba55df2aed63a12d4b">main.c</a></li> +<li>xirq_handler_ch2()&#160;:&#160;<a class="el" href="demo__xirq_2main_8c.html#ae8e3b3236aa2303c2b5e6e421b72cf73">main.c</a></li> +<li>xirq_handler_ch3()&#160;:&#160;<a class="el" href="demo__xirq_2main_8c.html#a99e9ae3088f39995c852b2c53ec21266">main.c</a></li> +<li>xirq_trap_handler0()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#aa4fe70578c4dccabe1e31fae941378cb">main.c</a></li> +<li>xirq_trap_handler1()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a277cb06ef74e4cfe1ef783069f9b6527">main.c</a></li> +<li>xtea_sw_decipher()&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a0e980c5d81b1eca90b8073e54099bdb0">main.c</a></li> +<li>xtea_sw_encipher()&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a8dc502bf508491eed1f39c4acf040efb">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_g.html b/sw/globals_g.html new file mode 100644 index 0000000000..67d51a7339 --- /dev/null +++ b/sw/globals_g.html @@ -0,0 +1,121 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_g" name="index_g"></a>- g -</h3><ul> +<li>GEN_DELAY&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a3f33bf77abbf35c245956489f8f7e3a7">main.c</a></li> +<li>generate_histogram()&#160;:&#160;<a class="el" href="demo__trng_2main_8c.html#a4e49f5e3feb4bd5755f919cd3310b506">main.c</a></li> +<li>get_cell()&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a6bd541a19c62ea9ec620eaad3f218d16">main.c</a></li> +<li>get_exe()&#160;:&#160;<a class="el" href="bootloader_8c.html#ac18819795adb6dbdd52b0587e7fbb569">bootloader.c</a></li> +<li>get_exe_word()&#160;:&#160;<a class="el" href="bootloader_8c.html#ac58d9f7dc79a549bde1cb50f619c19af">bootloader.c</a></li> +<li>get_neighborhood()&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a977190adaa24a3f49fca1540b51d25a0">main.c</a></li> +<li>get_test_vector()&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a73c70bd0fb6d695cb113eaeb50923e3e">main.c</a></li> +<li>getting_exe&#160;:&#160;<a class="el" href="bootloader_8c.html#a5fa6b109bf211d1768f84c9d38eef240">bootloader.c</a></li> +<li>global_trap_handler()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a9a64ce0ee69c4c32cecc8b2b2746604c">main.c</a></li> +<li>GPTMR_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90">neorv32_gptmr.h</a></li> +<li>GPTMR_CTRL_IRQ_CLR&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38">neorv32_gptmr.h</a></li> +<li>GPTMR_CTRL_IRQ_PND&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a">neorv32_gptmr.h</a></li> +<li>GPTMR_CTRL_MODE&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43">neorv32_gptmr.h</a></li> +<li>GPTMR_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3">neorv32_gptmr.h</a></li> +<li>GPTMR_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298">neorv32_gptmr.h</a></li> +<li>GPTMR_CTRL_PRSC2&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833">neorv32_gptmr.h</a></li> +<li>GPTMR_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a0a59186908b498cb92273b7767966e26">neorv32.h</a></li> +<li>gptmr_firq_handler()&#160;:&#160;<a class="el" href="demo__gptmr_2main_8c.html#a2bd89412466a65329711bfd5c29199c9">main.c</a></li> +<li>GPTMR_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a4a3164d123ddddd07750f868e67d82d8">neorv32.h</a></li> +<li>GPTMR_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#aac38deeef36de0a474ab238a3054f860">neorv32.h</a></li> +<li>GPTMR_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a445543c36d1f78477aa8ea4841c720a1">neorv32.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_h.html b/sw/globals_h.html new file mode 100644 index 0000000000..e9d6078478 --- /dev/null +++ b/sw/globals_h.html @@ -0,0 +1,115 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_h" name="index_h"></a>- h -</h3><ul> +<li>hexdump()&#160;:&#160;<a class="el" href="bus__explorer_2main_8c.html#a02640a99db37b8d92b9edffc9720a210">main.c</a></li> +<li>HPMCNT_EVENT_BRANCH&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_BRANCHED&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_COMPR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_CY&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_IR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_LOAD&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_STORE&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_TM&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_TRAP&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_WAIT_ALU&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_WAIT_DIS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27">neorv32_cpu_csr.h</a></li> +<li>HPMCNT_EVENT_WAIT_LSU&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b">neorv32_cpu_csr.h</a></li> +<li>hsv2rgb()&#160;:&#160;<a class="el" href="demo__neopixel_2main_8c.html#a2736ec755f9e10c80bf66f727f870ffc">main.c</a></li> +<li>hw_breakpoint_handler()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a31d9e432f6a368e6222f5e0907eeb6f4">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_i.html b/sw/globals_i.html new file mode 100644 index 0000000000..5463e78aa7 --- /dev/null +++ b/sw/globals_i.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_i" name="index_i"></a>- i -</h3><ul> +<li>input_data&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a2e2ccb9136736a673dbef71f207e97a0">main.c</a></li> +<li>IO_BASE_ADDRESS&#160;:&#160;<a class="el" href="neorv32_8h.html#a1eb0cb7fed7e154e15cb4009880a879c">neorv32.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_k.html b/sw/globals_k.html new file mode 100644 index 0000000000..8e6ba2a910 --- /dev/null +++ b/sw/globals_k.html @@ -0,0 +1,101 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_k" name="index_k"></a>- k -</h3><ul> +<li>key&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#ab5c498f9da12ab2d6ddc89bf4a46dec6">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_m.html b/sw/globals_m.html new file mode 100644 index 0000000000..2106bdfd99 --- /dev/null +++ b/sw/globals_m.html @@ -0,0 +1,106 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_m" name="index_m"></a>- m -</h3><ul> +<li>main()&#160;:&#160;<a class="el" href="bootloader_8c.html#a840291bc02cba5474a4cb46a9b9566fe">bootloader.c</a>, <a class="el" href="atomic__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main.c</a></li> +<li>main_destructor_test()&#160;:&#160;<a class="el" href="demo__newlib_2main_8c.html#a7076a1dfd3c18c91fcf665ce54b087b3">main.c</a></li> +<li>MAX_DUTY&#160;:&#160;<a class="el" href="demo__pwm_2main_8c.html#a2351f30f0895b552e5fe9944d69e645d">main.c</a></li> +<li>MAX_INTENSITY&#160;:&#160;<a class="el" href="demo__neopixel_2main_8c.html#a1d1d5e7ff16f25b68fdf779befd298f7">main.c</a></li> +<li>msi_irq_handler()&#160;:&#160;<a class="el" href="demo__clint_2main_8c.html#a8e5e335f226a7dac74e2f117f07bebf6">main.c</a></li> +<li>mti_irq_handler()&#160;:&#160;<a class="el" href="demo__clint_2main_8c.html#a56e848c71747fc350f1697e84797871f">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_n.html b/sw/globals_n.html new file mode 100644 index 0000000000..19a80b3ac0 --- /dev/null +++ b/sw/globals_n.html @@ -0,0 +1,484 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_n" name="index_n"></a>- n -</h3><ul> +<li>NEOLED_CTRL_BUFS_0&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_BUFS_1&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_BUFS_2&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_BUFS_3&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_IRQ_CONF&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_MODE&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_PRSC2&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_STROBE&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ONE_H_0&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ONE_H_1&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ONE_H_2&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ONE_H_3&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ONE_H_4&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_TOT_0&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_TOT_1&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_TOT_2&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_TOT_3&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_TOT_4&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ZERO_H_0&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ZERO_H_1&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ZERO_H_2&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ZERO_H_3&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_T_ZERO_H_4&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_TX_BUSY&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983">neorv32_neoled.h</a></li> +<li>NEOLED_CTRL_TX_HALF&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73">neorv32_neoled.h</a></li> +<li>NEOLED_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a8d0409818600c0b2acfe8253e8f027b8">neorv32.h</a></li> +<li>NEOLED_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#aded7d7f5f4ba3a6d90f9a29e62a8cfab">neorv32.h</a></li> +<li>NEOLED_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#aca6cfc3f580c4dfe1e213009ee450c58">neorv32.h</a></li> +<li>NEOLED_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab4a2ac455d7426992de6877ea7325f21">neorv32.h</a></li> +<li>neorv32_aux_date2unixtime()&#160;:&#160;<a class="el" href="neorv32__aux_8c.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c">neorv32_aux.c</a>, <a class="el" href="neorv32__aux_8h.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c">neorv32_aux.h</a></li> +<li>neorv32_aux_hexstr2uint64()&#160;:&#160;<a class="el" href="neorv32__aux_8c.html#a05a5482da3b72a5bdf2181e754143d79">neorv32_aux.c</a>, <a class="el" href="neorv32__aux_8h.html#a05a5482da3b72a5bdf2181e754143d79">neorv32_aux.h</a></li> +<li>neorv32_aux_itoa()&#160;:&#160;<a class="el" href="neorv32__aux_8c.html#af72230251bc58d3142353849f63d5667">neorv32_aux.c</a>, <a class="el" href="neorv32__aux_8h.html#af72230251bc58d3142353849f63d5667">neorv32_aux.h</a></li> +<li>neorv32_aux_unixtime2date()&#160;:&#160;<a class="el" href="neorv32__aux_8c.html#a885a81838a91b57797e849cb835c6887">neorv32_aux.c</a>, <a class="el" href="neorv32__aux_8h.html#a885a81838a91b57797e849cb835c6887">neorv32_aux.h</a></li> +<li>neorv32_aux_xorshift32()&#160;:&#160;<a class="el" href="neorv32__aux_8c.html#aff31dd983f75f70eeae331c65acaa50e">neorv32_aux.c</a>, <a class="el" href="neorv32__aux_8h.html#aff31dd983f75f70eeae331c65acaa50e">neorv32_aux.h</a></li> +<li>NEORV32_BOOTROM_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a9af9742516d8f0e43cee33882ea41157">neorv32.h</a></li> +<li>NEORV32_CFS&#160;:&#160;<a class="el" href="neorv32__cfs_8h.html#a6c101b306bd096f78d351e39b308d3e2">neorv32_cfs.h</a></li> +<li>neorv32_cfs_available()&#160;:&#160;<a class="el" href="neorv32__cfs_8c.html#abac96dfaefe433eca1c0b93fa6183d2e">neorv32_cfs.c</a>, <a class="el" href="neorv32__cfs_8h.html#abac96dfaefe433eca1c0b93fa6183d2e">neorv32_cfs.h</a></li> +<li>NEORV32_CFS_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a41d6f97daef61641da96b9f72f6b272f">neorv32.h</a></li> +<li>neorv32_cfu_r3_instr&#160;:&#160;<a class="el" href="neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c">neorv32_cpu_cfu.h</a></li> +<li>neorv32_cfu_r4_instr&#160;:&#160;<a class="el" href="neorv32__cpu__cfu_8h.html#a046a640f7f4a7b1b99a824fb325e2079">neorv32_cpu_cfu.h</a></li> +<li>NEORV32_CLINT&#160;:&#160;<a class="el" href="neorv32__clint_8h.html#aa85ecb43f16fa798c5e583f08d29ca3e">neorv32_clint.h</a></li> +<li>neorv32_clint_available()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#a197e7946193987bf04a08aa0563462bf">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#a197e7946193987bf04a08aa0563462bf">neorv32_clint.h</a></li> +<li>NEORV32_CLINT_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab1522f52c3c24ba2245dfa2783932d42">neorv32.h</a></li> +<li>neorv32_clint_msi_clr()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#a6655e1e21cc94cda4e5c21544a72c758">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#a6655e1e21cc94cda4e5c21544a72c758">neorv32_clint.h</a></li> +<li>neorv32_clint_msi_set()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#a4478c86505e3a22b774208006060b8a4">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#a4478c86505e3a22b774208006060b8a4">neorv32_clint.h</a></li> +<li>neorv32_clint_mtimecmp_get()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#a1d6526b096fbf99fdde2632bff7ce8df">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#a1d6526b096fbf99fdde2632bff7ce8df">neorv32_clint.h</a></li> +<li>neorv32_clint_mtimecmp_set()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#af1e2ff4ce5f3a20b07eeaac50685110a">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#af1e2ff4ce5f3a20b07eeaac50685110a">neorv32_clint.h</a></li> +<li>neorv32_clint_time_get()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#a94364eb5e89145b5e2b61ac6d3eeccd4">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#a94364eb5e89145b5e2b61ac6d3eeccd4">neorv32_clint.h</a></li> +<li>neorv32_clint_time_set()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#af8e6985da6cd629a0572edd8c70cd888">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#af8e6985da6cd629a0572edd8c70cd888">neorv32_clint.h</a></li> +<li>neorv32_clint_unixtime_get()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#a89aa592a96260e68f99df71a194facaa">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#a89aa592a96260e68f99df71a194facaa">neorv32_clint.h</a></li> +<li>neorv32_clint_unixtime_set()&#160;:&#160;<a class="el" href="neorv32__clint_8c.html#abe9bcd07591e9c2d3e27435809bf4bdd">neorv32_clint.c</a>, <a class="el" href="neorv32__clint_8h.html#abe9bcd07591e9c2d3e27435809bf4bdd">neorv32_clint.h</a></li> +<li>NEORV32_CLOCK_PRSC_enum&#160;:&#160;<a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">neorv32.h</a></li> +<li>neorv32_cpu_amoaddw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#ada27ec89b2530f7b7f14de947cc82bf9">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#ada27ec89b2530f7b7f14de947cc82bf9">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amoandw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#a9b4540dadbfd5da907117570d8006e36">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#a9b4540dadbfd5da907117570d8006e36">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amolr()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8h.html#ad4437bbc61a4e40d7d01dfe9459f6639">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amomaxuw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#a31a6a3b5a33655f4a7b27d4c85b75f07">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#a31a6a3b5a33655f4a7b27d4c85b75f07">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amomaxw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#a62cf36637d7a04079228acecfe8a5cf3">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#a62cf36637d7a04079228acecfe8a5cf3">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amominuw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#a1281e18b95cd525073e1123c5d04e9e2">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#a1281e18b95cd525073e1123c5d04e9e2">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amominw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#a8e383fb8825538b5579d5ce075830697">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#a8e383fb8825538b5579d5ce075830697">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amoorw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#adc80b1f2b3a4e70fee44c0edb08fc402">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#adc80b1f2b3a4e70fee44c0edb08fc402">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amosc()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8h.html#a5e73eaa273c41a06972e862976fda53c">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amoswapw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#aad0d96e61bacc3af13ff471dd44ca8e9">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#aad0d96e61bacc3af13ff471dd44ca8e9">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_amoxorw()&#160;:&#160;<a class="el" href="neorv32__cpu__amo_8c.html#a65b67f48356fa9b30596485473311377">neorv32_cpu_amo.c</a>, <a class="el" href="neorv32__cpu__amo_8h.html#a65b67f48356fa9b30596485473311377">neorv32_cpu_amo.h</a></li> +<li>neorv32_cpu_cfu_available()&#160;:&#160;<a class="el" href="neorv32__cpu__cfu_8c.html#a13019b8afa1a80c0e5c24eb4d72e75c1">neorv32_cpu_cfu.c</a>, <a class="el" href="neorv32__cpu__cfu_8h.html#a13019b8afa1a80c0e5c24eb4d72e75c1">neorv32_cpu_cfu.h</a></li> +<li>neorv32_cpu_csr_clr()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#ab8f533ddbc3a3af5e3bca2287ac10122">neorv32_cpu.h</a></li> +<li>neorv32_cpu_csr_read()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#aab7a9f9cf608599f2b124dd499cb8418">neorv32_cpu.h</a></li> +<li>neorv32_cpu_csr_set()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a25a09de97229aac839ef6f74da604acf">neorv32_cpu.h</a></li> +<li>neorv32_cpu_csr_write()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#afb5ef6e0b1a3e26570edfd8379490455">neorv32_cpu.h</a></li> +<li>neorv32_cpu_delay_ms()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#aa9027535b13d9f9325e734997fc4a137">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#aa9027535b13d9f9325e734997fc4a137">neorv32_cpu.h</a></li> +<li>neorv32_cpu_get_clk_from_prsc()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#a8346fb926f84f3d7bccbb4741105505f">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#a8346fb926f84f3d7bccbb4741105505f">neorv32_cpu.h</a></li> +<li>neorv32_cpu_get_cycle()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#ac3fd7dc7cd1e0a08225c41820af27f92">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#ac3fd7dc7cd1e0a08225c41820af27f92">neorv32_cpu.h</a></li> +<li>neorv32_cpu_get_instret()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#a387aa304770b05594c4acca128a60a75">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#a387aa304770b05594c4acca128a60a75">neorv32_cpu.h</a></li> +<li>neorv32_cpu_goto_user_mode()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#aca49efb45d3808ad76cf65ba291f546d">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#aca49efb45d3808ad76cf65ba291f546d">neorv32_cpu.h</a></li> +<li>neorv32_cpu_hpm_get_num_counters()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#a70f49b80322aa457f29f7671f94a183d">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#a70f49b80322aa457f29f7671f94a183d">neorv32_cpu.h</a></li> +<li>neorv32_cpu_hpm_get_size()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#adb3ae542bbb0ddf9f562a4e42bc24d10">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#adb3ae542bbb0ddf9f562a4e42bc24d10">neorv32_cpu.h</a></li> +<li>neorv32_cpu_load_signed_byte()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a31f903596ab1bcddea79fdf608eaa666">neorv32_cpu.h</a></li> +<li>neorv32_cpu_load_signed_half()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#ae9c8b6c681536ddea3aff0e63f30ef70">neorv32_cpu.h</a></li> +<li>neorv32_cpu_load_unsigned_byte()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#ac54ec9b59e17c7cd9b9907abee82ce95">neorv32_cpu.h</a></li> +<li>neorv32_cpu_load_unsigned_half()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a32544cd652debb4affb308806a115d5b">neorv32_cpu.h</a></li> +<li>neorv32_cpu_load_unsigned_word()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a3b6cf445e2136486564ef3d3473c91dd">neorv32_cpu.h</a></li> +<li>neorv32_cpu_pmp_configure_region()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#aa458a700619b2f7666cfcffe02ec2e2c">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#aa458a700619b2f7666cfcffe02ec2e2c">neorv32_cpu.h</a></li> +<li>neorv32_cpu_pmp_get_granularity()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#ad4f8160f4821b6691e9682ef60c7cd7b">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#ad4f8160f4821b6691e9682ef60c7cd7b">neorv32_cpu.h</a></li> +<li>neorv32_cpu_pmp_get_num_regions()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#a27dd614bc270dfa30ed73323ebda2d2d">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#a27dd614bc270dfa30ed73323ebda2d2d">neorv32_cpu.h</a></li> +<li>neorv32_cpu_set_mcycle()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#a232d0290c459dc790d989fcdc4d121bf">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#a232d0290c459dc790d989fcdc4d121bf">neorv32_cpu.h</a></li> +<li>neorv32_cpu_set_minstret()&#160;:&#160;<a class="el" href="neorv32__cpu_8c.html#a5c3cf52498abb3cf3c14a724b287ecf0">neorv32_cpu.c</a>, <a class="el" href="neorv32__cpu_8h.html#a5c3cf52498abb3cf3c14a724b287ecf0">neorv32_cpu.h</a></li> +<li>neorv32_cpu_sleep()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a769ca4556213619f6fea4ff6bfb979dd">neorv32_cpu.h</a></li> +<li>neorv32_cpu_store_unsigned_byte()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#aeec8ad2a82885c40a307346f9003483e">neorv32_cpu.h</a></li> +<li>neorv32_cpu_store_unsigned_half()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a31f30f6d6542758cd3073a9939b07653">neorv32_cpu.h</a></li> +<li>neorv32_cpu_store_unsigned_word()&#160;:&#160;<a class="el" href="neorv32__cpu_8h.html#a173bb06b4ae9c8964469068dafcb7b0e">neorv32_cpu.h</a></li> +<li>NEORV32_CRC&#160;:&#160;<a class="el" href="neorv32__crc_8h.html#a110962d2b370f9d7997e459d9fd34271">neorv32_crc.h</a></li> +<li>neorv32_crc_available()&#160;:&#160;<a class="el" href="neorv32__crc_8c.html#aa46c647317752f8bb6d5836d4876a704">neorv32_crc.c</a>, <a class="el" href="neorv32__crc_8h.html#aa46c647317752f8bb6d5836d4876a704">neorv32_crc.h</a></li> +<li>NEORV32_CRC_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a0e2377055bdc0f416b5ae4385610600d">neorv32.h</a></li> +<li>neorv32_crc_block()&#160;:&#160;<a class="el" href="neorv32__crc_8c.html#a9243006e6cc94c03450646d26a7289b2">neorv32_crc.c</a>, <a class="el" href="neorv32__crc_8h.html#a9243006e6cc94c03450646d26a7289b2">neorv32_crc.h</a></li> +<li>neorv32_crc_get()&#160;:&#160;<a class="el" href="neorv32__crc_8c.html#a444b88f1536f65acc301fb19eddcf227">neorv32_crc.c</a>, <a class="el" href="neorv32__crc_8h.html#a444b88f1536f65acc301fb19eddcf227">neorv32_crc.h</a></li> +<li>NEORV32_CRC_MODE_enum&#160;:&#160;<a class="el" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447">neorv32_crc.h</a></li> +<li>neorv32_crc_setup()&#160;:&#160;<a class="el" href="neorv32__crc_8c.html#a4ff5f7b91e9f668535ed33b6382ae623">neorv32_crc.c</a>, <a class="el" href="neorv32__crc_8h.html#a4ff5f7b91e9f668535ed33b6382ae623">neorv32_crc.h</a></li> +<li>neorv32_crc_single()&#160;:&#160;<a class="el" href="neorv32__crc_8c.html#ad9d50c76a485160667d486bce32cbeb8">neorv32_crc.c</a>, <a class="el" href="neorv32__crc_8h.html#ad9d50c76a485160667d486bce32cbeb8">neorv32_crc.h</a></li> +<li>NEORV32_CSR_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_FFLAGS_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204b">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_MCOUNTEREN_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_MCOUNTINHIBIT_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfe">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_MIE_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_MIP_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_MISA_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830c">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_MSTATUS_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485">neorv32_cpu_csr.h</a></li> +<li>NEORV32_CSR_XISA_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387">neorv32_cpu_csr.h</a></li> +<li>NEORV32_DM_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a9bf0149681677f7d87abf8f62e2d9a3d">neorv32.h</a></li> +<li>NEORV32_DMA&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a0dcb61a0e0d2b45beb7818015adc8639">neorv32_dma.h</a></li> +<li>neorv32_dma_available()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a13260c3252f0375d8982590d270d7dfd">neorv32_dma.h</a></li> +<li>NEORV32_DMA_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#aa8d3a83ffad1e71f0832a5da78d62008">neorv32.h</a></li> +<li>NEORV32_DMA_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4">neorv32_dma.h</a></li> +<li>neorv32_dma_disable()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6df244028455cf7f8d4cf1520c4670a7">neorv32_dma.h</a></li> +<li>neorv32_dma_done()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#afc8cc32f7d80d0f5ab33b2f1ecf77956">neorv32_dma.h</a></li> +<li>neorv32_dma_enable()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#ac3b72447e8a132faf26577ac714b8284">neorv32_dma.h</a></li> +<li>neorv32_dma_fence_disable()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a8f37adfa07050b0a1cb8430c9ce1fcc2">neorv32_dma.h</a></li> +<li>neorv32_dma_fence_enable()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a2c7257567ccdb7a986f5ef7c74d3917c">neorv32_dma.h</a></li> +<li>neorv32_dma_status()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#aa116f9714174abbe8a3583e441fee24b">neorv32_dma.h</a></li> +<li>NEORV32_DMA_STATUS_enum&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74b">neorv32_dma.h</a></li> +<li>neorv32_dma_transfer()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a2ce0d31e04604b2523135d52a877febf">neorv32_dma.h</a></li> +<li>neorv32_dma_transfer_auto()&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a6ebd1595ee6fa0e6cbfbd1ce7476f18e">neorv32_dma.h</a></li> +<li>NEORV32_DMA_TTYPE_enum&#160;:&#160;<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9">neorv32_dma.h</a></li> +<li>NEORV32_EXCEPTION_CODES_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">neorv32_cpu_csr.h</a></li> +<li>NEORV32_EXECUTABLE_enum&#160;:&#160;<a class="el" href="bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feb">bootloader.c</a></li> +<li>NEORV32_GPIO&#160;:&#160;<a class="el" href="neorv32__gpio_8h.html#a1e35bbf26b9d1aa5373af0b9468eb445">neorv32_gpio.h</a></li> +<li>neorv32_gpio_available()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#a41d39a41ba5879eb85d3ed4481fcff81">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#a41d39a41ba5879eb85d3ed4481fcff81">neorv32_gpio.h</a></li> +<li>NEORV32_GPIO_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a7fd1e24d4de2eed7bf9cd5391562c7f4">neorv32.h</a></li> +<li>neorv32_gpio_pin_get()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#afa3ee54aca47ff35f706b627ac66e95a">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#afa3ee54aca47ff35f706b627ac66e95a">neorv32_gpio.h</a></li> +<li>neorv32_gpio_pin_set()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#a60fd0830d634f0c1f784d815384665cb">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#a60fd0830d634f0c1f784d815384665cb">neorv32_gpio.h</a></li> +<li>neorv32_gpio_pin_toggle()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#a1958850fc1689eae9ddfcaa4a7513400">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#a1958850fc1689eae9ddfcaa4a7513400">neorv32_gpio.h</a></li> +<li>neorv32_gpio_port_get()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#ac42379f2fb5ca0bb63850d7957852b84">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#ac42379f2fb5ca0bb63850d7957852b84">neorv32_gpio.h</a></li> +<li>neorv32_gpio_port_set()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#a8dc7846945e4609fc96d81caee99ac00">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#a789222709485cd8467aad5eddf69d2df">neorv32_gpio.h</a></li> +<li>neorv32_gpio_port_toggle()&#160;:&#160;<a class="el" href="neorv32__gpio_8c.html#a210529f789779387d3f014e6253e803f">neorv32_gpio.c</a>, <a class="el" href="neorv32__gpio_8h.html#a210529f789779387d3f014e6253e803f">neorv32_gpio.h</a></li> +<li>NEORV32_GPTMR&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a9e047791588ff21fc4dc1b06456bdfd2">neorv32_gptmr.h</a></li> +<li>neorv32_gptmr_available()&#160;:&#160;<a class="el" href="neorv32__gptmr_8c.html#ae79a08c52ad3e83f9c4393acfabf035f">neorv32_gptmr.c</a>, <a class="el" href="neorv32__gptmr_8h.html#ae79a08c52ad3e83f9c4393acfabf035f">neorv32_gptmr.h</a></li> +<li>NEORV32_GPTMR_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a0991b1a5ba1e8c3550eb9770d43589d0">neorv32.h</a></li> +<li>NEORV32_GPTMR_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988">neorv32_gptmr.h</a></li> +<li>neorv32_gptmr_disable()&#160;:&#160;<a class="el" href="neorv32__gptmr_8c.html#a7c9bc6d28ad12611b08fa2867c2db874">neorv32_gptmr.c</a>, <a class="el" href="neorv32__gptmr_8h.html#a7c9bc6d28ad12611b08fa2867c2db874">neorv32_gptmr.h</a></li> +<li>neorv32_gptmr_enable()&#160;:&#160;<a class="el" href="neorv32__gptmr_8c.html#a59e684348835772a7e83446e478d4a13">neorv32_gptmr.c</a>, <a class="el" href="neorv32__gptmr_8h.html#a59e684348835772a7e83446e478d4a13">neorv32_gptmr.h</a></li> +<li>neorv32_gptmr_irq_ack()&#160;:&#160;<a class="el" href="neorv32__gptmr_8c.html#ac73aa4e41a064abb4ca554a389888e67">neorv32_gptmr.c</a>, <a class="el" href="neorv32__gptmr_8h.html#ac73aa4e41a064abb4ca554a389888e67">neorv32_gptmr.h</a></li> +<li>neorv32_gptmr_setup()&#160;:&#160;<a class="el" href="neorv32__gptmr_8c.html#a6aa27efd2163eebf8fc49fe1c591708f">neorv32_gptmr.c</a>, <a class="el" href="neorv32__gptmr_8h.html#a6aa27efd2163eebf8fc49fe1c591708f">neorv32_gptmr.h</a></li> +<li>neorv32_heap_begin_c&#160;:&#160;<a class="el" href="neorv32_8h.html#aca22a64c8c580dfde1676732d97ead7c">neorv32.h</a></li> +<li>neorv32_heap_end_c&#160;:&#160;<a class="el" href="neorv32_8h.html#ac8b656bd05c05176638ea3f922228ca5">neorv32.h</a></li> +<li>neorv32_heap_size_c&#160;:&#160;<a class="el" href="neorv32_8h.html#a32904e45632a47e21f7c9d873720cdc5">neorv32.h</a></li> +<li>NEORV32_HPMCNT_EVENT_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfe">neorv32_cpu_csr.h</a></li> +<li>NEORV32_NEOLED&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#a3ccc1097bc70f92235d693b612fa994a">neorv32_neoled.h</a></li> +<li>neorv32_neoled_available()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a57398d92fb4fc735b33e89271726e1d6">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a57398d92fb4fc735b33e89271726e1d6">neorv32_neoled.h</a></li> +<li>NEORV32_NEOLED_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a559fdce92e8af5efc426c8fc48d14f99">neorv32.h</a></li> +<li>NEORV32_NEOLED_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412">neorv32_neoled.h</a></li> +<li>neorv32_neoled_disable()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a8daaa97a85e0eb94d4a38eb2119ea183">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a8daaa97a85e0eb94d4a38eb2119ea183">neorv32_neoled.h</a></li> +<li>neorv32_neoled_enable()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a8181d5c1d15b7b5eecdc018341ac14fa">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a8181d5c1d15b7b5eecdc018341ac14fa">neorv32_neoled.h</a></li> +<li>neorv32_neoled_get_buffer_size()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a81c2c49198531fb6551eb288e29c084e">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a81c2c49198531fb6551eb288e29c084e">neorv32_neoled.h</a></li> +<li>neorv32_neoled_set_mode()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a484fcc6797b6d9cef86192e9593ec33d">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a484fcc6797b6d9cef86192e9593ec33d">neorv32_neoled.h</a></li> +<li>neorv32_neoled_setup()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#ac6e94602453779a2791bd0734465f5a3">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#ac6e94602453779a2791bd0734465f5a3">neorv32_neoled.h</a></li> +<li>neorv32_neoled_setup_ws2812()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#adade69c7368c28180b9992d5f0ab6031">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#adade69c7368c28180b9992d5f0ab6031">neorv32_neoled.h</a></li> +<li>neorv32_neoled_strobe_blocking()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a5aa9eb4dd3655fa08e1b61eb0f36589c">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a5aa9eb4dd3655fa08e1b61eb0f36589c">neorv32_neoled.h</a></li> +<li>neorv32_neoled_strobe_nonblocking()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#abf7882b949373df0774fc9cc20c2bd2e">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#abf7882b949373df0774fc9cc20c2bd2e">neorv32_neoled.h</a></li> +<li>neorv32_neoled_write_blocking()&#160;:&#160;<a class="el" href="neorv32__neoled_8c.html#a3ee5b3602da3ae982628e2802587e451">neorv32_neoled.c</a>, <a class="el" href="neorv32__neoled_8h.html#a3ee5b3602da3ae982628e2802587e451">neorv32_neoled.h</a></li> +<li>neorv32_neoled_write_nonblocking()&#160;:&#160;<a class="el" href="neorv32__neoled_8h.html#ad2a318bd59be12de34797ced0f7743c6">neorv32_neoled.h</a></li> +<li>NEORV32_ONEWIRE&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#a6f119e35d7ac01f110987508ff3becc9">neorv32_onewire.h</a></li> +<li>neorv32_onewire_available()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a865e5c381fd3c27c6981a589a5124d1e">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a865e5c381fd3c27c6981a589a5124d1e">neorv32_onewire.h</a></li> +<li>NEORV32_ONEWIRE_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a8d0b612e52b77395a05d4f18af6fcf00">neorv32.h</a></li> +<li>neorv32_onewire_busy()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a01b6236b89c045ddbd58398361c6ee0a">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a01b6236b89c045ddbd58398361c6ee0a">neorv32_onewire.h</a></li> +<li>NEORV32_ONEWIRE_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831">neorv32_onewire.h</a></li> +<li>NEORV32_ONEWIRE_DCMD_enum&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26">neorv32_onewire.h</a></li> +<li>neorv32_onewire_disable()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a7e329eeb1cd98301a53b271a6a102385">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a7e329eeb1cd98301a53b271a6a102385">neorv32_onewire.h</a></li> +<li>neorv32_onewire_enable()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#ae6fe766e7decf18869cfb86bba741ca4">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#ae6fe766e7decf18869cfb86bba741ca4">neorv32_onewire.h</a></li> +<li>neorv32_onewire_flush()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a05e220711255e82460bc92010199eb53">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a05e220711255e82460bc92010199eb53">neorv32_onewire.h</a></li> +<li>neorv32_onewire_get_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a32128bfcea4d8c8e31b0b59498e59798">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a32128bfcea4d8c8e31b0b59498e59798">neorv32_onewire.h</a></li> +<li>neorv32_onewire_read_bit()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#aace8398062b759256a516e6245aced83">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#aace8398062b759256a516e6245aced83">neorv32_onewire.h</a></li> +<li>neorv32_onewire_read_bit_blocking()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#ace8b7cf697b068b6b51676d84dec5960">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#ace8b7cf697b068b6b51676d84dec5960">neorv32_onewire.h</a></li> +<li>neorv32_onewire_read_bit_get()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#aa4a19d2d8dc3b3401307615aec201190">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#aa4a19d2d8dc3b3401307615aec201190">neorv32_onewire.h</a></li> +<li>neorv32_onewire_read_byte()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a01ddba7a9148be542b5c52e39e6f46d6">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a01ddba7a9148be542b5c52e39e6f46d6">neorv32_onewire.h</a></li> +<li>neorv32_onewire_read_byte_blocking()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a7510e65a26aeefb40e994fd00667537e">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a7510e65a26aeefb40e994fd00667537e">neorv32_onewire.h</a></li> +<li>neorv32_onewire_read_byte_get()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a4c7eec15c095c97c939163f631f51dab">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a4c7eec15c095c97c939163f631f51dab">neorv32_onewire.h</a></li> +<li>neorv32_onewire_reset()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a3072f7167831edc95dee44ecfef6a0d4">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a3072f7167831edc95dee44ecfef6a0d4">neorv32_onewire.h</a></li> +<li>neorv32_onewire_reset_blocking()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#af8ca6be495176797b7da3857e2f794f9">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#af8ca6be495176797b7da3857e2f794f9">neorv32_onewire.h</a></li> +<li>neorv32_onewire_reset_get_presence()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a43eb8a08eeaa83e3d7e9aa5058a4269f">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a43eb8a08eeaa83e3d7e9aa5058a4269f">neorv32_onewire.h</a></li> +<li>neorv32_onewire_sense()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a122531c7154126858c46d89e003d838d">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a122531c7154126858c46d89e003d838d">neorv32_onewire.h</a></li> +<li>neorv32_onewire_setup()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a224005037387484dfa510a1355a62828">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a224005037387484dfa510a1355a62828">neorv32_onewire.h</a></li> +<li>neorv32_onewire_write_bit()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a49d0a2a386f129fd2f4fed880bba31d4">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a49d0a2a386f129fd2f4fed880bba31d4">neorv32_onewire.h</a></li> +<li>neorv32_onewire_write_bit_blocking()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a6f7b6690a2437e0b574a8a9a23dc0eaa">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a6f7b6690a2437e0b574a8a9a23dc0eaa">neorv32_onewire.h</a></li> +<li>neorv32_onewire_write_byte()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#a23b96b68c3214b188525eb102cafb620">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#a23b96b68c3214b188525eb102cafb620">neorv32_onewire.h</a></li> +<li>neorv32_onewire_write_byte_blocking()&#160;:&#160;<a class="el" href="neorv32__onewire_8c.html#ac78557c77482b59394677f42fda4fdf1">neorv32_onewire.c</a>, <a class="el" href="neorv32__onewire_8h.html#ac78557c77482b59394677f42fda4fdf1">neorv32_onewire.h</a></li> +<li>NEORV32_PMP_MODES_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5">neorv32_cpu_csr.h</a></li> +<li>NEORV32_PMPCFG_ATTRIBUTES_enum&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930ea">neorv32_cpu_csr.h</a></li> +<li>neorv32_pmw_get_num_channels()&#160;:&#160;<a class="el" href="neorv32__pwm_8c.html#a43d8a47dc79ebac24c8a7d2d8247d2a5">neorv32_pwm.c</a>, <a class="el" href="neorv32__pwm_8h.html#a43d8a47dc79ebac24c8a7d2d8247d2a5">neorv32_pwm.h</a></li> +<li>NEORV32_PWM&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#ad4cb534c29e26fa56c10bef7afab8f51">neorv32_pwm.h</a></li> +<li>neorv32_pwm_available()&#160;:&#160;<a class="el" href="neorv32__pwm_8c.html#afb12c860b2f7fa6cd1e069ea540da41c">neorv32_pwm.c</a>, <a class="el" href="neorv32__pwm_8h.html#afb12c860b2f7fa6cd1e069ea540da41c">neorv32_pwm.h</a></li> +<li>NEORV32_PWM_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#afef7a6b121a788560b29e2ee2a58c725">neorv32.h</a></li> +<li>neorv32_pwm_ch_disable()&#160;:&#160;<a class="el" href="neorv32__pwm_8c.html#a7bc39afa807b7c2e06d6fd8b4dc7506c">neorv32_pwm.c</a>, <a class="el" href="neorv32__pwm_8h.html#a7bc39afa807b7c2e06d6fd8b4dc7506c">neorv32_pwm.h</a></li> +<li>neorv32_pwm_ch_enable()&#160;:&#160;<a class="el" href="neorv32__pwm_8c.html#af00e67388ef9186e051e518883ad9a40">neorv32_pwm.c</a>, <a class="el" href="neorv32__pwm_8h.html#af00e67388ef9186e051e518883ad9a40">neorv32_pwm.h</a></li> +<li>neorv32_pwm_ch_set_clock()&#160;:&#160;<a class="el" href="neorv32__pwm_8c.html#a784672443179a7c1e604f23854e001f4">neorv32_pwm.c</a>, <a class="el" href="neorv32__pwm_8h.html#a784672443179a7c1e604f23854e001f4">neorv32_pwm.h</a></li> +<li>neorv32_pwm_ch_set_duty()&#160;:&#160;<a class="el" href="neorv32__pwm_8c.html#a518bad33405039fadd668d16276acb14">neorv32_pwm.c</a>, <a class="el" href="neorv32__pwm_8h.html#a518bad33405039fadd668d16276acb14">neorv32_pwm.h</a></li> +<li>neorv32_rte_context_get()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a65e71acc8916b42b59dc2cf6bba30ba3">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a65e71acc8916b42b59dc2cf6bba30ba3">neorv32_rte.h</a></li> +<li>neorv32_rte_context_put()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#ae13a9c1fd59ad71afb0d47cf9a0b303e">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#ae13a9c1fd59ad71afb0d47cf9a0b303e">neorv32_rte.h</a></li> +<li>neorv32_rte_core()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#ad6ab21f2218a3e88e0cc50d0643dafad">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#ad6ab21f2218a3e88e0cc50d0643dafad">neorv32_rte.h</a></li> +<li>neorv32_rte_debug_handler()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a65422bb44f1e7bc011e9bfc5d8451ebe">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a65422bb44f1e7bc011e9bfc5d8451ebe">neorv32_rte.h</a></li> +<li>neorv32_rte_handler_install()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a2cf31cfa569a03a20d554b6400c4c5e2">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a2cf31cfa569a03a20d554b6400c4c5e2">neorv32_rte.h</a></li> +<li>neorv32_rte_handler_uninstall()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a10fde6229bf391e46148405616404a65">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a10fde6229bf391e46148405616404a65">neorv32_rte.h</a></li> +<li>NEORV32_RTE_NUM_TRAPS&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad14a1ca41df1e9300bfd01aef07dce59">neorv32_rte.h</a></li> +<li>neorv32_rte_print_about()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#aa442c0e39f9156a131c3432fda587692">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#aa442c0e39f9156a131c3432fda587692">neorv32_rte.h</a></li> +<li>neorv32_rte_print_hw_config()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a05e8304963e402d228a76aff1868771c">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a05e8304963e402d228a76aff1868771c">neorv32_rte.h</a></li> +<li>neorv32_rte_print_hw_version()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#aad6f5256a265807c4cde163bcba8dae9">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#aad6f5256a265807c4cde163bcba8dae9">neorv32_rte.h</a></li> +<li>neorv32_rte_print_license()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#acd96aa73eebe6d4bbc9aabe1230cbabc">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#acd96aa73eebe6d4bbc9aabe1230cbabc">neorv32_rte.h</a></li> +<li>neorv32_rte_print_logo()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a16df1b48f2e1258a51d3bb7f49531cf3">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a16df1b48f2e1258a51d3bb7f49531cf3">neorv32_rte.h</a></li> +<li>neorv32_rte_setup()&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a343e1913bdc37db9b168fb4def0e6170">neorv32_rte.c</a>, <a class="el" href="neorv32__rte_8h.html#a343e1913bdc37db9b168fb4def0e6170">neorv32_rte.h</a></li> +<li>NEORV32_RTE_TRAP_enum&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">neorv32_rte.h</a></li> +<li>NEORV32_SDI&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#afd0921633d6523d9b7235055e9bbf928">neorv32_sdi.h</a></li> +<li>neorv32_sdi_available()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a51412722efdb18cd09667622b215e825">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a51412722efdb18cd09667622b215e825">neorv32_sdi.h</a></li> +<li>NEORV32_SDI_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a9b316ec038bd94ada42c9dab57a0a3cb">neorv32.h</a></li> +<li>neorv32_sdi_check_cs()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a2636cf1959ce1f3eb4b77c00ca2e2707">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a2636cf1959ce1f3eb4b77c00ca2e2707">neorv32_sdi.h</a></li> +<li>NEORV32_SDI_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6">neorv32_sdi.h</a></li> +<li>neorv32_sdi_disable()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a8bd54bca8aea6147651c8115ee616f54">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a8bd54bca8aea6147651c8115ee616f54">neorv32_sdi.h</a></li> +<li>neorv32_sdi_enable()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a5d68b9b1642baf3519076e55a22a8f61">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a5d68b9b1642baf3519076e55a22a8f61">neorv32_sdi.h</a></li> +<li>neorv32_sdi_get()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a4d54ce22ec97eb83da118439576e3277">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a4d54ce22ec97eb83da118439576e3277">neorv32_sdi.h</a></li> +<li>neorv32_sdi_get_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a7390faeb01b4de3dd5ac18335736b90c">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a7390faeb01b4de3dd5ac18335736b90c">neorv32_sdi.h</a></li> +<li>neorv32_sdi_put()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#ac7a262d16c42bbac27723ff779545569">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#ac7a262d16c42bbac27723ff779545569">neorv32_sdi.h</a></li> +<li>neorv32_sdi_setup()&#160;:&#160;<a class="el" href="neorv32__sdi_8c.html#a3246118dc0d7e1f61bc2485bbab44149">neorv32_sdi.c</a>, <a class="el" href="neorv32__sdi_8h.html#a3246118dc0d7e1f61bc2485bbab44149">neorv32_sdi.h</a></li> +<li>NEORV32_SLINK&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#a6380d894432de119a20993096db534df">neorv32_slink.h</a></li> +<li>neorv32_slink_available()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#aaf0f7bc96b797e819ccaae94292d9ddb">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#aaf0f7bc96b797e819ccaae94292d9ddb">neorv32_slink.h</a></li> +<li>NEORV32_SLINK_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab5e6dc57886cd5ed98b86f22fc37d7cc">neorv32.h</a></li> +<li>neorv32_slink_check_last()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#a3e02c558548c1c6178c49adee9a007f7">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#a3e02c558548c1c6178c49adee9a007f7">neorv32_slink.h</a></li> +<li>NEORV32_SLINK_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1">neorv32_slink.h</a></li> +<li>neorv32_slink_get()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#ace319592c12dc6a0fe1b7dd66bdf9284">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#ace319592c12dc6a0fe1b7dd66bdf9284">neorv32_slink.h</a></li> +<li>neorv32_slink_get_rx_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#a575c7663ca0bd07c95b1d45152a3ddf8">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#a575c7663ca0bd07c95b1d45152a3ddf8">neorv32_slink.h</a></li> +<li>neorv32_slink_get_src()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#a1a9269f42552a849450aecd99f7ec7a0">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#a1a9269f42552a849450aecd99f7ec7a0">neorv32_slink.h</a></li> +<li>neorv32_slink_get_tx_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#aaf0d0d1b890353d4f3bf49450ec2fad2">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#aaf0d0d1b890353d4f3bf49450ec2fad2">neorv32_slink.h</a></li> +<li>neorv32_slink_put()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#aaa9fdb9cbfa7888e92790ab65431d21d">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#aaa9fdb9cbfa7888e92790ab65431d21d">neorv32_slink.h</a></li> +<li>neorv32_slink_put_last()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#a2136bc0b12ee2e6703e84a6417a1e8eb">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#a2136bc0b12ee2e6703e84a6417a1e8eb">neorv32_slink.h</a></li> +<li>NEORV32_SLINK_ROUTE_enum&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45">neorv32_slink.h</a></li> +<li>neorv32_slink_rx_clear()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#ad149fea81e6d28f77450b8ba50cf706e">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#ad149fea81e6d28f77450b8ba50cf706e">neorv32_slink.h</a></li> +<li>neorv32_slink_rx_status()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#ad57fc0941fe32e8bf423ce3e57e2c10a">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#ad57fc0941fe32e8bf423ce3e57e2c10a">neorv32_slink.h</a></li> +<li>neorv32_slink_set_dst()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc">neorv32_slink.h</a></li> +<li>neorv32_slink_setup()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#a8f0b4a768f53a72a5c16034e160ce321">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#a8f0b4a768f53a72a5c16034e160ce321">neorv32_slink.h</a></li> +<li>NEORV32_SLINK_STATUS_enum&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bf">neorv32_slink.h</a></li> +<li>neorv32_slink_tx_clear()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#ac7484e9e3848f94efe016dd064f6a57f">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#ac7484e9e3848f94efe016dd064f6a57f">neorv32_slink.h</a></li> +<li>neorv32_slink_tx_status()&#160;:&#160;<a class="el" href="neorv32__slink_8c.html#ad0252e7ae915e5840cd17e8c52e94a1c">neorv32_slink.c</a>, <a class="el" href="neorv32__slink_8h.html#ad0252e7ae915e5840cd17e8c52e94a1c">neorv32_slink.h</a></li> +<li>NEORV32_SPI&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#a5f3afc4e268670c54d90df67fa38ca22">neorv32_spi.h</a></li> +<li>neorv32_spi_available()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a7266ee439d0ec11c5cedd4bf1a258272">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a7266ee439d0ec11c5cedd4bf1a258272">neorv32_spi.h</a></li> +<li>NEORV32_SPI_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#aa466dc5eace7351bd438606f0f7475a7">neorv32.h</a></li> +<li>neorv32_spi_busy()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a332c7a1be511812ac0a2b102c165398a">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a332c7a1be511812ac0a2b102c165398a">neorv32_spi.h</a></li> +<li>neorv32_spi_check_cs()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a82bb4d4c222b2bdc57e917c348481501">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a82bb4d4c222b2bdc57e917c348481501">neorv32_spi.h</a></li> +<li>neorv32_spi_cs_dis()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#aa10ec90ccba6325eeeebb8f6f298d30c">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#aa10ec90ccba6325eeeebb8f6f298d30c">neorv32_spi.h</a></li> +<li>neorv32_spi_cs_dis_nonblocking()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#ad8dd1b5a85a9daef4c8c21c9990884c1">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#ad8dd1b5a85a9daef4c8c21c9990884c1">neorv32_spi.h</a></li> +<li>neorv32_spi_cs_en()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a737961d040ac09567350f89034f9e122">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a737961d040ac09567350f89034f9e122">neorv32_spi.h</a></li> +<li>neorv32_spi_cs_en_nonblocking()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a97b5536347a27b053f071ba49071ba6f">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a97b5536347a27b053f071ba49071ba6f">neorv32_spi.h</a></li> +<li>NEORV32_SPI_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3b">neorv32_spi.h</a></li> +<li>NEORV32_SPI_DATA_enum&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8">neorv32_spi.h</a></li> +<li>neorv32_spi_disable()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a817dd9a38bfceb2048e40874a83ba169">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a817dd9a38bfceb2048e40874a83ba169">neorv32_spi.h</a></li> +<li>neorv32_spi_enable()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a8fa25d144ccb20a2faf0450c8dddd16e">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a8fa25d144ccb20a2faf0450c8dddd16e">neorv32_spi.h</a></li> +<li>neorv32_spi_get_clock_speed()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a01c6b63d7349447e2277f2649c3c89f2">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a01c6b63d7349447e2277f2649c3c89f2">neorv32_spi.h</a></li> +<li>neorv32_spi_get_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#ae1c4da7e4dc2e42b04d7187f684f142c">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#ae1c4da7e4dc2e42b04d7187f684f142c">neorv32_spi.h</a></li> +<li>neorv32_spi_get_nonblocking()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#aad66fa8f8d1a92d4f355de7579bfbfd2">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#aad66fa8f8d1a92d4f355de7579bfbfd2">neorv32_spi.h</a></li> +<li>neorv32_spi_highspeed_disable()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a67e9717635e272bc0e04408135a2f04d">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a67e9717635e272bc0e04408135a2f04d">neorv32_spi.h</a></li> +<li>neorv32_spi_highspeed_enable()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#acf131faa3ad970c19a3cd8a47cb54f65">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#acf131faa3ad970c19a3cd8a47cb54f65">neorv32_spi.h</a></li> +<li>neorv32_spi_init()&#160;:&#160;<a class="el" href="neorv32__spi__irq_8c.html#a4aa4746fd210ecc0c3614089a6951ddf">neorv32_spi_irq.c</a>, <a class="el" href="neorv32__spi__irq_8h.html#a4aa4746fd210ecc0c3614089a6951ddf">neorv32_spi_irq.h</a></li> +<li>neorv32_spi_isr()&#160;:&#160;<a class="el" href="neorv32__spi__irq_8c.html#aa641816bb302df497664aa21ea69ed16">neorv32_spi_irq.c</a>, <a class="el" href="neorv32__spi__irq_8h.html#aa641816bb302df497664aa21ea69ed16">neorv32_spi_irq.h</a></li> +<li>neorv32_spi_put_nonblocking()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#aec8583e988789e846d21c2a35e6b06e7">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#aec8583e988789e846d21c2a35e6b06e7">neorv32_spi.h</a></li> +<li>neorv32_spi_rw()&#160;:&#160;<a class="el" href="neorv32__spi__irq_8c.html#a1f44ed849415d8e1d659c0485762c485">neorv32_spi_irq.c</a>, <a class="el" href="neorv32__spi__irq_8h.html#a1f44ed849415d8e1d659c0485762c485">neorv32_spi_irq.h</a></li> +<li>neorv32_spi_rw_busy()&#160;:&#160;<a class="el" href="neorv32__spi__irq_8c.html#a1863e19932bc6a79f2ca27d23eb74ef5">neorv32_spi_irq.c</a>, <a class="el" href="neorv32__spi__irq_8h.html#a1863e19932bc6a79f2ca27d23eb74ef5">neorv32_spi_irq.h</a></li> +<li>neorv32_spi_setup()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a7d8124d986b69210081df6f1aa653552">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a7d8124d986b69210081df6f1aa653552">neorv32_spi.h</a></li> +<li>neorv32_spi_trans()&#160;:&#160;<a class="el" href="neorv32__spi_8c.html#a7af79950eefc26e67a89bde02f255532">neorv32_spi.c</a>, <a class="el" href="neorv32__spi_8h.html#a7af79950eefc26e67a89bde02f255532">neorv32_spi.h</a></li> +<li>NEORV32_SYSINFO&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a140e23434ef7e85b2b38d8ae9695227b">neorv32_sysinfo.h</a></li> +<li>NEORV32_SYSINFO_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a5aa936f38782232c7ed3eab1283ee536">neorv32.h</a></li> +<li>NEORV32_SYSINFO_CACHE_enum&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1ea">neorv32_sysinfo.h</a></li> +<li>neorv32_sysinfo_get_clk()&#160;:&#160;<a class="el" href="neorv32__sysinfo_8c.html#a098105f8a133087f286c7010c5dec8dd">neorv32_sysinfo.c</a>, <a class="el" href="neorv32__sysinfo_8h.html#a098105f8a133087f286c7010c5dec8dd">neorv32_sysinfo.h</a></li> +<li>NEORV32_SYSINFO_MEM_enum&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5f">neorv32_sysinfo.h</a></li> +<li>neorv32_sysinfo_set_clk()&#160;:&#160;<a class="el" href="neorv32__sysinfo_8c.html#a9b1ca94e298533641547ee448e1c52b3">neorv32_sysinfo.c</a>, <a class="el" href="neorv32__sysinfo_8h.html#a9b1ca94e298533641547ee448e1c52b3">neorv32_sysinfo.h</a></li> +<li>NEORV32_SYSINFO_SOC_enum&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08">neorv32_sysinfo.h</a></li> +<li>NEORV32_TRNG&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a9794ff3746eb5321ad9c2bf522ea26dd">neorv32_trng.h</a></li> +<li>neorv32_trng_available()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#af0c4139ff68763623b3d658a8dd8b5ce">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#af0c4139ff68763623b3d658a8dd8b5ce">neorv32_trng.h</a></li> +<li>NEORV32_TRNG_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab4846cd153e8a23deec45d81cc8372a2">neorv32.h</a></li> +<li>neorv32_trng_check_sim_mode()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#aba36f08dd88f2f3e58353ae72eaa14f7">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#aba36f08dd88f2f3e58353ae72eaa14f7">neorv32_trng.h</a></li> +<li>NEORV32_TRNG_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1a">neorv32_trng.h</a></li> +<li>NEORV32_TRNG_DATA_enum&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2">neorv32_trng.h</a></li> +<li>neorv32_trng_disable()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#ae838bc980e28c300dc2c9c3f34a46bb8">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#ae838bc980e28c300dc2c9c3f34a46bb8">neorv32_trng.h</a></li> +<li>neorv32_trng_enable()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#af64df166369d79bf744de06c8a962304">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#af64df166369d79bf744de06c8a962304">neorv32_trng.h</a></li> +<li>neorv32_trng_fifo_clear()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#a87cfe338e2ff559f96c73f729465f967">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#a87cfe338e2ff559f96c73f729465f967">neorv32_trng.h</a></li> +<li>neorv32_trng_get()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#a9148bcb6a7c448c364e78fa98aac6985">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#a9148bcb6a7c448c364e78fa98aac6985">neorv32_trng.h</a></li> +<li>neorv32_trng_get_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__trng_8c.html#ad24e44372f4fd1ed29a6967dccab4fb0">neorv32_trng.c</a>, <a class="el" href="neorv32__trng_8h.html#ad24e44372f4fd1ed29a6967dccab4fb0">neorv32_trng.h</a></li> +<li>NEORV32_TWD&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#ac9995cfc63846945ac26992148cd9401">neorv32_twd.h</a></li> +<li>neorv32_twd_available()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#ae6392461557d300b3b9c1f8e63a7dcc7">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#ae6392461557d300b3b9c1f8e63a7dcc7">neorv32_twd.h</a></li> +<li>NEORV32_TWD_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a8ac9e39bd62e9c5d7bcde0d44716b958">neorv32.h</a></li> +<li>neorv32_twd_busy()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a90e8f83ff4f6f05a5aef0046e82dc908">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a90e8f83ff4f6f05a5aef0046e82dc908">neorv32_twd.h</a></li> +<li>neorv32_twd_clear_rx()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#ab12e92dfbe37710c12b44fed97c01c06">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#ab12e92dfbe37710c12b44fed97c01c06">neorv32_twd.h</a></li> +<li>neorv32_twd_clear_tx()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a38f7c54e2b356851f3b18011796f3902">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a38f7c54e2b356851f3b18011796f3902">neorv32_twd.h</a></li> +<li>NEORV32_TWD_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18">neorv32_twd.h</a></li> +<li>NEORV32_TWD_DATA_enum&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8">neorv32_twd.h</a></li> +<li>neorv32_twd_disable()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#af82c89d23e3fc3fbd61c750ecb25d0dc">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#af82c89d23e3fc3fbd61c750ecb25d0dc">neorv32_twd.h</a></li> +<li>neorv32_twd_enable()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a7fa01904130031ab2dee77b4058061c7">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a7fa01904130031ab2dee77b4058061c7">neorv32_twd.h</a></li> +<li>neorv32_twd_get()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a6382d25525ff9bb88e6df0802f0037e2">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a6382d25525ff9bb88e6df0802f0037e2">neorv32_twd.h</a></li> +<li>neorv32_twd_get_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a4fe22b79183dc7d07a1b84a70328a00b">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a4fe22b79183dc7d07a1b84a70328a00b">neorv32_twd.h</a></li> +<li>neorv32_twd_put()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a0cbf868493aa8931e5c5bc71e5b478a4">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a0cbf868493aa8931e5c5bc71e5b478a4">neorv32_twd.h</a></li> +<li>neorv32_twd_rx_available()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#af2b925dffe4e4d0f8412052b92281066">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#af2b925dffe4e4d0f8412052b92281066">neorv32_twd.h</a></li> +<li>neorv32_twd_rx_full()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a138bd6bdefed2a24b746ddb550a02407">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a138bd6bdefed2a24b746ddb550a02407">neorv32_twd.h</a></li> +<li>neorv32_twd_sense_scl()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a4d167a59c4297e0e93af5a74091bd752">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a4d167a59c4297e0e93af5a74091bd752">neorv32_twd.h</a></li> +<li>neorv32_twd_sense_sda()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#a6b728dd7e359c1f3ae170a4dae054a31">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#a6b728dd7e359c1f3ae170a4dae054a31">neorv32_twd.h</a></li> +<li>neorv32_twd_setup()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#ace89f57655c6aacf6e05a5b6a29a1616">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#ace89f57655c6aacf6e05a5b6a29a1616">neorv32_twd.h</a></li> +<li>neorv32_twd_tx_empty()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#ae106ee8a74649853eab1b2a07c2c0ede">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#ae106ee8a74649853eab1b2a07c2c0ede">neorv32_twd.h</a></li> +<li>neorv32_twd_tx_full()&#160;:&#160;<a class="el" href="neorv32__twd_8c.html#ac06102b8e4f692415ec91d37253a3118">neorv32_twd.c</a>, <a class="el" href="neorv32__twd_8h.html#ac06102b8e4f692415ec91d37253a3118">neorv32_twd.h</a></li> +<li>NEORV32_TWI&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a2769c2fe5e0de01b12fe4a5fad029768">neorv32_twi.h</a></li> +<li>neorv32_twi_available()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#aa2e01ebbc0c82d65ed4ded351f4d8711">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#aa2e01ebbc0c82d65ed4ded351f4d8711">neorv32_twi.h</a></li> +<li>NEORV32_TWI_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a4a741408a4bb0938e03b99555306db9c">neorv32.h</a></li> +<li>neorv32_twi_busy()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a4fff1ddade320f6cc568c6266f2c2acd">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a4fff1ddade320f6cc568c6266f2c2acd">neorv32_twi.h</a></li> +<li>NEORV32_TWI_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafa">neorv32_twi.h</a></li> +<li>NEORV32_TWI_DCMD_enum&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8">neorv32_twi.h</a></li> +<li>neorv32_twi_disable()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#ae5f31e737c7a6c3c86070ff34cb0d861">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#ae5f31e737c7a6c3c86070ff34cb0d861">neorv32_twi.h</a></li> +<li>neorv32_twi_enable()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a22717887cffff1e6830756bc73140e7b">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a22717887cffff1e6830756bc73140e7b">neorv32_twi.h</a></li> +<li>neorv32_twi_generate_start()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a633d460e4735eb369d74a834b03c8b78">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a633d460e4735eb369d74a834b03c8b78">neorv32_twi.h</a></li> +<li>neorv32_twi_generate_start_nonblocking()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#adbf2eaed0c76221da5c3091665fc885e">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#adbf2eaed0c76221da5c3091665fc885e">neorv32_twi.h</a></li> +<li>neorv32_twi_generate_stop()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#ad352447adcccccabd4e20577b34fbece">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#ad352447adcccccabd4e20577b34fbece">neorv32_twi.h</a></li> +<li>neorv32_twi_generate_stop_nonblocking()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#aa22430aab0a38d88cbd2c4220c573da0">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#aa22430aab0a38d88cbd2c4220c573da0">neorv32_twi.h</a></li> +<li>neorv32_twi_get()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a7735376d26560866b153ed205dfcb2ba">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a7735376d26560866b153ed205dfcb2ba">neorv32_twi.h</a></li> +<li>neorv32_twi_get_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2">neorv32_twi.h</a></li> +<li>neorv32_twi_send_nonblocking()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a28fc44cce5d28f6e8c32268b239b07d5">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a28fc44cce5d28f6e8c32268b239b07d5">neorv32_twi.h</a></li> +<li>neorv32_twi_sense_scl()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a71e204837e71ce8c18c66e2ef3e7d9ef">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a71e204837e71ce8c18c66e2ef3e7d9ef">neorv32_twi.h</a></li> +<li>neorv32_twi_sense_sda()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a7645e3ba5a92ea0fbe446dbaac33b363">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a7645e3ba5a92ea0fbe446dbaac33b363">neorv32_twi.h</a></li> +<li>neorv32_twi_setup()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#a7ea6f3509a7cf622234d4b83e33afbe3">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#a7ea6f3509a7cf622234d4b83e33afbe3">neorv32_twi.h</a></li> +<li>neorv32_twi_trans()&#160;:&#160;<a class="el" href="neorv32__twi_8c.html#ac7020f3379602f11c47ca16f1bd82f2e">neorv32_twi.c</a>, <a class="el" href="neorv32__twi_8h.html#ac7020f3379602f11c47ca16f1bd82f2e">neorv32_twi.h</a></li> +<li>NEORV32_UART0&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#a4c880a6b27e46f459e750425258b1bdb">neorv32_uart.h</a></li> +<li>NEORV32_UART0_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a000b37f710043fe21e49b2fdbc039d94">neorv32.h</a></li> +<li>NEORV32_UART1&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#aa2a9ded4523f001bf69935c80247fa2d">neorv32_uart.h</a></li> +<li>NEORV32_UART1_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a26a1defe18ce222b8b4ed1c760344700">neorv32.h</a></li> +<li>neorv32_uart_available()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#abef6415b0391dc055713404312196682">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#abef6415b0391dc055713404312196682">neorv32_uart.h</a></li> +<li>neorv32_uart_char_received()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#adedb0e07efb232717534017167a5be98">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#adedb0e07efb232717534017167a5be98">neorv32_uart.h</a></li> +<li>neorv32_uart_char_received_get()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#aa490df3a9bb2aa3215fa6fad34ffe7d1">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#aa490df3a9bb2aa3215fa6fad34ffe7d1">neorv32_uart.h</a></li> +<li>NEORV32_UART_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afc">neorv32_uart.h</a></li> +<li>NEORV32_UART_DATA_enum&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2">neorv32_uart.h</a></li> +<li>neorv32_uart_disable()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#ae18804ccd29ec2fd1cc06e9ce985b704">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#ae18804ccd29ec2fd1cc06e9ce985b704">neorv32_uart.h</a></li> +<li>neorv32_uart_enable()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#afa0533e81d53057c36f4997a2dbbe2bc">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#afa0533e81d53057c36f4997a2dbbe2bc">neorv32_uart.h</a></li> +<li>neorv32_uart_get_rx_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#af85fb929c912d3edef3d86ffa833982a">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#af85fb929c912d3edef3d86ffa833982a">neorv32_uart.h</a></li> +<li>neorv32_uart_get_tx_fifo_depth()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a031e3e27c8783c299623468020a22b0e">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a031e3e27c8783c299623468020a22b0e">neorv32_uart.h</a></li> +<li>neorv32_uart_getc()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a2efd432f63b8d36d44263d0b1f39a6dc">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a2efd432f63b8d36d44263d0b1f39a6dc">neorv32_uart.h</a></li> +<li>neorv32_uart_printf()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#ab8c1f9f451def9126ab2749d7bbe50d9">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#ab8c1f9f451def9126ab2749d7bbe50d9">neorv32_uart.h</a></li> +<li>neorv32_uart_putc()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a9bc7bb94a50b74e1145b78eec6094129">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a9bc7bb94a50b74e1145b78eec6094129">neorv32_uart.h</a></li> +<li>neorv32_uart_puts()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a45a07d5e71677162baaa1025759c67a2">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a45a07d5e71677162baaa1025759c67a2">neorv32_uart.h</a></li> +<li>neorv32_uart_rtscts_disable()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a7b2f924ef4554b1fa90433c38d97558d">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a7b2f924ef4554b1fa90433c38d97558d">neorv32_uart.h</a></li> +<li>neorv32_uart_rtscts_enable()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a734b610f4cd1b474d7763f9700a715ec">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a734b610f4cd1b474d7763f9700a715ec">neorv32_uart.h</a></li> +<li>neorv32_uart_rx_clear()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#afe0de59c14faff1e0c890d5465be25f0">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#afe0de59c14faff1e0c890d5465be25f0">neorv32_uart.h</a></li> +<li>neorv32_uart_scan()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#ac429964878bd6deab61d9ed8659bca75">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#ac429964878bd6deab61d9ed8659bca75">neorv32_uart.h</a></li> +<li>neorv32_uart_setup()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a9cdec36f2723c5373664022d1b68b841">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a9cdec36f2723c5373664022d1b68b841">neorv32_uart.h</a></li> +<li>neorv32_uart_tx_busy()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#aa7bef48a58e044c246b8c4ad32864502">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#aa7bef48a58e044c246b8c4ad32864502">neorv32_uart.h</a></li> +<li>neorv32_uart_tx_clear()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a27971954262a2fd1f21d3bf1ba27e87c">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a27971954262a2fd1f21d3bf1ba27e87c">neorv32_uart.h</a></li> +<li>neorv32_uart_vprintf()&#160;:&#160;<a class="el" href="neorv32__uart_8c.html#a8714cdb1c04d94bec322c6215ea10238">neorv32_uart.c</a>, <a class="el" href="neorv32__uart_8h.html#a8714cdb1c04d94bec322c6215ea10238">neorv32_uart.h</a></li> +<li>NEORV32_WDT&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a78615b08cd799063011606d084fef46c">neorv32_wdt.h</a></li> +<li>neorv32_wdt_available()&#160;:&#160;<a class="el" href="neorv32__wdt_8c.html#a459a918c5a86c0167e8c748352d39827">neorv32_wdt.c</a>, <a class="el" href="neorv32__wdt_8h.html#a459a918c5a86c0167e8c748352d39827">neorv32_wdt.h</a></li> +<li>NEORV32_WDT_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a3012986cdd5748ee96bcc74cd7108dea">neorv32.h</a></li> +<li>NEORV32_WDT_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23e">neorv32_wdt.h</a></li> +<li>neorv32_wdt_disable()&#160;:&#160;<a class="el" href="neorv32__wdt_8c.html#aba52520582392a671e2b717715a330b2">neorv32_wdt.c</a>, <a class="el" href="neorv32__wdt_8h.html#aba52520582392a671e2b717715a330b2">neorv32_wdt.h</a></li> +<li>neorv32_wdt_feed()&#160;:&#160;<a class="el" href="neorv32__wdt_8c.html#ae4e86c42ed45eefdec43d9ece08b98a4">neorv32_wdt.c</a>, <a class="el" href="neorv32__wdt_8h.html#ae4e86c42ed45eefdec43d9ece08b98a4">neorv32_wdt.h</a></li> +<li>neorv32_wdt_get_cause()&#160;:&#160;<a class="el" href="neorv32__wdt_8c.html#a80fa8d178d18c9b02d32d93e815b532e">neorv32_wdt.c</a>, <a class="el" href="neorv32__wdt_8h.html#a80fa8d178d18c9b02d32d93e815b532e">neorv32_wdt.h</a></li> +<li>NEORV32_WDT_RCAUSE_enum&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049">neorv32_wdt.h</a></li> +<li>neorv32_wdt_setup()&#160;:&#160;<a class="el" href="neorv32__wdt_8c.html#a2aa72608191d34ef41c5f545988ff400">neorv32_wdt.c</a>, <a class="el" href="neorv32__wdt_8h.html#a2aa72608191d34ef41c5f545988ff400">neorv32_wdt.h</a></li> +<li>NEORV32_XIP&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a3d6f138a347c16883b51069428eb7c1e">neorv32_xip.h</a></li> +<li>neorv32_xip_available()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#afe2e5682a26cafdb0585d2233bccc7c6">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#afe2e5682a26cafdb0585d2233bccc7c6">neorv32_xip.h</a></li> +<li>NEORV32_XIP_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#ae0978315beac8399f96f520bda81c7fe">neorv32.h</a></li> +<li>NEORV32_XIP_CTRL_enum&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceb">neorv32_xip.h</a></li> +<li>neorv32_xip_get_clock_speed()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#a88f728101e82939bf7f8b9ab5a904706">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#a88f728101e82939bf7f8b9ab5a904706">neorv32_xip.h</a></li> +<li>neorv32_xip_highspeed_disable()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#ad74f2842ed2251e3ae5c19e06dced0c3">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#ad74f2842ed2251e3ae5c19e06dced0c3">neorv32_xip.h</a></li> +<li>neorv32_xip_highspeed_enable()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#a6aef2ea29451ba2aa55160da777a5115">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#a6aef2ea29451ba2aa55160da777a5115">neorv32_xip.h</a></li> +<li>neorv32_xip_setup()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#a549d68abdf5a3d7484abe6d5370bb999">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#a549d68abdf5a3d7484abe6d5370bb999">neorv32_xip.h</a></li> +<li>neorv32_xip_spi_trans()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#a92f1446a3bb7fe6dee5dbed33882b223">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#a92f1446a3bb7fe6dee5dbed33882b223">neorv32_xip.h</a></li> +<li>neorv32_xip_start()&#160;:&#160;<a class="el" href="neorv32__xip_8c.html#a0ab2c36c973030a811e6d7abe0afc393">neorv32_xip.c</a>, <a class="el" href="neorv32__xip_8h.html#a0ab2c36c973030a811e6d7abe0afc393">neorv32_xip.h</a></li> +<li>NEORV32_XIRQ&#160;:&#160;<a class="el" href="neorv32__xirq_8h.html#a0c0886139e9837867202e5f6a83307c4">neorv32_xirq.h</a></li> +<li>neorv32_xirq_available()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#aaf30757d526030a8d81081915ab29a76">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#aaf30757d526030a8d81081915ab29a76">neorv32_xirq.h</a></li> +<li>NEORV32_XIRQ_BASE&#160;:&#160;<a class="el" href="neorv32_8h.html#a942a897be2d4ae6820bee0f7bb3a0ff1">neorv32.h</a></li> +<li>neorv32_xirq_channel_disable()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#ae17509ad0c828aa9b36747b253cdbf0a">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#ae17509ad0c828aa9b36747b253cdbf0a">neorv32_xirq.h</a></li> +<li>neorv32_xirq_channel_enable()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#abe63c0968c94b472082c8156a1a7db5c">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#abe63c0968c94b472082c8156a1a7db5c">neorv32_xirq.h</a></li> +<li>neorv32_xirq_get_num()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a717a8e34908cc01345e68920e76f229c">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#a717a8e34908cc01345e68920e76f229c">neorv32_xirq.h</a></li> +<li>neorv32_xirq_global_disable()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#ac64d3ff5619968499bccebebe6a6cab3">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#ac64d3ff5619968499bccebebe6a6cab3">neorv32_xirq.h</a></li> +<li>neorv32_xirq_global_enable()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a76468156ef52b371e06bc2ca8eddcd27">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#a76468156ef52b371e06bc2ca8eddcd27">neorv32_xirq.h</a></li> +<li>neorv32_xirq_install()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a9129984f91c02afafaa072a5d86f9876">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#a9129984f91c02afafaa072a5d86f9876">neorv32_xirq.h</a></li> +<li>neorv32_xirq_setup()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a9295997fce7114a8205325c4d75dd200">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#a9295997fce7114a8205325c4d75dd200">neorv32_xirq.h</a></li> +<li>neorv32_xirq_setup_trigger()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a0d137f09d1e7dcd31c157b856033ac42">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#a0d137f09d1e7dcd31c157b856033ac42">neorv32_xirq.h</a></li> +<li>neorv32_xirq_uninstall()&#160;:&#160;<a class="el" href="neorv32__xirq_8c.html#a49ae67d1d5066cd795149e96b81127f7">neorv32_xirq.c</a>, <a class="el" href="neorv32__xirq_8h.html#a49ae67d1d5066cd795149e96b81127f7">neorv32_xirq.h</a></li> +<li>NUM_CELLS_X&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a78c5b500f0f057bcaedf6fedeca7c537">main.c</a></li> +<li>NUM_CELLS_Y&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#aed77778557404b38bebb05b5830368b4">main.c</a></li> +<li>NUM_LEDS_24BIT&#160;:&#160;<a class="el" href="demo__neopixel_2main_8c.html#aa1dddb8d6b3b4d2f19afc3c09e2ff572">main.c</a></li> +<li>NUM_TEST_CASES&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_o.html b/sw/globals_o.html new file mode 100644 index 0000000000..d883c5ec6f --- /dev/null +++ b/sw/globals_o.html @@ -0,0 +1,121 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_o" name="index_o"></a>- o -</h3><ul> +<li>ONEWIRE_CTRL_BUSY&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_CLEAR&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831adfe5373712e0c02da3aa5dfd8ca5e51e">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_CLKDIV0&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_CLKDIV7&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a3903370331c6ae15cd37381bc64b6016">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a101cd15b58450d9740ab92bb5c40ba63">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a74d1259bee8e3e1d18cc69a2d8ce4749">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_SENSE&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6">neorv32_onewire.h</a></li> +<li>ONEWIRE_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a5db9e3557d447c62039ad3437caa9884">neorv32_onewire.h</a></li> +<li>ONEWIRE_DCMD_CMD_HI&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aeb1f95a9b6f3b4a295578e874a1ad5d0">neorv32_onewire.h</a></li> +<li>ONEWIRE_DCMD_CMD_LO&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26ac095ac82ef2be6e67b5c9f6b9f5c4379">neorv32_onewire.h</a></li> +<li>ONEWIRE_DCMD_DATA_LSB&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a035b3e4021a1959a7cbd8954e838c324">neorv32_onewire.h</a></li> +<li>ONEWIRE_DCMD_DATA_MSB&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a36fe4def67f02a3d06dbe47231d6f21d">neorv32_onewire.h</a></li> +<li>ONEWIRE_DCMD_PRESENCE&#160;:&#160;<a class="el" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aa4cd11972bbc09f7a7eab8e129b280b4">neorv32_onewire.h</a></li> +<li>ONEWIRE_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a8bb1918679e32e898af2d485cfa44afb">neorv32.h</a></li> +<li>ONEWIRE_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a3853ef999f99ca062e6025038811d0f0">neorv32.h</a></li> +<li>ONEWIRE_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a142f4a1c754edfab292706618d427b94">neorv32.h</a></li> +<li>ONEWIRE_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a3e7aaa405a7d1fcd71a36c4b6b5a4081">neorv32.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_p.html b/sw/globals_p.html new file mode 100644 index 0000000000..2ac6526da5 --- /dev/null +++ b/sw/globals_p.html @@ -0,0 +1,130 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_p" name="index_p"></a>- p -</h3><ul> +<li>plain_data_hw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#aee8dde13fe2f5ac52dd6075e2fe1eab5">main.c</a></li> +<li>plain_data_sw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a72ba1460776ad684028448ca51810bbe">main.c</a></li> +<li>PMP_NA4&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892">neorv32_cpu_csr.h</a></li> +<li>PMP_NAPOT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820">neorv32_cpu_csr.h</a></li> +<li>PMP_OFF&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4">neorv32_cpu_csr.h</a></li> +<li>PMP_TOR&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1">neorv32_cpu_csr.h</a></li> +<li>PMPCFG_A_LSB&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1">neorv32_cpu_csr.h</a></li> +<li>PMPCFG_A_MSB&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4">neorv32_cpu_csr.h</a></li> +<li>PMPCFG_L&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14">neorv32_cpu_csr.h</a></li> +<li>PMPCFG_R&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6">neorv32_cpu_csr.h</a></li> +<li>PMPCFG_W&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f">neorv32_cpu_csr.h</a></li> +<li>PMPCFG_X&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d">neorv32_cpu_csr.h</a></li> +<li>pop_count()&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#aac4bec7738b12f5a4b4d7a3a6cb1ab8d">main.c</a></li> +<li>PRINT_GETC&#160;:&#160;<a class="el" href="bootloader_8c.html#a999b04603115ce08b0cb33e333312480">bootloader.c</a></li> +<li>print_help()&#160;:&#160;<a class="el" href="bootloader_8c.html#a402ea961bfc2ffeee61e3a7c330b1559">bootloader.c</a></li> +<li>print_hex_byte()&#160;:&#160;<a class="el" href="demo__twi_2main_8c.html#a2ebc688bc1dad328693fc0974b378fa0">main.c</a></li> +<li>print_hex_word()&#160;:&#160;<a class="el" href="bootloader_8c.html#a70b7d5c3b3ae97e4e72e84c4bc28fb8a">bootloader.c</a></li> +<li>PRINT_PUTC&#160;:&#160;<a class="el" href="bootloader_8c.html#aa7afbe8348ebd1a876a4d247553292e9">bootloader.c</a></li> +<li>print_random_data()&#160;:&#160;<a class="el" href="demo__trng_2main_8c.html#a64205d97b57c99dc5e95b8621827f4a4">main.c</a></li> +<li>print_report()&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#a99377a057d14aaa9b45f8cab890e8cf7">main.c</a></li> +<li>PRINT_TEXT&#160;:&#160;<a class="el" href="bootloader_8c.html#a0e5a66f68ecc7a6f42088f349707e852">bootloader.c</a></li> +<li>print_universe()&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a9a455dea83a25f656fcc5217ad513dac">main.c</a></li> +<li>PRINT_XNUM&#160;:&#160;<a class="el" href="bootloader_8c.html#a2f5cc04cf9c85f5d2958b384e053053b">bootloader.c</a></li> +<li>PWM_CFG_CDIV_LSB&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175acc7e31e4b3f0e7ab0a0306a107109b4f">neorv32_pwm.h</a></li> +<li>PWM_CFG_CDIV_MSB&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a6f741e102b7e15e946714360e81f4bb2">neorv32_pwm.h</a></li> +<li>PWM_CFG_DUTY_LSB&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a9aa8249716b15c92368c93b36bf7db43">neorv32_pwm.h</a></li> +<li>PWM_CFG_DUTY_MSB&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175af5d9dcb5740c39cfe8f9bfb5c1b66341">neorv32_pwm.h</a></li> +<li>PWM_CFG_EN&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a2b766bfa9653705025b745e0809c432a">neorv32_pwm.h</a></li> +<li>PWM_CFG_PRSC_LSB&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aefe2211fe39acffb40ca738639b3d5f5">neorv32_pwm.h</a></li> +<li>PWM_CFG_PRSC_MSB&#160;:&#160;<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aa100b419699cd3c6787a9168a3ffec3d">neorv32_pwm.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_r.html b/sw/globals_r.html new file mode 100644 index 0000000000..d8193217b6 --- /dev/null +++ b/sw/globals_r.html @@ -0,0 +1,189 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_r" name="index_r"></a>- r -</h3><ul> +<li>ram_buffer&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#acc95e55a622d79c2a398397d1f9b8033">main.c</a></li> +<li>read_byte()&#160;:&#160;<a class="el" href="demo__onewire_2main_8c.html#a951a31029af34715f20856eb82432637">main.c</a></li> +<li>read_memory()&#160;:&#160;<a class="el" href="bus__explorer_2main_8c.html#afc9b1ab3db46eccf51d55c715fa2fbd4">main.c</a></li> +<li>repetition_count_test()&#160;:&#160;<a class="el" href="demo__trng_2main_8c.html#af37eae672fee5e81f00a1dbf51b7e417">main.c</a></li> +<li>riscv_emulate_fadds()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a9d676567276439875c9b1a15b892b555">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fclasss()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ae41a0bf9d28c35f4d6db7177ccf8ee06">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fcvt_sw()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0f2260b7b5793a95c49670379fc89617">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fcvt_swu()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a10a05bface37bff32c78ed0746845794">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fcvt_ws()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a292365fe41a7a661e61ae746306ba5e9">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fcvt_wus()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aad9fc7337e09081cf8c5bff8c28776c8">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fdivs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aeaf46a17b671278be2bf804159827a40">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_feqs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a7cb3c6570b911cd1dfb7b6e798cc1d21">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fles()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac5fdef0607602fa0bdb93b3535fd709e">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_flts()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2b802122d53a2ce517b3d39fec34d7e0">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fmadds()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a39212f2e2bb0f1752092a1732f93edf3">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fmaxs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af9b16a32d2bb13c8af5a678271d74889">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fmins()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a872cd30fb61190bd1ac719d25b01f5a3">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fmsubs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a05d0d5a8eb9422e93448efdeb679cabf">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fmuls()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ad43e8bdf4a6fbe229d22d24680f2be80">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fnmadds()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac8bb4450b39854ab07839e8f3505361c">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fnmsubs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a833638b346722dfa9d7d5c8d60998ec8">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fsgnjns()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0c985e626ed1d69314f4e3a0f1f58624">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fsgnjs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a12498d635f422f607b9b83facf3050dd">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fsgnjxs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a98caf7f310820052ae96ce0f45e6cd26">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fsqrts()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a1ceb3450f1e5c62d3079cd0e93c03501">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_emulate_fsubs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ace5d95b855ec1aa8eacdb5bbeea58197">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fadds()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a4b151fcb252fc7b894f247f5af6a1809">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fclasss()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3064a5c57b5f45d57c4d19eb798724f6">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fcvt_sw()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2103eb86052f6f8e24a8a848ffc6528a">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fcvt_swu()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a837b7330f9d568791687ae1384b8ef28">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fcvt_ws()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a523fa0fb6f521311c7f44692c586b3ee">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fcvt_wus()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3bc6ee3059a7e99b187c4ea5e217715b">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fdivs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ab6a9d15643e3085ff80c7883f183a42b">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_feqs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af4ddfae45807d4e41f758672ee14cf7b">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fles()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#adb83fab39d91e9291da2b7b07830cf82">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_flts()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a85aa18294a58997db2c324184196669c">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fmadds()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abbdb403cdeef414fa2f867b702d5f6eb">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fmaxs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87c1ce499e5e43554cb0f407cf0d3f7f">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fmins()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abf7f9e466906306d9755fd5bc7946e3c">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fmsubs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a03aba9c70c5286dacebaeb0ef5219cc9">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fmuls()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87a106e0d24a3183712e438d2bcbfa2d">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fnmadds()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa6473bc2d2721b57277b83a3ae0cfdb6">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fnmsubs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a639fc7bd75933888540e9cceb67221a0">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fsgnjns()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa4010772a986d03929ba7a43dfdcddd9">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fsgnjs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aff3acd90bcfbda96945f95a0e0bae12b">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fsgnjxs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2235d91cdac03bf8071003a5c59b9dd0">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fsqrts()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a17e2b7a399c956d548a609185084ea3c">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>riscv_intrinsic_fsubs()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af8473ba61abab8ae2e3ecbaf22d70e89">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>rte_service_handler()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a349743a03307abb5130a3e89d903971b">main.c</a></li> +<li>RTE_TRAP_BREAKPOINT&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_0&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_1&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_10&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_11&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_12&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_13&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_14&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_15&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_2&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_3&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_4&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_5&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_6&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_7&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_8&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308">neorv32_rte.h</a></li> +<li>RTE_TRAP_FIRQ_9&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76">neorv32_rte.h</a></li> +<li>RTE_TRAP_I_ACCESS&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4">neorv32_rte.h</a></li> +<li>RTE_TRAP_I_ILLEGAL&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2">neorv32_rte.h</a></li> +<li>RTE_TRAP_I_MISALIGNED&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81">neorv32_rte.h</a></li> +<li>RTE_TRAP_L_ACCESS&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab">neorv32_rte.h</a></li> +<li>RTE_TRAP_L_MISALIGNED&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f">neorv32_rte.h</a></li> +<li>RTE_TRAP_MEI&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff">neorv32_rte.h</a></li> +<li>RTE_TRAP_MENV_CALL&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d">neorv32_rte.h</a></li> +<li>RTE_TRAP_MSI&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174">neorv32_rte.h</a></li> +<li>RTE_TRAP_MTI&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff">neorv32_rte.h</a></li> +<li>RTE_TRAP_S_ACCESS&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7">neorv32_rte.h</a></li> +<li>RTE_TRAP_S_MISALIGNED&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232">neorv32_rte.h</a></li> +<li>RTE_TRAP_UENV_CALL&#160;:&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc">neorv32_rte.h</a></li> +<li>RUN_ADDSUB_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a2d16b9e484b7af7897c7ae83f945ceca">main.c</a></li> +<li>RUN_CLASSIFY_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a7e134923925fa24fd1090281c3a416c3">main.c</a></li> +<li>RUN_COMPARE_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a4ee0f6d28896a97d2c0cad866e77b874">main.c</a></li> +<li>RUN_CONV_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#aa3b6c4d49be7372de9e771a0475306ac">main.c</a></li> +<li>RUN_CSR_TESTS&#160;:&#160;<a class="el" href="floating__point__test_2main_8c.html#a7ec330b668b5b24d666d7769ccecfee3">main.c</a></li> +<li>RUN_EXC_TESTS&#160;:&#160;<a class="el" href="floating__point__test_2main_8c.html#a1a1af220e72c69b03d13b2df53650e10">main.c</a></li> +<li>RUN_MINMAX_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#aed386f612417aeeeac8b08db27d515e4">main.c</a></li> +<li>RUN_MUL_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a97323ecaf1ae85e68a736b06bc3b58f8">main.c</a></li> +<li>RUN_SGNINJ_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a94f0b0908f48f383145ed61ef8eb0713">main.c</a></li> +<li>RUN_TIMING_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a6969308bd3633928893a2666f1df66fc">main.c</a></li> +<li>RUN_UNAVAIL_TESTS&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a923de9c3e55322d85522740c0d0ff867">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_s.html b/sw/globals_s.html new file mode 100644 index 0000000000..42d431199d --- /dev/null +++ b/sw/globals_s.html @@ -0,0 +1,291 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_s" name="index_s"></a>- s -</h3><ul> +<li>save_exe()&#160;:&#160;<a class="el" href="bootloader_8c.html#ababfffe8e7036179e150ad3b9bda3a74">bootloader.c</a></li> +<li>scan_bus()&#160;:&#160;<a class="el" href="demo__onewire_2main_8c.html#ac07c9cfd80ac2e24be9dac6cf943b7de">main.c</a></li> +<li>scan_twi()&#160;:&#160;<a class="el" href="demo__twi_2main_8c.html#aace46ee34e954f9ebee5873beb0785f1">main.c</a></li> +<li>SDI_CTRL_CS_ACTIVE&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63">neorv32_sdi.h</a></li> +<li>SDI_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809">neorv32_sdi.h</a></li> +<li>SDI_CTRL_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4">neorv32_sdi.h</a></li> +<li>SDI_CTRL_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716">neorv32_sdi.h</a></li> +<li>SDI_CTRL_IRQ_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0">neorv32_sdi.h</a></li> +<li>SDI_CTRL_IRQ_RX_FULL&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d">neorv32_sdi.h</a></li> +<li>SDI_CTRL_IRQ_RX_HALF&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281">neorv32_sdi.h</a></li> +<li>SDI_CTRL_IRQ_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210">neorv32_sdi.h</a></li> +<li>SDI_CTRL_IRQ_TX_NHALF&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed">neorv32_sdi.h</a></li> +<li>SDI_CTRL_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0">neorv32_sdi.h</a></li> +<li>SDI_CTRL_RX_FULL&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a">neorv32_sdi.h</a></li> +<li>SDI_CTRL_RX_HALF&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4">neorv32_sdi.h</a></li> +<li>SDI_CTRL_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8">neorv32_sdi.h</a></li> +<li>SDI_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a">neorv32_sdi.h</a></li> +<li>SDI_CTRL_TX_NHALF&#160;:&#160;<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9">neorv32_sdi.h</a></li> +<li>SDI_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a30cf20b6d704c50cc5c46238bb43646f">neorv32.h</a></li> +<li>SDI_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a68611c0dfbe331739eff10230ac3fede">neorv32.h</a></li> +<li>sdi_get()&#160;:&#160;<a class="el" href="demo__sdi_2main_8c.html#aa25f620a5631e862252be1d5429e8585">main.c</a></li> +<li>sdi_put()&#160;:&#160;<a class="el" href="demo__sdi_2main_8c.html#ae3dc843520a800d7ba2b5d6be03d9c3d">main.c</a></li> +<li>SDI_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#aa0ff72ea560d7e1462787dc31bd467cf">neorv32.h</a></li> +<li>SDI_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a68925ca3f482f148caedd36118fd8d79">neorv32.h</a></li> +<li>send_twi()&#160;:&#160;<a class="el" href="demo__twi_2main_8c.html#aa94edd4f55a3ac18913f661f4bc16fb1">main.c</a></li> +<li>set_cell()&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#a5315eb56128f1ca40d9f4d477c345dd7">main.c</a></li> +<li>set_clock()&#160;:&#160;<a class="el" href="demo__twi_2main_8c.html#acee0c1770467f85a150d072ac7e1252f">main.c</a></li> +<li>setup_access()&#160;:&#160;<a class="el" href="bus__explorer_2main_8c.html#a2b6196c2e97a7f7702c0068780304ec1">main.c</a></li> +<li>show_1wire_commands()&#160;:&#160;<a class="el" href="demo__onewire_2main_8c.html#a29d5831498c2eaf0415d6f01efb9e7ce">main.c</a></li> +<li>show_arrays()&#160;:&#160;<a class="el" href="demo__dma_2main_8c.html#a8ad0c7bfd07edb6d42d86b166347206b">main.c</a></li> +<li>show_help()&#160;:&#160;<a class="el" href="demo__onewire_2main_8c.html#af25820ed386a66a0d6bb4dcdd2204704">main.c</a></li> +<li>SILENT_MODE&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013">main.c</a></li> +<li>sim_irq_trigger()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#ada24f2cd9d2d384265517f539711de62">main.c</a></li> +<li>SLINK_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a">neorv32_slink.h</a></li> +<li>SLINK_CTRL_IRQ_RX_FULL&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309">neorv32_slink.h</a></li> +<li>SLINK_CTRL_IRQ_RX_HALF&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392">neorv32_slink.h</a></li> +<li>SLINK_CTRL_IRQ_RX_NEMPTY&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854">neorv32_slink.h</a></li> +<li>SLINK_CTRL_IRQ_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88">neorv32_slink.h</a></li> +<li>SLINK_CTRL_IRQ_TX_NFULL&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa">neorv32_slink.h</a></li> +<li>SLINK_CTRL_IRQ_TX_NHALF&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_CLR&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_EMPTY&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_FULL&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_HALF&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e">neorv32_slink.h</a></li> +<li>SLINK_CTRL_RX_LAST&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa">neorv32_slink.h</a></li> +<li>SLINK_CTRL_TX_CLR&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f">neorv32_slink.h</a></li> +<li>SLINK_CTRL_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854">neorv32_slink.h</a></li> +<li>SLINK_CTRL_TX_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d">neorv32_slink.h</a></li> +<li>SLINK_CTRL_TX_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943">neorv32_slink.h</a></li> +<li>SLINK_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee">neorv32_slink.h</a></li> +<li>SLINK_CTRL_TX_HALF&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78">neorv32_slink.h</a></li> +<li>SLINK_FIFO_EMPTY&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c">neorv32_slink.h</a></li> +<li>SLINK_FIFO_FULL&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211">neorv32_slink.h</a></li> +<li>SLINK_FIFO_HALF&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9">neorv32_slink.h</a></li> +<li>slink_firq_handler()&#160;:&#160;<a class="el" href="demo__slink_2main_8c.html#a48c79e20ed1d4138d61b5593bdbe537a">main.c</a></li> +<li>SLINK_ROUTE_DST_LSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80">neorv32_slink.h</a></li> +<li>SLINK_ROUTE_DST_MSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1">neorv32_slink.h</a></li> +<li>SLINK_ROUTE_SRC_LSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2">neorv32_slink.h</a></li> +<li>SLINK_ROUTE_SRC_MSB&#160;:&#160;<a class="el" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983">neorv32_slink.h</a></li> +<li>SLINK_RX_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a8680ab1f14e512f21913572b35cbbf77">neorv32.h</a></li> +<li>SLINK_RX_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a5c48d5c4effb47cdb019aa2da7c84526">neorv32.h</a></li> +<li>SLINK_RX_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a4fff18e72d10377cdcb8d2ac0a617a5d">neorv32.h</a></li> +<li>SLINK_RX_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab1fdaedb2c4c8753ef3be87c82568dda">neorv32.h</a></li> +<li>SLINK_TX_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a232fe0eb5665373b6e2b464bdc228df2">neorv32.h</a></li> +<li>SLINK_TX_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#ac8e98b2af75c8e31f9815dee3dcbaf8e">neorv32.h</a></li> +<li>SLINK_TX_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a4e039d13b8d3f20453e1bb6b40512e43">neorv32.h</a></li> +<li>SLINK_TX_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a7fbe28901775e284d5700086f0b0bfcd">neorv32.h</a></li> +<li>SPI_BOOT_BASE_ADDR&#160;:&#160;<a class="el" href="bootloader_8c.html#a418adcf57119600c3580fd2297d28de0">bootloader.c</a></li> +<li>spi_cs()&#160;:&#160;<a class="el" href="demo__spi_2main_8c.html#a6f94991b8943a141ed4124585222470d">main.c</a></li> +<li>SPI_CS_ACTIVE&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580">neorv32_spi.h</a></li> +<li>SPI_CTRL_BUSY&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c">neorv32_spi.h</a></li> +<li>SPI_CTRL_CDIV0&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f">neorv32_spi.h</a></li> +<li>SPI_CTRL_CDIV1&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48">neorv32_spi.h</a></li> +<li>SPI_CTRL_CDIV2&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46">neorv32_spi.h</a></li> +<li>SPI_CTRL_CDIV3&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29">neorv32_spi.h</a></li> +<li>SPI_CTRL_CPHA&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0">neorv32_spi.h</a></li> +<li>SPI_CTRL_CPOL&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315">neorv32_spi.h</a></li> +<li>SPI_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea">neorv32_spi.h</a></li> +<li>SPI_CTRL_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb">neorv32_spi.h</a></li> +<li>SPI_CTRL_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed">neorv32_spi.h</a></li> +<li>SPI_CTRL_HIGHSPEED&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e">neorv32_spi.h</a></li> +<li>SPI_CTRL_IRQ_IDLE&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2">neorv32_spi.h</a></li> +<li>SPI_CTRL_IRQ_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0">neorv32_spi.h</a></li> +<li>SPI_CTRL_IRQ_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622">neorv32_spi.h</a></li> +<li>SPI_CTRL_IRQ_TX_HALF&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b">neorv32_spi.h</a></li> +<li>SPI_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e">neorv32_spi.h</a></li> +<li>SPI_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61">neorv32_spi.h</a></li> +<li>SPI_CTRL_PRSC2&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a">neorv32_spi.h</a></li> +<li>SPI_CTRL_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633">neorv32_spi.h</a></li> +<li>SPI_CTRL_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6">neorv32_spi.h</a></li> +<li>SPI_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905">neorv32_spi.h</a></li> +<li>SPI_CTRL_TX_NHALF&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4">neorv32_spi.h</a></li> +<li>SPI_DATA_CMD&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6">neorv32_spi.h</a></li> +<li>SPI_DATA_CSEN&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2">neorv32_spi.h</a></li> +<li>SPI_DATA_LSB&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4">neorv32_spi.h</a></li> +<li>SPI_DATA_MSB&#160;:&#160;<a class="el" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600">neorv32_spi.h</a></li> +<li>SPI_EN&#160;:&#160;<a class="el" href="bootloader_8c.html#aea75cf0485ce0a4ea320eba994859686">bootloader.c</a></li> +<li>SPI_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab8fcd3f80c373eb0f9d0fc6bf64ca626">neorv32.h</a></li> +<li>SPI_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#ab2f58f746febb29a9828447c733f8043">neorv32.h</a></li> +<li>SPI_FLASH_ADDR_BYTES&#160;:&#160;<a class="el" href="bootloader_8c.html#afe60a31c8561952f2f734fd67e6f7406">bootloader.c</a></li> +<li>spi_flash_check()&#160;:&#160;<a class="el" href="bootloader_8c.html#a1919595ed2232aebb3e774b916ab1662">bootloader.c</a></li> +<li>SPI_FLASH_CLK_PRSC&#160;:&#160;<a class="el" href="bootloader_8c.html#a709071a651213770b4efe6e6e055ec3d">bootloader.c</a></li> +<li>SPI_FLASH_CMD&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12e">main.c</a></li> +<li>SPI_FLASH_CMD_enum&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fed">bootloader.c</a></li> +<li>SPI_FLASH_CMD_PAGE_PROGRAM&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda31c8d698c551d081a0adeafb988ed49e">bootloader.c</a></li> +<li>SPI_FLASH_CMD_READ&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda6c1994ba2cfd97e0c77dcdf8bbdfdfa6">bootloader.c</a>, <a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea6c1994ba2cfd97e0c77dcdf8bbdfdfa6">main.c</a></li> +<li>SPI_FLASH_CMD_READ_STATUS&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda5fbc6551a10549b38e5ab4a76c38f214">bootloader.c</a>, <a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea5fbc6551a10549b38e5ab4a76c38f214">main.c</a></li> +<li>SPI_FLASH_CMD_SECTOR_ERASE&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedacd62141d6331f66e31bd252e2a92b836">bootloader.c</a>, <a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eacd62141d6331f66e31bd252e2a92b836">main.c</a></li> +<li>SPI_FLASH_CMD_WAKE&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda25bf16cd42b1fd1d95e0957b5be137d2">bootloader.c</a></li> +<li>SPI_FLASH_CMD_WRITE&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea528cebc54176f6f4c0a8f7f16fb28ca1">main.c</a></li> +<li>SPI_FLASH_CMD_WRITE_DISABLE&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedaa91d3c1d788b21fc798a5976c9f0da77">bootloader.c</a>, <a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eaa91d3c1d788b21fc798a5976c9f0da77">main.c</a></li> +<li>SPI_FLASH_CMD_WRITE_ENABLE&#160;:&#160;<a class="el" href="bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda152e091e93778f217f8b766298351513">bootloader.c</a>, <a class="el" href="demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea152e091e93778f217f8b766298351513">main.c</a></li> +<li>SPI_FLASH_CS&#160;:&#160;<a class="el" href="bootloader_8c.html#aa2132454aada86216009f3af206899b1">bootloader.c</a></li> +<li>spi_flash_erase_sector()&#160;:&#160;<a class="el" href="bootloader_8c.html#a0d877f0611dfcee32a483c8a3660eb1b">bootloader.c</a></li> +<li>spi_flash_read_byte()&#160;:&#160;<a class="el" href="bootloader_8c.html#a09e72e2debdd94929b2be4c7713d5e17">bootloader.c</a></li> +<li>spi_flash_read_status()&#160;:&#160;<a class="el" href="bootloader_8c.html#a005966cd0b32f3d5c041028c4b1c99f5">bootloader.c</a></li> +<li>SPI_FLASH_SECTOR_SIZE&#160;:&#160;<a class="el" href="bootloader_8c.html#a00924a8ba223b2ca0e7031259b292c84">bootloader.c</a></li> +<li>SPI_FLASH_SREG&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08e">main.c</a></li> +<li>SPI_FLASH_SREG_enum&#160;:&#160;<a class="el" href="bootloader_8c.html#a97299f563ebc1fca4c663b025a15136f">bootloader.c</a></li> +<li>SPI_FLASH_SREG_WEL&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08ea90f3b76faed13819ee13e574d1bff0c1">main.c</a></li> +<li>SPI_FLASH_SREG_WIP&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08eac84de63bbea3989c71bcc92d1d01cfa4">main.c</a></li> +<li>spi_flash_wakeup()&#160;:&#160;<a class="el" href="bootloader_8c.html#a1fbdccc60f05756213c9f3d64bac6d47">bootloader.c</a></li> +<li>spi_flash_write_addr()&#160;:&#160;<a class="el" href="bootloader_8c.html#a6a8caddda6e729d747726471b0b0f742">bootloader.c</a></li> +<li>spi_flash_write_byte()&#160;:&#160;<a class="el" href="bootloader_8c.html#a006c27b7d80897b78ab8cd83a391331f">bootloader.c</a></li> +<li>spi_flash_write_disable()&#160;:&#160;<a class="el" href="bootloader_8c.html#a82d26a2d6293ed7fd44a5c622adfbd45">bootloader.c</a></li> +<li>spi_flash_write_enable()&#160;:&#160;<a class="el" href="bootloader_8c.html#a9642e28ef2baec5b356ad9a70970d0e6">bootloader.c</a></li> +<li>spi_flash_write_word()&#160;:&#160;<a class="el" href="bootloader_8c.html#a717c72166af7c2ff7e73bd0b47128338">bootloader.c</a></li> +<li>spi_irq_handler()&#160;:&#160;<a class="el" href="demo__spi__irq_2main_8c.html#a7e266cc5247c999948dacc2102bd184a">main.c</a></li> +<li>SPI_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a4c1cd9ec9f80da2080e5d0d35cc524dd">neorv32.h</a></li> +<li>spi_setup()&#160;:&#160;<a class="el" href="demo__spi_2main_8c.html#a755192be6c3cf9904564b0eee99de445">main.c</a></li> +<li>spi_trans()&#160;:&#160;<a class="el" href="demo__spi_2main_8c.html#a13e10b34fbbffca6c31f0ce25b3f8432">main.c</a></li> +<li>SPI_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a83c212f1f5d8ee2a5921b3b2b19e9cc4">neorv32.h</a></li> +<li>start_app()&#160;:&#160;<a class="el" href="bootloader_8c.html#ae8de91537ac2782f0f0ebc3b2d4fb1df">bootloader.c</a></li> +<li>STATUS_LED_EN&#160;:&#160;<a class="el" href="bootloader_8c.html#aa9696325b450773c7a87c991abca3a54">bootloader.c</a></li> +<li>STATUS_LED_PIN&#160;:&#160;<a class="el" href="bootloader_8c.html#a089a71f836911c71b3f73fdd3b4b890b">bootloader.c</a></li> +<li>str&#160;:&#160;<a class="el" href="bootloader_8c.html#af6cf19e40e97afb5a7c29f7b439d091d">bootloader.c</a></li> +<li>subnormal_flush()&#160;:&#160;<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a791f880781a1bcea1861471be7d1a851">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>SYSINFO_CACHE_DATA_BLOCK_SIZE_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa8a2c7079b44f4255196de49d6d59afdb">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_DATA_BLOCK_SIZE_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaaec544d85ce3296ca9e97e833e20936e">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_DATA_NUM_BLOCKS_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabb743d3ca41bf44aa6ff188ec898cfb8">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_DATA_NUM_BLOCKS_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa5778928b290b3b1cba42412de4dabf96">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_INST_BLOCK_SIZE_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa1bdccae04b3bd84988297c16ffbefaf2">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_INST_BLOCK_SIZE_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf4a91f729e16adc72c2419d9ad3807e5">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_INST_NUM_BLOCKS_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabd13283ebd48dee48aee2cff3a560fe9">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_INST_NUM_BLOCKS_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa02f235d7d2fc30c4ae3a383a631d9060">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XBUS_BLOCK_SIZE_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa3f6e68cdf6bb641902a9a6d32c1f9d9e">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XBUS_BLOCK_SIZE_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa908c60a836b03129098cb70fe2a860a1">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XBUS_NUM_BLOCKS_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa73553a14d3425498be9d3802ca5f1459">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XBUS_NUM_BLOCKS_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaade7f119164ff2c3800b4464a65ca247b">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XIP_BLOCK_SIZE_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaea0a88adaa9d0b5e1f4e5cca630ed6f8">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XIP_BLOCK_SIZE_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa44d4d12c0395e924b8bf7dc40059bfba">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XIP_NUM_BLOCKS_0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa90ae265a72ea53d99b474798e721c317">neorv32_sysinfo.h</a></li> +<li>SYSINFO_CACHE_XIP_NUM_BLOCKS_3&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf88eacb3ed63d5a048a554927812460b">neorv32_sysinfo.h</a></li> +<li>SYSINFO_MEM_BOOT&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa0f4e1e1c9320949bdacd2bc7ba6179f7">neorv32_sysinfo.h</a></li> +<li>SYSINFO_MEM_DMEM&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa8a46c064e5a1339978a5fb1f41301894">neorv32_sysinfo.h</a></li> +<li>SYSINFO_MEM_IMEM&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa807d9e70e78e2ba3d5bfb902cc1cdc53">neorv32_sysinfo.h</a></li> +<li>SYSINFO_MEM_res&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa1671eeca5b3a6d1c8069658e0b7bc182">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_BOOTLOADER&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a6899a935ae8c4aef08d828f250342e9a">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_DCACHE&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a9823c2c0945997ed0d7e5eb473d81e41">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_ICACHE&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a124c4c2b101008b0e3f1d82efec11c26">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IMEM_ROM&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aaeafc2591f2cc95e9ff1fdee1e1c26e8">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_CFS&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ae725c2452eeb33e3230dcfb3450598e6">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_CLINT&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08adc914c065f5b51ae0881a6b62b54a3db">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_CRC&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ab89821e2c61ccb9db6324ee503f9dfa6">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_DMA&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a24658727efef9747414b5da8f26de66d">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_GPIO&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a62a2337b33a2f65b6efd5c91e699c2d1">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_GPTMR&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4aea6c006f9c999720b1dd6166a01afe">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_NEOLED&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a164c5c9dc702b4b5fc71110fc047c7f1">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_ONEWIRE&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aa8ec3b39b36f13ee4f97a72700e881a8">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_PWM&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a8dc202143c3b13850bccf16380466399">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_SDI&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a84088f6664a3dc19041dfad5b551ced9">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_SLINK&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a26b25f1b47f62e98ff0920544f56b57e">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_SPI&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4cf4b1a83a4b52efbf26eace21f5ab20">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_TRNG&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a44892276837b2b1bbe6ef9faa715ad5d">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_TWD&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3bbac94e7f1f021f14cefa929b79e9d9">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_TWI&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a179401244ac42bc4aac3108ca9bbb9c3">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_UART0&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a244710794e00c93e91a7f13d533cb139">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_UART1&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a52b0ca1ef2af5e9c9a0250440b2de9e5">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_WDT&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08afc964f39427cbc4090a960967eada7be">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_IO_XIRQ&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ad1b8d38e3715485242756cd37b7c1fe9">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_MEM_INT_DMEM&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a58ff6e112c09f798be014fdf84385135">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_MEM_INT_IMEM&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a1c2fbb0cc03a1df2e5e8a472f3f1ca57">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_OCD&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3e50b1c24eec0f1811d5630e6dd33e93">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_OCD_AUTH&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a161826adba27e19186c5005626c160b8">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_XBUS&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08add6721803c9d79f1e50248927ba30e16">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_XBUS_CACHE&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a579f26ab04d4fd9af8e419df465695ca">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_XIP&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a516a2e254ae63e017caefbeed20f54e9">neorv32_sysinfo.h</a></li> +<li>SYSINFO_SOC_XIP_CACHE&#160;:&#160;<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ac943fc33a2c1c25c3ab075228b87c0ef">neorv32_sysinfo.h</a></li> +<li>system_error()&#160;:&#160;<a class="el" href="bootloader_8c.html#a3bdfe2f25b1bfb42f80624ffff22ab01">bootloader.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_t.html b/sw/globals_t.html new file mode 100644 index 0000000000..a79e57fd98 --- /dev/null +++ b/sw/globals_t.html @@ -0,0 +1,196 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_t" name="index_t"></a>- t -</h3><ul> +<li>test_fail()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a1e0a5d63896fa26a6c25c0012fc6b938">main.c</a></li> +<li>test_ok()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#ae61d39109b2747429ec3a3c1b5533598">main.c</a></li> +<li>TESTCASES&#160;:&#160;<a class="el" href="demo__cfs_2main_8c.html#a906949f076e3e0d0082af3c3b1acb518">main.c</a></li> +<li>time_dec_hw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#acb6dd9d6ab74ac94f174a11ff3ad76af">main.c</a></li> +<li>time_dec_sw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a2d3853c367c3bce99e787c0df445030a">main.c</a></li> +<li>time_enc_hw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a094212e3731a9aecbd278fac243de6ec">main.c</a></li> +<li>time_enc_sw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#ad424a26173bd8d84b8d1cae94a55f248">main.c</a></li> +<li>TRAP_CODE_BREAKPOINT&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_0&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_1&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_10&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_11&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_12&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_13&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_14&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_15&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_2&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_3&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_4&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_5&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_6&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_7&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_8&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_FIRQ_9&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_I_ACCESS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_I_ILLEGAL&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_I_MISALIGNED&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_L_ACCESS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_L_MISALIGNED&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_MEI&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_MENV_CALL&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_MSI&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_MTI&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_S_ACCESS&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_S_MISALIGNED&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d">neorv32_cpu_csr.h</a></li> +<li>TRAP_CODE_UENV_CALL&#160;:&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02">neorv32_cpu_csr.h</a></li> +<li>trap_handler_emulate_amo()&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#aafcbf639ae4f66e5dfe9dea511a59f9d">main.c</a></li> +<li>trap_handler_emulate_unaligned_lw()&#160;:&#160;<a class="el" href="demo__emulate__unaligned_2main_8c.html#a07da42351229525998965b219e827460">main.c</a></li> +<li>trigger_module_dummy()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#ac91bfdd45696444673dc7d6b1b644082">main.c</a></li> +<li>TRNG_CTRL_AVAIL&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aac0a6c8451985a61dc522509ded22695f">neorv32_trng.h</a></li> +<li>TRNG_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d">neorv32_trng.h</a></li> +<li>TRNG_CTRL_FIFO_CLR&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac">neorv32_trng.h</a></li> +<li>TRNG_CTRL_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52">neorv32_trng.h</a></li> +<li>TRNG_CTRL_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5">neorv32_trng.h</a></li> +<li>TRNG_CTRL_SIM_MODE&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5">neorv32_trng.h</a></li> +<li>TRNG_DATA_LSB&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac2a7a79da7010342366ea97a2af2ebe6">neorv32_trng.h</a></li> +<li>TRNG_DATA_MSB&#160;:&#160;<a class="el" href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac73221cb67facda1db8fc9591e2f6364">neorv32_trng.h</a></li> +<li>TWD_CTRL_BUSY&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a71eb18275ffd7138251049c39294f4f3">neorv32_twd.h</a></li> +<li>TWD_CTRL_CLR_RX&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a1a951d8cf167b79bffdd8f19033ba657">neorv32_twd.h</a></li> +<li>TWD_CTRL_CLR_TX&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ab2d8eef73a9cc3de9bf99c5bf9c7114b">neorv32_twd.h</a></li> +<li>TWD_CTRL_DEV_ADDR0&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a3cc82a5ab8ad0ac4cff85b40d2ed6ffe">neorv32_twd.h</a></li> +<li>TWD_CTRL_DEV_ADDR6&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18abea8949a5164bd28f1504a34dadb17c2">neorv32_twd.h</a></li> +<li>TWD_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aded9f8ad7a2e0217e73d8484246157b2">neorv32_twd.h</a></li> +<li>TWD_CTRL_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a943bbe073ea36da264cb16f5a9f2acc9">neorv32_twd.h</a></li> +<li>TWD_CTRL_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af121649145e5403bf44246d416c26530">neorv32_twd.h</a></li> +<li>TWD_CTRL_FSEL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aef0fcc46f5595fa73fe547f0737f85e6">neorv32_twd.h</a></li> +<li>TWD_CTRL_IRQ_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad59552e7f3c7c747307f71e78ac1c00b">neorv32_twd.h</a></li> +<li>TWD_CTRL_IRQ_RX_FULL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af6d6b5bda034fc7af54036c95b94c01a">neorv32_twd.h</a></li> +<li>TWD_CTRL_IRQ_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a73bfda5ccd72ba0c8deed6d848013757">neorv32_twd.h</a></li> +<li>TWD_CTRL_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aaf31cc771b97f6b1f4d2da2347f43878">neorv32_twd.h</a></li> +<li>TWD_CTRL_RX_FULL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad1360350bafec23f10e28ffddefa625a">neorv32_twd.h</a></li> +<li>TWD_CTRL_SENSE_SCL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a8816adbecd0c929c88134e9e41efcf5c">neorv32_twd.h</a></li> +<li>TWD_CTRL_SENSE_SDA&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18acc0cdd72b63e7a029e97ae942754958c">neorv32_twd.h</a></li> +<li>TWD_CTRL_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a428ca1617d4bc287fbf03bfc74d12dfd">neorv32_twd.h</a></li> +<li>TWD_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a243f36178c91f94ccc848399a3b715b5">neorv32_twd.h</a></li> +<li>TWD_DATA_LSB&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a5f5e055b2d8ea968da1670251b70f824">neorv32_twd.h</a></li> +<li>TWD_DATA_MSB&#160;:&#160;<a class="el" href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a8f40d28bfc00d40ba03560bf44d47829">neorv32_twd.h</a></li> +<li>TWD_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a7cd6e1c5a9213256b277d8ef74bfb564">neorv32.h</a></li> +<li>TWD_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#ab61a869973c8d027360f9c1f47fb5b01">neorv32.h</a></li> +<li>TWD_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#ad00097ae9632a0f11c0dab96e272cff5">neorv32.h</a></li> +<li>TWD_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a3dc1579e0bd1718b8f24cda6b54ae43a">neorv32.h</a></li> +<li>TWI_CTRL_BUSY&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d">neorv32_twi.h</a></li> +<li>TWI_CTRL_CDIV0&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31">neorv32_twi.h</a></li> +<li>TWI_CTRL_CDIV1&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674">neorv32_twi.h</a></li> +<li>TWI_CTRL_CDIV2&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12">neorv32_twi.h</a></li> +<li>TWI_CTRL_CDIV3&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc">neorv32_twi.h</a></li> +<li>TWI_CTRL_CLKSTR&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48">neorv32_twi.h</a></li> +<li>TWI_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694">neorv32_twi.h</a></li> +<li>TWI_CTRL_FIFO_LSB&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb">neorv32_twi.h</a></li> +<li>TWI_CTRL_FIFO_MSB&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75">neorv32_twi.h</a></li> +<li>TWI_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9">neorv32_twi.h</a></li> +<li>TWI_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df">neorv32_twi.h</a></li> +<li>TWI_CTRL_PRSC2&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31">neorv32_twi.h</a></li> +<li>TWI_CTRL_RX_AVAIL&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671">neorv32_twi.h</a></li> +<li>TWI_CTRL_SENSE_SCL&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa51ea52c7ad18f1a8bcb6c2a979802107">neorv32_twi.h</a></li> +<li>TWI_CTRL_SENSE_SDA&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaf715b63c5c3edbd1e61766df53c2dd6c">neorv32_twi.h</a></li> +<li>TWI_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb">neorv32_twi.h</a></li> +<li>TWI_DCMD_ACK&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5">neorv32_twi.h</a></li> +<li>TWI_DCMD_CMD_HI&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e">neorv32_twi.h</a></li> +<li>TWI_DCMD_CMD_LO&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e">neorv32_twi.h</a></li> +<li>TWI_DCMD_LSB&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56">neorv32_twi.h</a></li> +<li>TWI_DCMD_MSB&#160;:&#160;<a class="el" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d">neorv32_twi.h</a></li> +<li>TWI_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a0913144fce247e24ccd0f178b9ac32b7">neorv32.h</a></li> +<li>TWI_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a48b80113ca718fbdc50d75e1ec96a1ff">neorv32.h</a></li> +<li>TWI_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a1ac29f2f7bace5ba92b2b68a4541a60c">neorv32.h</a></li> +<li>TWI_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a0afc1a759116d4d73a199ef769bced47">neorv32.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_u.html b/sw/globals_u.html new file mode 100644 index 0000000000..5cb91a8046 --- /dev/null +++ b/sw/globals_u.html @@ -0,0 +1,159 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_u" name="index_u"></a>- u -</h3><ul> +<li>UART0_RX_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a6b55ce6abe6b141000a6bb00949169e9">neorv32.h</a></li> +<li>UART0_RX_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a0b738b26abb2b951f1f5c5d9525d7701">neorv32.h</a></li> +<li>UART0_RX_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#ae8588cca20d5e36f74c5207c376389a1">neorv32.h</a></li> +<li>UART0_RX_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a7a849638eff31f2e1955bdc53d4fc84d">neorv32.h</a></li> +<li>UART0_TX_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#aff756a395771f22c5f412f23f177ea7d">neorv32.h</a></li> +<li>UART0_TX_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#addbe29166bb77bc045ad0e3db68e57e9">neorv32.h</a></li> +<li>UART0_TX_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a9dc37695ca169bc0eb93898e7aeeee58">neorv32.h</a></li> +<li>UART0_TX_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#ab50df423fdba86bb83bc5d90a4c3bb20">neorv32.h</a></li> +<li>UART1_RX_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a6c118c1784d8446360b00cde97437ca7">neorv32.h</a></li> +<li>UART1_RX_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a2e70d3a4e2973d224643813fcf315a20">neorv32.h</a></li> +<li>UART1_RX_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#ab1c351f5ea19ac9ea864155be9cc0b4b">neorv32.h</a></li> +<li>UART1_RX_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#ad0b9eb2ee1f411d7fccdf4fe263214e1">neorv32.h</a></li> +<li>UART1_TX_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#a0039bae3454a22e71d64e70d674f5d6a">neorv32.h</a></li> +<li>UART1_TX_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#ac4060532b7aa390623f54720460a2680">neorv32.h</a></li> +<li>UART1_TX_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a6af270d7ae8b1cde30e44eb9142491d3">neorv32.h</a></li> +<li>UART1_TX_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a4cc50287c7a53982761a8116396ff7dd">neorv32.h</a></li> +<li>UART_BAUD&#160;:&#160;<a class="el" href="bootloader_8c.html#a1fac9153314479ad0ad495d752f0224a">bootloader.c</a></li> +<li>UART_CTRL_BAUD0&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD1&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD2&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD3&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD4&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD5&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD6&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD7&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD8&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff">neorv32_uart.h</a></li> +<li>UART_CTRL_BAUD9&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e">neorv32_uart.h</a></li> +<li>UART_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2">neorv32_uart.h</a></li> +<li>UART_CTRL_HWFC_EN&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c">neorv32_uart.h</a></li> +<li>UART_CTRL_IRQ_RX_FULL&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a">neorv32_uart.h</a></li> +<li>UART_CTRL_IRQ_RX_HALF&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175">neorv32_uart.h</a></li> +<li>UART_CTRL_IRQ_RX_NEMPTY&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851">neorv32_uart.h</a></li> +<li>UART_CTRL_IRQ_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c">neorv32_uart.h</a></li> +<li>UART_CTRL_IRQ_TX_NHALF&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1">neorv32_uart.h</a></li> +<li>UART_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183">neorv32_uart.h</a></li> +<li>UART_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2">neorv32_uart.h</a></li> +<li>UART_CTRL_PRSC2&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70">neorv32_uart.h</a></li> +<li>UART_CTRL_RX_CLR&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33">neorv32_uart.h</a></li> +<li>UART_CTRL_RX_FULL&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166">neorv32_uart.h</a></li> +<li>UART_CTRL_RX_HALF&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247">neorv32_uart.h</a></li> +<li>UART_CTRL_RX_NEMPTY&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff">neorv32_uart.h</a></li> +<li>UART_CTRL_RX_OVER&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632">neorv32_uart.h</a></li> +<li>UART_CTRL_SIM_MODE&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1">neorv32_uart.h</a></li> +<li>UART_CTRL_TX_BUSY&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25">neorv32_uart.h</a></li> +<li>UART_CTRL_TX_CLR&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431">neorv32_uart.h</a></li> +<li>UART_CTRL_TX_EMPTY&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46">neorv32_uart.h</a></li> +<li>UART_CTRL_TX_FULL&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411">neorv32_uart.h</a></li> +<li>UART_CTRL_TX_NHALF&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9">neorv32_uart.h</a></li> +<li>UART_DATA_RTX_LSB&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195">neorv32_uart.h</a></li> +<li>UART_DATA_RTX_MSB&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb">neorv32_uart.h</a></li> +<li>UART_DATA_RX_FIFO_SIZE_LSB&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef">neorv32_uart.h</a></li> +<li>UART_DATA_RX_FIFO_SIZE_MSB&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225">neorv32_uart.h</a></li> +<li>UART_DATA_TX_FIFO_SIZE_LSB&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e">neorv32_uart.h</a></li> +<li>UART_DATA_TX_FIFO_SIZE_MSB&#160;:&#160;<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529">neorv32_uart.h</a></li> +<li>UART_EN&#160;:&#160;<a class="el" href="bootloader_8c.html#af1c2f103ac6e3183f08b39099fab2be9">bootloader.c</a></li> +<li>uart_get_executable()&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a0458656f8a108ff31f4bbbd005f029a0">main.c</a></li> +<li>uart_get_word()&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a3043d09bdc155f57f45cd91e0cd4d15b">main.c</a></li> +<li>UART_HW_HANDSHAKE_EN&#160;:&#160;<a class="el" href="bootloader_8c.html#a20e93d623ce07939c3fdd53898f9d583">bootloader.c</a></li> +<li>universe&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#ae0b5214cf0cd93049e9df8a95a09d826">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_v.html b/sw/globals_v.html new file mode 100644 index 0000000000..6975e89254 --- /dev/null +++ b/sw/globals_v.html @@ -0,0 +1,104 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_v" name="index_v"></a>- v -</h3><ul> +<li>vectored_global_handler()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a9504ca74fdb80711a88d2a16d4cb4cf4">main.c</a></li> +<li>vectored_irq_table()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a0d695ebfaae3b4614ddb62640cbf8b7b">main.c</a></li> +<li>vectored_mei_handler()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a1a455bede4ab48f32d3ed0868e398044">main.c</a></li> +<li>verify_result()&#160;:&#160;<a class="el" href="float__corner__test_2main_8c.html#a941ef8d24fd8e8fe4536626b2ce72410">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_vars.html b/sw/globals_vars.html new file mode 100644 index 0000000000..2e698e364e --- /dev/null +++ b/sw/globals_vars.html @@ -0,0 +1,120 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented variables with links to the documentation:</div><ul> +<li>__crt0_max_heap&#160;:&#160;<a class="el" href="neorv32_8h.html#aaa2cb9e7075a852870fd67eff2861b18">neorv32.h</a></li> +<li>__heap_end&#160;:&#160;<a class="el" href="neorv32_8h.html#ae6ef7c715931df8bdc331577da14119b">neorv32.h</a></li> +<li>__heap_start&#160;:&#160;<a class="el" href="neorv32_8h.html#a0eaa3dcfb1db0c72534046feb9fa9b60">neorv32.h</a></li> +<li>__neorv32_rte_vector_lut&#160;:&#160;<a class="el" href="neorv32__rte_8c.html#a2c8272b4628edddb943bcfad829b561a">neorv32_rte.c</a></li> +<li>amo_var&#160;:&#160;<a class="el" href="atomic__test_2main_8c.html#a9141e95a5f98420ddf8a43e6d20ff6dc">main.c</a></li> +<li>cypher_data_hw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a9ad2780a4cfe0d9cb4f1a846a92063ae">main.c</a></li> +<li>cypher_data_sw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a33b2d9298edf94c5961e67a59c371d00">main.c</a></li> +<li>data_block&#160;:&#160;<a class="el" href="demo__emulate__unaligned_2main_8c.html#a556f675911f865ead06c36072b1b9c3b">main.c</a></li> +<li>error_message&#160;:&#160;<a class="el" href="bootloader_8c.html#a6fea855ffe2fa0cd5ea9f98c0d5adc4d">bootloader.c</a></li> +<li>exe_available&#160;:&#160;<a class="el" href="bootloader_8c.html#a0f9fcfdf758260b9b79b6eda063dd87a">bootloader.c</a></li> +<li>getting_exe&#160;:&#160;<a class="el" href="bootloader_8c.html#a5fa6b109bf211d1768f84c9d38eef240">bootloader.c</a></li> +<li>input_data&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a2e2ccb9136736a673dbef71f207e97a0">main.c</a></li> +<li>key&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#ab5c498f9da12ab2d6ddc89bf4a46dec6">main.c</a></li> +<li>plain_data_hw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#aee8dde13fe2f5ac52dd6075e2fe1eab5">main.c</a></li> +<li>plain_data_sw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a72ba1460776ad684028448ca51810bbe">main.c</a></li> +<li>ram_buffer&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#acc95e55a622d79c2a398397d1f9b8033">main.c</a></li> +<li>time_dec_hw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#acb6dd9d6ab74ac94f174a11ff3ad76af">main.c</a></li> +<li>time_dec_sw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a2d3853c367c3bce99e787c0df445030a">main.c</a></li> +<li>time_enc_hw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a094212e3731a9aecbd278fac243de6ec">main.c</a></li> +<li>time_enc_sw&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#ad424a26173bd8d84b8d1cae94a55f248">main.c</a></li> +<li>universe&#160;:&#160;<a class="el" href="game__of__life_2main_8c.html#ae0b5214cf0cd93049e9df8a95a09d826">main.c</a></li> +<li>xtea_delta&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a26da64691624f3c899f2394a427d6593">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_w.html b/sw/globals_w.html new file mode 100644 index 0000000000..408a2c0353 --- /dev/null +++ b/sw/globals_w.html @@ -0,0 +1,117 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_w" name="index_w"></a>- w -</h3><ul> +<li>WDT_CTRL_DBEN&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9">neorv32_wdt.h</a></li> +<li>WDT_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f">neorv32_wdt.h</a></li> +<li>WDT_CTRL_LOCK&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3">neorv32_wdt.h</a></li> +<li>WDT_CTRL_RCAUSE_HI&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd">neorv32_wdt.h</a></li> +<li>WDT_CTRL_RCAUSE_LO&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779">neorv32_wdt.h</a></li> +<li>WDT_CTRL_SEN&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148">neorv32_wdt.h</a></li> +<li>WDT_CTRL_STRICT&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac">neorv32_wdt.h</a></li> +<li>WDT_CTRL_TIMEOUT_LSB&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609">neorv32_wdt.h</a></li> +<li>WDT_CTRL_TIMEOUT_MSB&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7">neorv32_wdt.h</a></li> +<li>WDT_PASSWORD&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#af2a2bd9c74bdba1b46bd92025bd00ab6">neorv32_wdt.h</a></li> +<li>WDT_RCAUSE_ACC&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a10999a782ffc2c26f601615f76121376">neorv32_wdt.h</a></li> +<li>WDT_RCAUSE_EXT&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0">neorv32_wdt.h</a></li> +<li>WDT_RCAUSE_OCD&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e">neorv32_wdt.h</a></li> +<li>WDT_RCAUSE_TMO&#160;:&#160;<a class="el" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a7273d24bb65d3f40c1d289ce5cbc1a40">neorv32_wdt.h</a></li> +<li>WDT_TIMEOUT_S&#160;:&#160;<a class="el" href="demo__wdt_2main_8c.html#a01af3905e60b1869f669315f4a1297f5">main.c</a></li> +<li>write_byte()&#160;:&#160;<a class="el" href="demo__onewire_2main_8c.html#a28283848f09bf8feebc860a51545f487">main.c</a></li> +<li>write_memory()&#160;:&#160;<a class="el" href="bus__explorer_2main_8c.html#a96729fb5279642ac56c8e6a513789b45">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/globals_x.html b/sw/globals_x.html new file mode 100644 index 0000000000..5dd9af0f13 --- /dev/null +++ b/sw/globals_x.html @@ -0,0 +1,144 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Globals</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> + +<h3><a id="index_x" name="index_x"></a>- x -</h3><ul> +<li>XIP_CLK_PRSC&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#aec72efe062dbdb149ae6d4f8b1be6793">main.c</a></li> +<li>XIP_CTRL_BURST_EN&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c">neorv32_xip.h</a></li> +<li>XIP_CTRL_CDIV0&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3">neorv32_xip.h</a></li> +<li>XIP_CTRL_CDIV1&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073">neorv32_xip.h</a></li> +<li>XIP_CTRL_CDIV2&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445">neorv32_xip.h</a></li> +<li>XIP_CTRL_CDIV3&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef">neorv32_xip.h</a></li> +<li>XIP_CTRL_CPHA&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d">neorv32_xip.h</a></li> +<li>XIP_CTRL_CPOL&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f">neorv32_xip.h</a></li> +<li>XIP_CTRL_EN&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045">neorv32_xip.h</a></li> +<li>XIP_CTRL_HIGHSPEED&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781">neorv32_xip.h</a></li> +<li>XIP_CTRL_PHY_BUSY&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5">neorv32_xip.h</a></li> +<li>XIP_CTRL_PRSC0&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d">neorv32_xip.h</a></li> +<li>XIP_CTRL_PRSC1&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af">neorv32_xip.h</a></li> +<li>XIP_CTRL_PRSC2&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086">neorv32_xip.h</a></li> +<li>XIP_CTRL_RD_CMD_LSB&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b">neorv32_xip.h</a></li> +<li>XIP_CTRL_RD_CMD_MSB&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7">neorv32_xip.h</a></li> +<li>XIP_CTRL_SPI_CSEN&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080">neorv32_xip.h</a></li> +<li>XIP_CTRL_SPI_NBYTES_LSB&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a">neorv32_xip.h</a></li> +<li>XIP_CTRL_SPI_NBYTES_MSB&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c">neorv32_xip.h</a></li> +<li>XIP_CTRL_XIP_ABYTES_LSB&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df">neorv32_xip.h</a></li> +<li>XIP_CTRL_XIP_ABYTES_MSB&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc">neorv32_xip.h</a></li> +<li>XIP_CTRL_XIP_BUSY&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a">neorv32_xip.h</a></li> +<li>XIP_CTRL_XIP_EN&#160;:&#160;<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937">neorv32_xip.h</a></li> +<li>XIP_EN&#160;:&#160;<a class="el" href="bootloader_8c.html#a2cf31934b909299fb93bb5eebdbc7c9e">bootloader.c</a></li> +<li>xip_flash_access_check()&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a23bd7bd7b0808d919fd09ac0a8258498">main.c</a></li> +<li>xip_flash_erase_sector()&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a9e0b2714126b6699ddb65485c93293e4">main.c</a></li> +<li>xip_flash_program()&#160;:&#160;<a class="el" href="demo__xip_2main_8c.html#a4ddfa8fdc072cadeef18a4a10bc8b174">main.c</a></li> +<li>XIP_MEM_BASE_ADDRESS&#160;:&#160;<a class="el" href="neorv32_8h.html#aa01bea676e878a9e87ca10ce2d91e51f">neorv32.h</a></li> +<li>XIRQ_FIRQ_ENABLE&#160;:&#160;<a class="el" href="neorv32_8h.html#afe0cb262d517c7da73d6b5dc78886334">neorv32.h</a></li> +<li>XIRQ_FIRQ_PENDING&#160;:&#160;<a class="el" href="neorv32_8h.html#a866768963f8648363dce40de9f34d61b">neorv32.h</a></li> +<li>xirq_handler_ch0()&#160;:&#160;<a class="el" href="demo__xirq_2main_8c.html#a8874ccfc0b56171c359b5c2ceaf2bd80">main.c</a></li> +<li>xirq_handler_ch1()&#160;:&#160;<a class="el" href="demo__xirq_2main_8c.html#abfe0c0bc47a683ba55df2aed63a12d4b">main.c</a></li> +<li>xirq_handler_ch2()&#160;:&#160;<a class="el" href="demo__xirq_2main_8c.html#ae8e3b3236aa2303c2b5e6e421b72cf73">main.c</a></li> +<li>xirq_handler_ch3()&#160;:&#160;<a class="el" href="demo__xirq_2main_8c.html#a99e9ae3088f39995c852b2c53ec21266">main.c</a></li> +<li>XIRQ_RTE_ID&#160;:&#160;<a class="el" href="neorv32_8h.html#a95387d3482ec8e5c1d734805fdf64fa5">neorv32.h</a></li> +<li>XIRQ_TRAP_CODE&#160;:&#160;<a class="el" href="neorv32_8h.html#a16b9a7444833b5581df073661deb8f3a">neorv32.h</a></li> +<li>xirq_trap_handler0()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#aa4fe70578c4dccabe1e31fae941378cb">main.c</a></li> +<li>xirq_trap_handler1()&#160;:&#160;<a class="el" href="processor__check_2main_8c.html#a277cb06ef74e4cfe1ef783069f9b6527">main.c</a></li> +<li>XIRQ_TRIGGER_enum&#160;:&#160;<a class="el" href="neorv32__xirq_8h.html#a19aaba6e0cfedfee3cf96f3ea5323151">neorv32_xirq.h</a></li> +<li>xstr&#160;:&#160;<a class="el" href="bootloader_8c.html#aff6b53dd58cea43d24393a9a2f79e772">bootloader.c</a></li> +<li>xtea_delta&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a26da64691624f3c899f2394a427d6593">main.c</a></li> +<li>XTEA_ROUNDS&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a36801eebef583b6c3438709144834e3e">main.c</a></li> +<li>xtea_sw_decipher()&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a0e980c5d81b1eca90b8073e54099bdb0">main.c</a></li> +<li>xtea_sw_encipher()&#160;:&#160;<a class="el" href="demo__cfu_2main_8c.html#a8dc502bf508491eed1f39c4acf040efb">main.c</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/hello__world_2main_8c.html b/sw/hello__world_2main_8c.html new file mode 100644 index 0000000000..2add65ca4d --- /dev/null +++ b/sw/hello__world_2main_8c.html @@ -0,0 +1,161 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/hello_world/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_d4640980cbf1943e4a4aee6e8b810c7a.html">hello_world</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Classic 'hello world' demo program. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4455691936f92fdd6c37566fc58ba1f">BAUD_RATE</a>&#160;&#160;&#160;19200</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Classic 'hello world' demo program. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4455691936f92fdd6c37566fc58ba1f">&#9670;&#160;</a></span>BAUD_RATE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define BAUD_RATE&#160;&#160;&#160;19200</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART BAUD rate </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Main function; prints some fancy stuff via UART.</p> +<dl class="section note"><dt>Note</dt><dd>This program requires the UART interface to be synthesized.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/index.html b/sw/index.html new file mode 100644 index 0000000000..e0c5dbb42d --- /dev/null +++ b/sw/index.html @@ -0,0 +1,100 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Main Page</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="header"> + <div class="headertitle"><div class="title">NEORV32 Software Framework Documentation Documentation</div></div> +</div><!--header--> +<div class="contents"> +<a href="doxygen_crawl.html"></a> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/jquery.js b/sw/jquery.js new file mode 100644 index 0000000000..875ada738f --- /dev/null +++ b/sw/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()}, +push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call( +e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push, +O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if( +"string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType +)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le( +function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){ +return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e); +for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n +){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee( +e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o); +break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce( +function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){ +for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j( +this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){ +return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function( +){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"), +S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},catch:function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0, +r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve, +o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if( +"object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){ +var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o), +1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){ +Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t +){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c +].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o), +"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n +)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0, +f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array( +arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i +]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&( +e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent; +this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t +}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")), +r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){ +1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if( +"string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t +,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&( +l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[ +0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return( +!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se( +e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&( +e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get( +this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"}, +S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t), +originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l} +S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:( +le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default), +null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue" +],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400}, +S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{ +set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o +)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf( +" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0; +t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode +,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."), +e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend( +new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t}; +var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val(); +return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET", +isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while( +t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global +)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add( +v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift(); +while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop"))) +}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this), +t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){ +return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&( +e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){ +return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S}); +/*! jQuery UI - v1.13.2 - 2022-08-01 +* http://jqueryui.com +* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/resizable.js, widgets/mouse.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(y){"use strict";y.ui=y.ui||{};y.ui.version="1.13.2";var n,i=0,h=Array.prototype.hasOwnProperty,a=Array.prototype.slice;y.cleanData=(n=y.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=y._data(i,"events"))&&e.remove&&y(i).triggerHandler("remove");n(t)}),y.widget=function(t,i,e){var s,n,o,h={},a=t.split(".")[0],r=a+"-"+(t=t.split(".")[1]);return e||(e=i,i=y.Widget),Array.isArray(e)&&(e=y.extend.apply(null,[{}].concat(e))),y.expr.pseudos[r.toLowerCase()]=function(t){return!!y.data(t,r)},y[a]=y[a]||{},s=y[a][t],n=y[a][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},y.extend(n,s,{version:e.version,_proto:y.extend({},e),_childConstructors:[]}),(o=new i).options=y.widget.extend({},o.options),y.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)} +function o(t){return i.prototype[e].apply(this,t)}h[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=y.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},h,{constructor:n,namespace:a,widgetName:t,widgetFullName:r}),s?(y.each(s._childConstructors,function(t,e){var i=e.prototype;y.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),y.widget.bridge(t,n),n},y.widget.extend=function(t){for(var e,i,s=a.call(arguments,1),n=0,o=s.length;n<o;n++)for(e in s[n])i=s[n][e],h.call(s[n],e)&&void 0!==i&&(y.isPlainObject(i)?t[e]=y.isPlainObject(t[e])?y.widget.extend({},t[e],i):y.widget.extend({},i):t[e]=i);return t},y.widget.bridge=function(o,e){var h=e.prototype.widgetFullName||o;y.fn[o]=function(i){var t="string"==typeof i,s=a.call(arguments,1),n=this;return t?this.length||"instance"!==i?this.each(function(){var t, +e=y.data(this,h);return"instance"===i?(n=e,!1):e?"function"!=typeof e[i]||"_"===i.charAt(0)?y.error("no such method '"+i+"' for "+o+" widget instance"):(t=e[i].apply(e,s))!==e&&void 0!==t?(n=t&&t.jquery?n.pushStack(t.get()):t,!1):void 0:y.error("cannot call methods on "+o+" prior to initialization; attempted to call method '"+i+"'")}):n=void 0:(s.length&&(i=y.widget.extend.apply(null,[i].concat(s))),this.each(function(){var t=y.data(this,h);t?(t.option(i||{}),t._init&&t._init()):y.data(this,h,new e(i,this))})),n}},y.Widget=function(){},y.Widget._childConstructors=[],y.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n<i.length-1;n++)s[i[n]]=s[i[n]]||{},s=s[i[n]];if(t=i.pop(),1===arguments.length)return void 0===s[t]?null:s[t];s[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=e}return this._setOptions(o),this},_setOptions:function(t){for(var e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(t){var e,i,s;for(e in t)s=this.classesElementLookup[e],t[e]!==this.options.classes[e]&&s&&s.length&&(i=y(s.get()),this._removeClass(s,e),i.addClass(this._classes({element:i,keys:e,classes:t,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})}, +disable:function(){return this._setOptions({disabled:!0})},_classes:function(n){var o=[],h=this;function t(t,e){for(var i,s=0;s<t.length;s++)i=h.classesElementLookup[t[s]]||y(),i=n.add?(function(){var i=[];n.element.each(function(t,e){y.map(h.classesElementLookup,function(t){return t}).some(function(t){return t.is(e)})||i.push(e)}),h._on(y(i),{remove:"_untrackClassesElement"})}(),y(y.uniqueSort(i.get().concat(n.element.get())))):y(i.not(n.element).get()),h.classesElementLookup[t[s]]=i,o.push(t[s]),e&&n.classes[t[s]]&&o.push(n.classes[t[s]])}return(n=y.extend({element:this.element,classes:this.options.classes||{}},n)).keys&&t(n.keys.match(/\S+/g)||[],!0),n.extra&&t(n.extra.match(/\S+/g)||[]),o.join(" ")},_untrackClassesElement:function(i){var s=this;y.each(s.classesElementLookup,function(t,e){-1!==y.inArray(i.target,e)&&(s.classesElementLookup[t]=y(e.not(i.target).get()))}),this._off(y(i.target))},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){ +return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){var n="string"==typeof t||null===t,i={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s="boolean"==typeof s?s:i};return i.element.toggleClass(this._classes(i),s),this},_on:function(n,o,t){var h,a=this;"boolean"!=typeof n&&(t=o,o=n,n=!1),t?(o=h=y(o),this.bindings=this.bindings.add(o)):(t=o,o=this.element,h=this.widget()),y.each(t,function(t,e){function i(){if(n||!0!==a.options.disabled&&!y(this).hasClass("ui-state-disabled"))return("string"==typeof e?a[e]:e).apply(a,arguments)}"string"!=typeof e&&(i.guid=e.guid=e.guid||i.guid||y.guid++);var s=t.match(/^([\w:-]*)\s*(.*)$/),t=s[1]+a.eventNamespace,s=s[2];s?h.on(t,s,i):o.on(t,i)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.off(e),this.bindings=y(this.bindings.not(t).get()),this.focusable=y(this.focusable.not(t).get()),this.hoverable=y(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return( +"string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){this._addClass(y(t.currentTarget),null,"ui-state-hover")},mouseleave:function(t){this._removeClass(y(t.currentTarget),null,"ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){this._addClass(y(t.currentTarget),null,"ui-state-focus")},focusout:function(t){this._removeClass(y(t.currentTarget),null,"ui-state-focus")}})},_trigger:function(t,e,i){var s,n,o=this.options[t];if(i=i||{},(e=y.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],n=e.originalEvent)for(s in n)s in e||(e[s]=n[s]);return this.element.trigger(e,i),!("function"==typeof o&&!1===o.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},y.each({show:"fadeIn",hide:"fadeOut"},function(o,h){y.Widget.prototype["_"+o]=function(e,t,i){var s,n=(t="string"==typeof t?{effect:t}:t +)?!0!==t&&"number"!=typeof t&&t.effect||h:o;"number"==typeof(t=t||{})?t={duration:t}:!0===t&&(t={}),s=!y.isEmptyObject(t),t.complete=i,t.delay&&e.delay(t.delay),s&&y.effects&&y.effects.effect[n]?e[o](t):n!==o&&e[n]?e[n](t.duration,t.easing,i):e.queue(function(t){y(this)[o](),i&&i.call(e[0]),t()})}});var s,x,D,o,r,l,u,p,W;y.widget;function E(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function H(t,e){return parseInt(y.css(t,e),10)||0}function S(t){return null!=t&&t===t.window}x=Math.max,D=Math.abs,o=/left|center|right/,r=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,u=/^\w+/,p=/%$/,W=y.fn.position,y.position={scrollbarWidth:function(){if(void 0!==s)return s;var t,e=y("<div style='display:block;position:absolute;width:200px;height:200px;overflow:hidden;'><div style='height:300px;width:auto;'></div></div>"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.width<t.element[0].scrollWidth;return{width:"scroll"===i||"auto"===i&&t.height<t.element[0].scrollHeight?y.position.scrollbarWidth():0,height:e?y.position.scrollbarWidth():0}},getWithinInfo:function(t){var e=y(t||window),i=S(e[0]),s=!!e[0]&&9===e[0].nodeType;return{element:e,isWindow:i,isDocument:s,offset:!i&&!s?y(t).offset():{left:0,top:0},scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop(),width:e.outerWidth(),height:e.outerHeight()}}},y.fn.position=function(p){if(!p||!p.of)return W.apply(this,arguments);var d,c,f,g,m,t,_="string"==typeof(p=y.extend({},p)).of?y(document).find(p.of):y(p.of),w=y.position.getWithinInfo(p.within),v=y.position.getScrollInfo(w),b=(p.collision||"flip").split(" "),z={},e=9===(t=(e=_)[0]).nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:S(t)?{width:e.width(),height:e.height(),offset:{ +top:e.scrollTop(),left:e.scrollLeft()}}:t.preventDefault?{width:0,height:0,offset:{top:t.pageY,left:t.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()};return _[0].preventDefault&&(p.at="left top"),c=e.width,f=e.height,m=y.extend({},g=e.offset),y.each(["my","at"],function(){var t,e,i=(p[this]||"").split(" ");(i=1===i.length?o.test(i[0])?i.concat(["center"]):r.test(i[0])?["center"].concat(i):["center","center"]:i)[0]=o.test(i[0])?i[0]:"center",i[1]=r.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),z[this]=[t?t[0]:0,e?e[0]:0],p[this]=[u.exec(i[0])[0],u.exec(i[1])[0]]}),1===b.length&&(b[1]=b[0]),"right"===p.at[0]?m.left+=c:"center"===p.at[0]&&(m.left+=c/2),"bottom"===p.at[1]?m.top+=f:"center"===p.at[1]&&(m.top+=f/2),d=E(z.at,c,f),m.left+=d[0],m.top+=d[1],this.each(function(){var i,t,h=y(this),a=h.outerWidth(),r=h.outerHeight(),e=H(this,"marginLeft"),s=H(this,"marginTop"),n=a+e+H(this,"marginRight")+v.width,o=r+s+H(this,"marginBottom")+v.height,l=y.extend({},m),u=E(z.my,h.outerWidth() +,h.outerHeight());"right"===p.my[0]?l.left-=a:"center"===p.my[0]&&(l.left-=a/2),"bottom"===p.my[1]?l.top-=r:"center"===p.my[1]&&(l.top-=r/2),l.left+=u[0],l.top+=u[1],i={marginLeft:e,marginTop:s},y.each(["left","top"],function(t,e){y.ui.position[b[t]]&&y.ui.position[b[t]][e](l,{targetWidth:c,targetHeight:f,elemWidth:a,elemHeight:r,collisionPosition:i,collisionWidth:n,collisionHeight:o,offset:[d[0]+u[0],d[1]+u[1]],my:p.my,at:p.at,within:w,elem:h})}),p.using&&(t=function(t){var e=g.left-l.left,i=e+c-a,s=g.top-l.top,n=s+f-r,o={target:{element:_,left:g.left,top:g.top,width:c,height:f},element:{element:h,left:l.left,top:l.top,width:a,height:r},horizontal:i<0?"left":0<e?"right":"center",vertical:n<0?"top":0<s?"bottom":"middle"};c<a&&D(e+i)<c&&(o.horizontal="center"),f<r&&D(s+n)<f&&(o.vertical="middle"),x(D(e),D(i))>x(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0<h&&a<=0?(i=t.left+h+e.collisionWidth-n-s,t.left+=h-i):t.left=!(0<a&&h<=0)&&a<h?s+n-e.collisionWidth:s:0<h?t.left+=h:0<a?t.left-=a:t.left=x(t.left-o,t.left)},top:function(t,e){var i=e.within,s=i.isWindow?i.scrollTop:i.offset.top,n=e.within.height,o=t.top-e.collisionPosition.marginTop,h=s-o,a=o+e.collisionHeight-n-s;e.collisionHeight>n?0<h&&a<=0?(i=t.top+h+e.collisionHeight-n-s,t.top+=h-i):t.top=!(0<a&&h<=0)&&a<h?s+n-e.collisionHeight:s:0<h?t.top+=h:0<a?t.top-=a:t.top=x(t.top-o,t.top)}},flip:{left:function(t,e){var i=e.within,s=i.offset.left+i.scrollLeft,n=i.width,o=i.isWindow?i.scrollLeft:i.offset.left,h=t.left-e.collisionPosition.marginLeft,a=h-o,r=h+e.collisionWidth-n-o,l="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,i="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,h=-2*e.offset[0];a<0?((s=t.left+l+i+h+e.collisionWidth-n-s)<0||s<D(a) +)&&(t.left+=l+i+h):0<r&&(0<(o=t.left-e.collisionPosition.marginLeft+l+i+h-o)||D(o)<r)&&(t.left+=l+i+h)},top:function(t,e){var i=e.within,s=i.offset.top+i.scrollTop,n=i.height,o=i.isWindow?i.scrollTop:i.offset.top,h=t.top-e.collisionPosition.marginTop,a=h-o,r=h+e.collisionHeight-n-o,l="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,i="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,h=-2*e.offset[1];a<0?((s=t.top+l+i+h+e.collisionHeight-n-s)<0||s<D(a))&&(t.top+=l+i+h):0<r&&(0<(o=t.top-e.collisionPosition.marginTop+l+i+h-o)||D(o)<r)&&(t.top+=l+i+h)}},flipfit:{left:function(){y.ui.position.flip.left.apply(this,arguments),y.ui.position.fit.left.apply(this,arguments)},top:function(){y.ui.position.flip.top.apply(this,arguments),y.ui.position.fit.top.apply(this,arguments)}}};var t;y.ui.position,y.extend(y.expr.pseudos,{data:y.expr.createPseudo?y.expr.createPseudo(function(e){return function(t){return!!y.data(t,e)}}):function(t,e,i){return!!y.data(t,i[3])}}),y.fn.extend({ +disableSelection:(t="onselectstart"in document.createElement("div")?"selectstart":"mousedown",function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}),enableSelection:function(){return this.off(".ui-disableSelection")}});y.ui.focusable=function(t,e){var i,s,n,o,h=t.nodeName.toLowerCase();return"area"===h?(s=(i=t.parentNode).name,!(!t.href||!s||"map"!==i.nodeName.toLowerCase())&&(0<(s=y("img[usemap='#"+s+"']")).length&&s.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(h)?(n=!t.disabled)&&(o=y(t).closest("fieldset")[0])&&(n=!o.disabled):n="a"===h&&t.href||e,n&&y(t).is(":visible")&&function(t){var e=t.css("visibility");for(;"inherit"===e;)t=t.parent(),e=t.css("visibility");return"visible"===e}(y(t)))},y.extend(y.expr.pseudos,{focusable:function(t){return y.ui.focusable(t,null!=y.attr(t,"tabindex"))}});var e,d;y.ui.focusable,y.fn._form=function(){return"string"==typeof this[0].form?this.closest("form"):y(this[0].form)},y.ui.formResetMixin={_formResetHandler:function( +){var e=y(this);setTimeout(function(){var t=e.data("ui-form-reset-instances");y.each(t,function(){this.refresh()})})},_bindFormResetHandler:function(){var t;this.form=this.element._form(),this.form.length&&((t=this.form.data("ui-form-reset-instances")||[]).length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t))},_unbindFormResetHandler:function(){var t;this.form.length&&((t=this.form.data("ui-form-reset-instances")).splice(y.inArray(this,t),1),t.length?this.form.data("ui-form-reset-instances",t):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset"))}};y.expr.pseudos||(y.expr.pseudos=y.expr[":"]),y.uniqueSort||(y.uniqueSort=y.unique),y.escapeSelector||(e=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,d=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},y.escapeSelector=function(t){return(t+"").replace(e,d)}),y.fn.even&&y.fn.odd||y.fn.extend({even:function(){ +return this.filter(function(t){return t%2==0})},odd:function(){return this.filter(function(t){return t%2==1})}});y.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},y.fn.labels=function(){var t,e,i;return this.length?this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(e=this.eq(0).parents("label"),(t=this.attr("id"))&&(i=(i=this.eq(0).parents().last()).add((i.length?i:this).siblings()),t="label[for='"+y.escapeSelector(t)+"']",e=e.add(i.find(t).addBack(t))),this.pushStack(e)):this.pushStack([])},y.fn.scrollParent=function(t){var e=this.css("position"),i="absolute"===e,s=t?/(auto|scroll|hidden)/:/(auto|scroll)/,t=this.parents().filter(function(){var t=y(this);return(!i||"static"!==t.css("position"))&&s.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==e&&t.length?t:y(this[0].ownerDocument||document)},y.extend(y.expr.pseudos,{tabbable:function(t){ +var e=y.attr(t,"tabindex"),i=null!=e;return(!i||0<=e)&&y.ui.focusable(t,i)}}),y.fn.extend({uniqueId:(c=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++c)})}),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&y(this).removeAttr("id")})}}),y.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var c,f=!1;y(document).on("mouseup",function(){f=!1});y.widget("ui.mouse",{version:"1.13.2",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(t){if(!0===y.data(t.target,e.widgetName+".preventClickEvent"))return y.removeData(t.target,e.widgetName+".preventClickEvent"),t.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off( +"mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!f){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var e=this,i=1===t.which,s=!("string"!=typeof this.options.cancel||!t.target.nodeName)&&y(t.target).closest(this.options.cancel).length;return i&&!s&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(t),!this._mouseStarted)?(t.preventDefault(),!0):(!0===y.data(t.target,this.widgetName+".preventClickEvent")&&y.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return e._mouseMove(t)},this._mouseUpDelegate=function(t){return e._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),f=!0)):!0}}, +_mouseMove:function(t){if(this._mouseMoved){if(y.ui.ie&&(!document.documentMode||document.documentMode<9)&&!t.button)return this._mouseUp(t);if(!t.which)if(t.originalEvent.altKey||t.originalEvent.ctrlKey||t.originalEvent.metaKey||t.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,t),this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&y.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer), +delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,f=!1,t.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n<o.length;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}};y.widget("ui.resizable",y.ui.mouse,{version:"1.13.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1, +handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(t,e){if("hidden"===y(t).css("overflow"))return!1;var i=e&&"left"===e?"scrollLeft":"scrollTop",e=!1;if(0<t[i])return!0;try{t[i]=1,e=0<t[i],t[i]=0}catch(t){}return e},_create:function(){var t,e=this.options,i=this;this._addClass("ui-resizable"),y.extend(this,{_aspectRatio:!!e.aspectRatio,aspectRatio:e.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:e.helper||e.ghost||e.animate?e.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(y("<div class='ui-wrapper'></div>").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e<i.length;e++)s="ui-resizable-"+(t=String.prototype.trim.call(i[e])),n=y("<div>"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),s<n.maxWidth&&(n.maxWidth=s),t<n.maxHeight&&(n.maxHeight=t) +),this._vBoundaries=n},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e<this._proportionallyResizeElements.length;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({ +height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,e=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||y("<div></div>").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidth<d,g=i.maxHeight&&i.maxHeight<c,m=i.minWidth&&i.minWidth>d,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0<c-l?(e.size.height=c,e.position.top=o.top-p):(c=l-t.height,e.size.height=c,e.position.top=o.top+n.height-c),0<d-r?(e.size.width=d,e.position.left=o.left-u):(d=r-t.width,e.size.width=d,e.position.left=o.left+n.width-d))}});y.ui.resizable}); +/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"===typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9e9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case"number":case"string":if( +/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e=h(e);break}e=l?$(e):$(e,q);case"object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&&"%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])}; +$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()},set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p}); +/*! + PowerTip v1.3.1 (2018-04-15) + https://stevenbenner.github.io/jquery-powertip/ + Copyright (c) 2018 Steven Benner (http://stevenbenner.com/). + Released under MIT license. + https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt +*/ +(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&module.exports){module.exports=factory(require("jquery"))}else{factory(root.jQuery)}})(this,function($){var $document=$(document),$window=$(window),$body=$("body");var DATA_DISPLAYCONTROLLER="displayController",DATA_HASACTIVEHOVER="hasActiveHover",DATA_FORCEDOPEN="forcedOpen",DATA_HASMOUSEMOVE="hasMouseMove",DATA_MOUSEONTOTIP="mouseOnToPopup",DATA_ORIGINALTITLE="originalTitle",DATA_POWERTIP="powertip",DATA_POWERTIPJQ="powertipjq",DATA_POWERTIPTARGET="powertiptarget",EVENT_NAMESPACE=".powertip",RAD2DEG=180/Math.PI,MOUSE_EVENTS=["click","dblclick","mousedown","mouseup","mousemove","mouseover","mouseout","mouseenter","mouseleave","contextmenu"];var session={tooltips:null,isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,closeDelayTimeout:null,mouseTrackingActive:false, +delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var Collision={none:0,top:1,bottom:2,left:4,right:8};$.fn.powerTip=function(opts,arg){var targetElements=this,options,tipController;if(!targetElements.length){return targetElements}if($.type(opts)==="string"&&$.powerTip[opts]){return $.powerTip[opts].call(targetElements,targetElements,arg)}options=$.extend({},$.fn.powerTip.defaults,opts);tipController=new TooltipController(options);initTracking();targetElements.each(function elementSetup(){var $this=$(this),dataPowertip=$this.data(DATA_POWERTIP),dataElem=$this.data(DATA_POWERTIPJQ),dataTarget=$this.data(DATA_POWERTIPTARGET),title=$this.attr("title");if(!dataPowertip&&!dataTarget&&!dataElem&&title){$this.data(DATA_POWERTIP,title);$this.data(DATA_ORIGINALTITLE,title);$this.removeAttr("title")}$this.data(DATA_DISPLAYCONTROLLER,new DisplayController($this,options,tipController))});if(!options.manual){$.each(options.openEvents,function(idx,evt){if($.inArray(evt,options.closeEvents)>-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference<options.intentSensitivity){cancelClose();closeAnyDelayed();tipController.showTip(element)}else{session.previousX=session.currentX;session.previousY=session.currentY; +openTooltip()}}function cancelTimer(stopClose){hoverTimer=clearTimeout(hoverTimer);if(session.closeDelayTimeout&&myCloseDelay===session.closeDelayTimeout||stopClose){cancelClose()}}function cancelClose(){session.closeDelayTimeout=clearTimeout(session.closeDelayTimeout);session.delayInProgress=false}function closeAnyDelayed(){if(session.delayInProgress&&session.activeHover&&!session.activeHover.is(element)){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide(true)}}function repositionTooltip(){tipController.resetPosition(element)}this.show=openTooltip;this.hide=closeTooltip;this.cancel=cancelTimer;this.resetPosition=repositionTooltip}function PlacementCalculator(){function computePlacementCoords(element,placement,tipWidth,tipHeight,offset){var placementBase=placement.split("-")[0],coords=new CSSCoordinates,position;if(isSvgElement(element)){position=getSvgPlacement(element,placementBase)}else{position=getHtmlPlacement(element,placementBase)}switch(placement){case"n":coords.set("left",position.left-tipWidth/2 +);coords.set("bottom",session.windowHeight-position.top+offset);break;case"e":coords.set("left",position.left+offset);coords.set("top",position.top-tipHeight/2);break;case"s":coords.set("left",position.left-tipWidth/2);coords.set("top",position.top+offset);break;case"w":coords.set("top",position.top-tipHeight/2);coords.set("right",session.windowWidth-position.left+offset);break;case"nw":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"nw-alt":coords.set("left",position.left);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne":coords.set("left",position.left-20);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne-alt":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left);break;case"sw":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"sw-alt":coords.set("left", +position.left);coords.set("top",position.top+offset);break;case"se":coords.set("left",position.left-20);coords.set("top",position.top+offset);break;case"se-alt":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left);break}return coords}function getHtmlPlacement(element,placement){var objectOffset=element.offset(),objectWidth=element.outerWidth(),objectHeight=element.outerHeight(),left,top;switch(placement){case"n":left=objectOffset.left+objectWidth/2;top=objectOffset.top;break;case"e":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight/2;break;case"s":left=objectOffset.left+objectWidth/2;top=objectOffset.top+objectHeight;break;case"w":left=objectOffset.left;top=objectOffset.top+objectHeight/2;break;case"nw":left=objectOffset.left;top=objectOffset.top;break;case"ne":left=objectOffset.left+objectWidth;top=objectOffset.top;break;case"sw":left=objectOffset.left;top=objectOffset.top+objectHeight;break;case"se":left=objectOffset.left+objectWidth; +top=objectOffset.top+objectHeight;break}return{top:top,left:left}}function getSvgPlacement(element,placement){var svgElement=element.closest("svg")[0],domElement=element[0],point=svgElement.createSVGPoint(),boundingBox=domElement.getBBox(),matrix=domElement.getScreenCTM(),halfWidth=boundingBox.width/2,halfHeight=boundingBox.height/2,placements=[],placementKeys=["nw","n","ne","e","se","s","sw","w"],coords,rotation,steps,x;function pushPlacement(){placements.push(point.matrixTransform(matrix))}point.x=boundingBox.x;point.y=boundingBox.y;pushPlacement();point.x+=halfWidth;pushPlacement();point.x+=halfWidth;pushPlacement();point.y+=halfHeight;pushPlacement();point.y+=halfHeight;pushPlacement();point.x-=halfWidth;pushPlacement();point.x-=halfWidth;pushPlacement();point.y-=halfHeight;pushPlacement();if(placements[0].y!==placements[1].y||placements[0].x!==placements[7].x){rotation=Math.atan2(matrix.b,matrix.a)*RAD2DEG;steps=Math.ceil((rotation%360-22.5)/45);if(steps<1){steps+=8}while(steps--){placementKeys.push( +placementKeys.shift())}}for(x=0;x<placements.length;x++){if(placementKeys[x]===placement){coords=placements[x];break}}return{top:coords.y+session.scrollTop,left:coords.x+session.scrollLeft}}this.compute=computePlacementCoords}function TooltipController(options){var placementCalculator=new PlacementCalculator,tipElement=$("#"+options.popupId);if(tipElement.length===0){tipElement=$("<div/>",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.top<viewportTop||Math.abs(coords.bottom-session.windowHeight)-elementHeight<viewportTop){collisions|=Collision.top}if(coords.top+elementHeight>viewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.left<viewportLeft||coords.right+elementWidth>viewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right<viewportLeft){collisions|=Collision.right}return collisions}function countFlags(value){var count=0;while(value){value&=value-1;count++}return count}return $.powerTip}); +/*! + * jQuery UI Touch Punch 0.2.3 + * + * Copyright 2011–2014, Dave Furfero + * Dual licensed under the MIT or GPL Version 2 licenses. + * + * Depends: + * jquery.ui.widget.js + * jquery.ui.mouse.js + */!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("<span/>").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],$('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y<o.upEnd)&&a.eq(o.up?1:0).show(),o.y==n)mouse&&a.eq(o.up?0:1).hide(),this.menuScrollStop(t);else if(!e){this.opts.scrollAccelerate&&o.step<this.opts.scrollStep&&(o.step+=.2);var h=this;this.scrollTimeout=requestAnimationFrame(function(){h.menuScroll(t)})}},menuScrollMousewheel:function(t,e){if(this.getClosestMenu(e.target)==t[0]){e=e.originalEvent;var i=( +e.wheelDelta||-e.detail)>0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/sw/md_README.html b/sw/md_README.html new file mode 100644 index 0000000000..db6b47eb21 --- /dev/null +++ b/sw/md_README.html @@ -0,0 +1,333 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: README</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div><div class="header"> + <div class="headertitle"><div class="title">README</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><p><a href="https://github.com/stnolting/neorv32"><img src="docs/figures/neorv32_logo_riscv.png" alt="NEORV32" class="inline"/></a></p> +<h1><a class="anchor" id="autotoc_md0"></a> +The NEORV32 RISC-V Processor</h1> +<p><a href="https://github.com/stnolting/neorv32/releases/tag/nightly"><img src="https://img.shields.io/badge/data%20sheet-PDF-ffbd00?longCache=true&amp;style=flat-square&amp;logo=asciidoctor&amp;colorA=273274" alt="datasheet (pdf)" class="inline"/></a> <a href="https://stnolting.github.io/neorv32"><img src="https://img.shields.io/badge/-HTML-ffbd00?longCache=true&amp;style=flat-square" alt="datasheet (html)" class="inline"/></a> <a href="https://github.com/stnolting/neorv32/releases/tag/nightly"><img src="https://img.shields.io/badge/user%20guide-PDF-ffbd00?longCache=true&amp;style=flat-square&amp;logo=asciidoctor&amp;colorA=273274" alt="userguide (pdf)" class="inline"/></a> <a href="https://stnolting.github.io/neorv32/ug"><img src="https://img.shields.io/badge/-HTML-ffbd00?longCache=true&amp;style=flat-square" alt="userguide (html)" class="inline"/></a> <a href="https://stnolting.github.io/neorv32/sw/files.html"><img src="https://img.shields.io/badge/doxygen-HTML-ffbd00?longCache=true&amp;style=flat-square&amp;logo=Doxygen&amp;colorA=273274" alt="doxygen" class="inline"/></a></p> +<ol type="1"> +<li>Overview<ul> +<li>Key Features</li> +<li>Project Status</li> +</ul> +</li> +<li>Features</li> +<li>FPGA Implementation Results</li> +<li>Performance</li> +<li>**Getting Started** :rocket:</li> +</ol> +<h2><a class="anchor" id="autotoc_md1"></a> +1. Overview</h2> +<p><img src="docs/figures/neorv32_processor.png" alt="neorv32 Overview" class="inline"/></p> +<p>The NEORV32 Processor is a <b>customizable microcontroller-like system on chip (SoC)</b> built around the NEORV32 <a href="https://riscv.org/">RISC-V</a> CPU that is written in <b>platform-independent VHDL</b>. The processor is intended as auxiliary controller in larger SoC designs or as tiny and customized microcontroller that even fits into a Lattice iCE40 UltraPlus low-power &amp; low-density FPGA. The project is intended to work <em>out of the box</em> and targets FPGA / RISC-V beginners as well as advanced users.</p> +<p>Special focus is paid on <b>execution safety</b> to provide defined and predictable behavior at any time. For example, the CPU ensures <em>all</em> memory accesses are properly acknowledged and <em>all</em> invalid/malformed instructions are always detected as such. Whenever an unexpected state occurs the application software is informed via <em>precise</em> and resumable hardware exceptions.</p> +<ul> +<li>:recycle: Looking for an <b>all-Verilog</b> version? Have a look at <a href="https://github.com/stnolting/neorv32-verilog">neorv32-verilog</a>.</li> +<li>:heavy_check_mark: Continuous integration to check for regressions (including RISC-V ISA compatibility check using <b>RISCOF</b>).</li> +<li>:open_file_folder: <a href="https://github.com/stnolting/neorv32-setups">Exemplary setups</a> and <a href="https://github.com/stnolting/neorv32-setups/blob/main/README.md#Community-Projects">community projects</a> targeting various FPGA boards and toolchains to get started.</li> +<li>:package: The entire processor is also available as <a href="https://stnolting.github.io/neorv32/ug/#_packaging_the_processor_as_vivado_ip_block">Vivado IP Block</a>.</li> +<li>:kite: Support for <a href="https://github.com/stnolting/neorv32-freertos">FreeRTOS</a>, <a href="https://docs.zephyrproject.org/latest/boards/others/neorv32/doc/index.html">Zephyr OS</a> and <a href="https://github.com/enjoy-digital/litex/wiki/CPUs#risc-v---neorv32">LiteX</a> SoC Builder Framework.</li> +<li>:desktop_computer: Pre-configured <a href="https://stnolting.github.io/neorv32/ug/#_eclipse_ide">Eclipse project</a> for developing and debugging code using an IDE.</li> +<li>:label: The project's change log is available in <a href="https://github.com/stnolting/neorv32/blob/main/CHANGELOG.md">CHANGELOG.md</a>.</li> +<li>:rocket: Check out the quick links below and the <a href="https://stnolting.github.io/neorv32/ug/"><em>User Guide</em></a> to get started setting up <em>your</em> NEORV32 processor!</li> +<li>:books: For detailed information see the <a href="https://stnolting.github.io/neorv32/">NEORV32 online documentation</a>.</li> +<li>:interrobang: Want to know more? Check out the <a href="https://stnolting.github.io/neorv32/#_rationale">project's rationale</a>.</li> +</ul> +<p>Feel free to open a new <a href="https://github.com/stnolting/neorv32/issues">issue</a> or start a new <a href="https://github.com/stnolting/neorv32/discussions">discussion</a> if you have questions, comments, ideas, feedback or if something is not working as expected. See how to <a href="https://github.com/stnolting/neorv32/blob/main/CONTRIBUTING.md">contribute</a>.</p> +<h3><a class="anchor" id="autotoc_md2"></a> +Key Features</h3> +<ul class="check"> +<li class="checked">all-in-one package: <b>CPU</b> + <b>SoC</b> + <b>Software Framework &amp; Tooling</b></li> +</ul> +<ul class="check"> +<li class="checked">completely described in behavioral, platform-independent VHDL - <b>no</b> platform-specific primitives, macros, attributes, etc.; an all-Verilog "version" is also <a href="https://github.com/stnolting/neorv32-verilog">available</a></li> +</ul> +<ul class="check"> +<li class="checked">extensive configuration options for adapting the processor to the requirements of the application (on CPU, processor and system level)</li> +</ul> +<ul class="check"> +<li class="checked">aims to be as small as possible while being as RISC-V-compliant as possible - with a reasonable area-vs-performance trade-off</li> +</ul> +<ul class="check"> +<li class="checked">FPGA friendly (e.g. <em>all</em> internal memories can be mapped to block RAM - including the CPU's register file)</li> +</ul> +<ul class="check"> +<li class="checked">optimized for high clock frequencies to ease integration / timing closure</li> +</ul> +<ul class="check"> +<li class="checked">from zero to <em>"hello world!"</em> - completely open source and documented (on software and hardware side)</li> +</ul> +<ul class="check"> +<li class="checked">easy to use even for FPGA / RISC-V starters – intended to work <em>out of the box</em></li> +</ul> +<h3><a class="anchor" id="autotoc_md3"></a> +Project Status</h3> +<p><a href="https://github.com/stnolting/neorv32/releases"><img src="https://img.shields.io/github/v/release/stnolting/neorv32?longCache=true&amp;style=flat-square&amp;logo=GitHub" alt="release" class="inline"/></a> <a href="https://github.com/stnolting/neorv32/activity"><img src="https://img.shields.io/github/commits-since/stnolting/neorv32/latest?longCache=true&amp;style=flat-square&amp;logo=GitHub" alt="commits-since-latest-release" class="inline"/></a></p> +<table class="markdownTable"> +<tr class="markdownTableHead"> +<th class="markdownTableHeadLeft">Task / Subproject </th><th class="markdownTableHeadLeft">Repository </th><th class="markdownTableHeadLeft">CI Status </th></tr> +<tr class="markdownTableRowOdd"> +<td class="markdownTableBodyLeft">GitHub pages (docs) </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/neorv32">neorv32</a> </td><td class="markdownTableBodyLeft"><a href="https://stnolting.github.io/neorv32"><img src="https://img.shields.io/website.svg?label=stnolting.github.io%2Fneorv32&amp;longCache=true&amp;style=flat-square&amp;url=http%3A%2F%2Fstnolting.github.io%2Fneorv32%2Findex.html&amp;logo=GitHub" alt="GitHub Pages" style="pointer-events: none;" class="inline"/></a> </td></tr> +<tr class="markdownTableRowEven"> +<td class="markdownTableBodyLeft">Build documentation </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/neorv32">neorv32</a> </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/neorv32/actions?query=workflow%3ADocumentation"><img src="https://img.shields.io/github/actions/workflow/status/stnolting/neorv32/Documentation.yml?branch=main&amp;longCache=true&amp;style=flat-square&amp;label=Documentation&amp;logo=Github%20Actions&amp;logoColor=fff" alt="Documentation" class="inline"/></a> </td></tr> +<tr class="markdownTableRowOdd"> +<td class="markdownTableBodyLeft">Processor verification </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/neorv32">neorv32</a> </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/neorv32/actions?query=workflow%3AProcessor"><img src="https://img.shields.io/github/actions/workflow/status/stnolting/neorv32/Processor.yml?branch=main&amp;longCache=true&amp;style=flat-square&amp;label=Processor%20Check&amp;logo=Github%20Actions&amp;logoColor=fff" alt="Processor" class="inline"/></a> </td></tr> +<tr class="markdownTableRowEven"> +<td class="markdownTableBodyLeft">RISCOF core verification </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/neorv32-riscof">neorv32-riscof</a> </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/neorv32-riscof/actions/workflows/main.yml"><img src="https://img.shields.io/github/actions/workflow/status/stnolting/neorv32-riscof/main.yml?branch=main&amp;longCache=true&amp;style=flat-square&amp;label=neorv32-riscof&amp;logo=Github%20Actions&amp;logoColor=fff" alt="neorv32-riscof" class="inline"/></a> </td></tr> +<tr class="markdownTableRowOdd"> +<td class="markdownTableBodyLeft">FPGA implementations </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/neorv32-setups">neorv32-setups</a> </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/neorv32-setups/actions?query=workflow%3AImplementation"><img src="https://img.shields.io/github/actions/workflow/status/stnolting/neorv32-setups/Implementation.yml?branch=main&amp;longCache=true&amp;style=flat-square&amp;label=Implementation&amp;logo=Github%20Actions&amp;logoColor=fff" alt="Implementation" class="inline"/></a> </td></tr> +<tr class="markdownTableRowEven"> +<td class="markdownTableBodyLeft">All-Verilog version </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/neorv32-verilog">neorv32-verilog</a> </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/neorv32-verilog/actions/workflows/main.yml"><img src="https://img.shields.io/github/actions/workflow/status/stnolting/neorv32-verilog/main.yml?branch=main&amp;longCache=true&amp;style=flat-square&amp;label=neorv32-verilog&amp;logo=Github%20Actions&amp;logoColor=fff" alt="neorv32-verilog" class="inline"/></a> </td></tr> +<tr class="markdownTableRowOdd"> +<td class="markdownTableBodyLeft">FreeRTOS port </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/neorv32-freertos">neorv32-freertos</a> </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/neorv32-freertos/actions/workflows/main.yml"><img src="https://img.shields.io/github/actions/workflow/status/stnolting/neorv32-freertos/main.yml?branch=main&amp;longCache=true&amp;style=flat-square&amp;label=neorv32-freertos%20sim&amp;logo=Github%20Actions&amp;logoColor=fff" alt="neorv32-freertos" class="inline"/></a> </td></tr> +<tr class="markdownTableRowEven"> +<td class="markdownTableBodyLeft">Prebuilt GCC toolchains </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/riscv-gcc-prebuilt">riscv-gcc-prebuilt</a> </td><td class="markdownTableBodyLeft"><a href="https://github.com/stnolting/riscv-gcc-prebuilt/actions/workflows/main.yml"><img src="https://img.shields.io/github/actions/workflow/status/stnolting/riscv-gcc-prebuilt/main.yml?branch=main&amp;longCache=true&amp;style=flat-square&amp;label=Prebuilt%20Toolchains&amp;logo=Github%20Actions&amp;logoColor=fff" alt="Prebuilt_Toolchains" class="inline"/></a> </td></tr> +</table> +<p>The processor passes the official RISC-V architecture tests to ensure compatibility with the RISC-V ISA specs., which is checked by the <a href="https://github.com/stnolting/neorv32-riscof">neorv32-riscof</a> repository. It can successfully run <em>any</em> C program (for example from the <a href="https://github.com/stnolting/neorv32/tree/main/sw/example"><code>sw/example</code></a> folder) including CoreMark and FreeRTOS and can be synthesized for <em>any</em> target technology - <a href="https://github.com/stnolting/neorv32-setups">tested</a> on Intel, AMD, Cologne Chip and Lattice FPGAs. The conversion into a single, plain-Verilog module file is automatically checked by the <a href="https://github.com/stnolting/neorv32-verilog">neorv32-verilog</a> repository.</p> +<h2><a class="anchor" id="autotoc_md4"></a> +2. Features</h2> +<p>The NEORV32 Processor provides a full-featured microcontroller-like SoC build around the NEORV32 CPU. By using generics the design is highly configurable and allows a flexible customization to tailor the setup according to your needs. Note that all of the following SoC modules are entirely <em>optional</em>.</p> +<p><b>CPU Core</b></p> +<ul> +<li><a href="https://github.com/riscv/riscv-isa-manual/blob/master/marchid.md"><img src="https://img.shields.io/badge/RISC--V%20Architecture%20ID-19-000000.svg?longCache=true&amp;style=flat-square&amp;logo=riscv&amp;colorA=273274&amp;colorB=fbb517" alt="RISCV-ARCHID" style="pointer-events: none;" class="inline"/></a></li> +<li>RISC-V 32-bit little-endian single-core pipelined/multi-cycle modified Harvard architecture</li> +<li>configurable <a href="https://stnolting.github.io/neorv32/#_instruction_sets_and_extensions">instruction sets and extensions</a>: \ <code>RV32</code> [<a href="https://stnolting.github.io/neorv32/#_i_isa_extension"><code>I</code></a>/<a href="https://stnolting.github.io/neorv32/#_e_isa_extension"><code>E</code></a>] [<a href="https://stnolting.github.io/neorv32/#_m_isa_extension"><code>M</code></a>] [<a href="https://stnolting.github.io/neorv32/#_c_isa_extension"><code>C</code></a>] [<a href="https://stnolting.github.io/neorv32/#_b_isa_extension"><code>B</code></a>] [<a href="https://stnolting.github.io/neorv32/#_u_isa_extension"><code>U</code></a>] [<a href="https://stnolting.github.io/neorv32/#_x_isa_extension"><code>X</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zalrsc_isa_extension"><code>Zalrsc</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zba_isa_extension"><code>Zba</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zbb_isa_extension"><code>Zbb</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zbkb_isa_extension"><code>Zbkb</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zbkc_isa_extension"><code>Zbkc</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zbkx_isa_extension"><code>Zbkx</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zbs_isa_extension"><code>Zbs</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zicntr_isa_extension"><code>Zicntr</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zicond_isa_extension"><code>Zicond</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zicsr_isa_extension"><code>Zicsr</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zifencei_isa_extension"><code>Zifencei</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zihpm_isa_extension"><code>Zihpm</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zfinx_isa_extension"><code>Zfinx</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zkn_isa_extension"><code>Zkn</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zknd_isa_extension"><code>Zknd</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zkne_isa_extension"><code>Zkne</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zknh_isa_extension"><code>Zknh</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zkt_isa_extension"><code>Zkt</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zks_isa_extension"><code>Zks</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zksed_isa_extension"><code>Zksed</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zksh_isa_extension"><code>Zksh</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zmmul_isa_extension"><code>Zmmul</code></a>] [<a href="https://stnolting.github.io/neorv32/#_zxcfu_isa_extension"><code>Zxcfu</code></a>] [<a href="https://stnolting.github.io/neorv32/#_sdext_isa_extension"><code>Sdext</code></a>] [<a href="https://stnolting.github.io/neorv32/#_sdtrig_isa_extension"><code>Sdtrig</code></a>] [<a href="https://stnolting.github.io/neorv32/#_smpmp_isa_extension"><code>Smpmp</code></a>]</li> +<li>compatible to subsets of the RISC-V <em>Unprivileged ISA Specification</em> (<a href="https://github.com/stnolting/neorv32/blob/main/docs/references/riscv-spec.pdf">pdf</a>) and <em>Privileged Architecture Specification</em> (<a href="https://github.com/stnolting/neorv32/blob/main/docs/references/riscv-privileged.pdf">pdf</a>).</li> +<li><code>machine</code> and <code>user</code> privilege modes</li> +<li>implements <b>all</b> standard RISC-V exceptions and interrupts + 16 fast interrupt request channels as NEORV32-specific extension</li> +<li>custom functions unit (<a href="https://stnolting.github.io/neorv32/#_custom_functions_unit_cfu">CFU</a> as <code>Zxcfu</code> ISA extension) for <b>custom RISC-V instructions</b>;</li> +<li><em>intrinsic</em> libraries for CPU extensions that are not yet supported by GCC</li> +</ul> +<p><b>Memories</b></p> +<ul> +<li>processor-internal data and instruction memories (<a href="https://stnolting.github.io/neorv32/#_data_memory_dmem">DMEM</a> / <a href="https://stnolting.github.io/neorv32/#_instruction_memory_imem">IMEM</a>) &amp; caches (<a href="https://stnolting.github.io/neorv32/#_processor_internal_instruction_cache_icache">iCACHE</a> and <a href="https://stnolting.github.io/neorv32/#_processor_internal_data_cache_dcache">dCACHE</a>)</li> +<li>pre-installed bootloader (<a href="https://stnolting.github.io/neorv32/#_bootloader_rom_bootrom">BOOTLDROM</a>) with serial user interface; allows booting application code via UART or from external SPI flash</li> +</ul> +<p><b>Timers and Counters</b></p> +<ul> +<li>core local interruptor (<a href="https://stnolting.github.io/neorv32/#_core_local_interruptor_clint">CLINT</a>), RISC-V-compatible</li> +<li>32-bit general purpose timer (<a href="https://stnolting.github.io/neorv32/#_general_purpose_timer_gptmr">GPTMR</a>)</li> +<li>watchdog timer (<a href="https://stnolting.github.io/neorv32/#_watchdog_timer_wdt">WDT</a>)</li> +</ul> +<p><b>Input / Output</b></p> +<ul> +<li>standard serial interfaces (<a href="https://stnolting.github.io/neorv32/#_primary_universal_asynchronous_receiver_and_transmitter_uart0">UART</a>, <a href="https://stnolting.github.io/neorv32/#_serial_peripheral_interface_controller_spi">SPI</a> (SPI host), <a href="https://stnolting.github.io/neorv32/#_serial_data_interface_controller_sdi">SDI</a> (SPI device), <a href="https://stnolting.github.io/neorv32/#_two_wire_serial_interface_controller_twi">TWI</a> (I²C host), <a href="https://stnolting.github.io/neorv32/#_two_wire_serial_device_controller_twd">TWD</a> (I²C device), <a href="https://stnolting.github.io/neorv32/#_one_wire_serial_interface_controller_onewire">ONEWIRE/1-Wire</a>)</li> +<li>general purpose IOs (<a href="https://stnolting.github.io/neorv32/#_general_purpose_input_and_output_port_gpio">GPIO</a>) and <a href="https://stnolting.github.io/neorv32/#_pulse_width_modulation_controller_pwm">PWM</a></li> +<li>smart LED interface (<a href="https://stnolting.github.io/neorv32/#_smart_led_interface_neoled">NEOLED</a>) to directly control NeoPixel(TM) LEDs</li> +</ul> +<p><b>SoC Connectivity</b></p> +<ul> +<li>32-bit external bus interface - Wishbone b4 compatible (<a href="https://stnolting.github.io/neorv32/#_processor_external_bus_interface_xbus">XBUS</a>) with optional cache (XCACHE); <a href="https://github.com/stnolting/neorv32/blob/main/rtl/system_integration">wrappers</a> for AXI4-Lite and Avalon-MM host interfaces</li> +<li>stream link interface with independent RX and TX channels - AXI4-Stream compatible (<a href="https://stnolting.github.io/neorv32/#_stream_link_interface_slink">SLINK</a>)</li> +<li>external interrupts controller with up to 32 channels (<a href="https://stnolting.github.io/neorv32/#_external_interrupt_controller_xirq">XIRQ</a>)</li> +</ul> +<p><b>Advanced</b></p> +<ul> +<li>true-random number generator (<a href="https://stnolting.github.io/neorv32/#_true_random_number_generator_trng">TRNG</a>) based on the <a href="https://github.com/stnolting/neoTRNG">neoTRNG</a></li> +<li>execute-in-place module (<a href="https://stnolting.github.io/neorv32/#_execute_in_place_module_xip">XIP</a>) to execute code right out of a SPI flash</li> +<li>custom functions subsystem (<a href="https://stnolting.github.io/neorv32/#_custom_functions_subsystem_cfs">CFS</a>) for custom tightly-coupled co-processors, accelerators or interfaces</li> +<li>direct memory access controller (<a href="https://stnolting.github.io/neorv32/#_direct_memory_access_controller_dma">DMA</a>) for CPU-independent data transfers and conversions</li> +<li>cyclic redundancy check unit (<a href="https://stnolting.github.io/neorv32/#_cyclic_redundancy_check_crc">CRC</a>) to test data integrity (CRC8/16/32)</li> +</ul> +<p><b>Debugging</b></p> +<ul> +<li>on-chip debugger (<a href="https://stnolting.github.io/neorv32/#_on_chip_debugger_ocd">OCD</a>) accessible via standard JTAG interface</li> +<li>compatible to the "Minimal RISC-V Debug Specification Version 1.0"</li> +<li>compatible with <b>OpenOCD</b>, <b>GDB</b> and <b>Segger Embedded Studio</b></li> +<li>RISC-V <a href="https://stnolting.github.io/neorv32/#_trigger_module">trigger module</a> for hardware-assisted breakpoints</li> +<li>optional authentication module to implement custom security mechanisms</li> +</ul> +<h2><a class="anchor" id="autotoc_md5"></a> +3. FPGA Implementation Results</h2> +<p>Implementation results for <b>exemplary CPU configurations</b> generated for an Intel Cyclone IV <code>EP4CE22F17C6</code> FPGA using Intel Quartus Prime Lite 21.1 (no timing constrains, <em>balanced optimization</em>, f_max from <em>Slow 1200mV 0C Model</em>).</p> +<table class="markdownTable"> +<tr class="markdownTableHead"> +<th class="markdownTableHeadLeft">CPU Configuration (version <a href="https://github.com/stnolting/neorv32/blob/main/CHANGELOG.md">1.7.8.5</a>) </th><th class="markdownTableHeadCenter">LEs </th><th class="markdownTableHeadCenter">FFs </th><th class="markdownTableHeadCenter">Memory bits </th><th class="markdownTableHeadCenter">DSPs </th><th class="markdownTableHeadCenter">f_max </th></tr> +<tr class="markdownTableRowOdd"> +<td class="markdownTableBodyLeft"><code>rv32i_Zicsr</code> </td><td class="markdownTableBodyCenter">1223 </td><td class="markdownTableBodyCenter">607 </td><td class="markdownTableBodyCenter">1024 </td><td class="markdownTableBodyCenter">0 </td><td class="markdownTableBodyCenter">130 MHz </td></tr> +<tr class="markdownTableRowEven"> +<td class="markdownTableBodyLeft"><code>rv32i_Zicsr_Zicntr</code> </td><td class="markdownTableBodyCenter">1578 </td><td class="markdownTableBodyCenter">773 </td><td class="markdownTableBodyCenter">1024 </td><td class="markdownTableBodyCenter">0 </td><td class="markdownTableBodyCenter">130 MHz </td></tr> +<tr class="markdownTableRowOdd"> +<td class="markdownTableBodyLeft"><code>rv32imc_Zicsr_Zicntr</code> </td><td class="markdownTableBodyCenter">2338 </td><td class="markdownTableBodyCenter">992 </td><td class="markdownTableBodyCenter">1024 </td><td class="markdownTableBodyCenter">0 </td><td class="markdownTableBodyCenter">130 MHz </td></tr> +</table> +<p>An incremental list of CPU extensions and processor modules can be found in the <a href="https://stnolting.github.io/neorv32/#_fpga_implementation_results">Data Sheet: FPGA Implementation Results</a>.</p> +<h2><a class="anchor" id="autotoc_md6"></a> +4. Performance</h2> +<p>The NEORV32 CPU is based on a two-stages pipelined/multi-cycle architecture (fetch and execute). The following table shows the performance results (scores and average CPI) for exemplary CPU configurations (no caches) executing 2000 iterations of the <a href="https://github.com/stnolting/neorv32/blob/main/sw/example/coremark">CoreMark</a> CPU benchmark (using plain GCC10 rv32i built-in libraries only!).</p> +<table class="markdownTable"> +<tr class="markdownTableHead"> +<th class="markdownTableHeadLeft">CPU Configuration (version <a href="https://github.com/stnolting/neorv32/blob/main/CHANGELOG.md">1.5.7.10</a>) </th><th class="markdownTableHeadCenter">CoreMark Score </th></tr> +<tr class="markdownTableRowOdd"> +<td class="markdownTableBodyLeft"><em>small</em> (<code>rv32i_Zicsr_Zifencei</code>) </td><td class="markdownTableBodyCenter">33.89 </td></tr> +<tr class="markdownTableRowEven"> +<td class="markdownTableBodyLeft"><em>medium</em> (<code>rv32imc_Zicsr_Zifencei</code>) </td><td class="markdownTableBodyCenter">62.50 </td></tr> +<tr class="markdownTableRowOdd"> +<td class="markdownTableBodyLeft"><em>performance</em> (<code>rv32imc_Zicsr_Zifencei</code> + perf. options) </td><td class="markdownTableBodyCenter">95.23 </td></tr> +</table> +<p>More information regarding the CPU performance can be found in the <a href="https://stnolting.github.io/neorv32/#_cpu_performance">Data Sheet: CPU Performance</a>. The CPU &amp; SoC provide further "tuning" options to optimize the design for maximum performance, maximum clock speed, minimal area or minimal power consumption: <a href="https://stnolting.github.io/neorv32/ug/#_application_specific_processor_configuration">User Guide: Application-Specific Processor Configuration</a></p> +<h2><a class="anchor" id="autotoc_md7"></a> +5. Getting Started</h2> +<p>This overview provides some <em>quick links</em> to the most important sections of the <a href="https://stnolting.github.io/neorv32">online Data Sheet</a> and the <a href="https://stnolting.github.io/neorv32/ug">online User Guide</a>.</p> +<h3><a class="anchor" id="autotoc_md8"></a> +:mag: <a href="https://stnolting.github.io/neorv32/#_overview">NEORV32 Project</a> - An Introduction</h3> +<ul> +<li><a href="https://stnolting.github.io/neorv32/#_rationale">Rationale</a> - why? how come? what for?</li> +<li><a href="https://stnolting.github.io/neorv32/#_project_key_features">Key Features</a> - what makes it special</li> +<li><a href="https://stnolting.github.io/neorv32/#_project_folder_structure">Structure</a> - folders, RTL files and compile order</li> +<li><a href="https://stnolting.github.io/neorv32/#_file_list_files">File-List Files</a> - to simplify HDL setup</li> +<li><a href="https://stnolting.github.io/neorv32/#_fpga_implementation_results">Metrics</a> - FPGA implementation and performance evaluation</li> +</ul> +<h3><a class="anchor" id="autotoc_md9"></a> +:desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc">NEORV32 Processor</a> - The SoC</h3> +<ul> +<li><a href="https://stnolting.github.io/neorv32/#_processor_top_entity_signals">Top Entity - Signals</a> - how to connect to the processor</li> +<li><a href="https://stnolting.github.io/neorv32/#_processor_top_entity_generics">Top Entity - Generics</a> - processor/CPU configuration options</li> +<li><a href="https://stnolting.github.io/neorv32/#_address_space">Address Space</a> - memory layout and address mapping</li> +<li><a href="https://stnolting.github.io/neorv32/#_boot_configuration">Boot Configuration</a> - how to make the processor start executing</li> +<li><a href="https://stnolting.github.io/neorv32/#_processor_internal_modules">SoC Modules</a> - IO/peripheral modules and memories</li> +<li><a href="https://stnolting.github.io/neorv32/#_on_chip_debugger_ocd">On-Chip Debugger</a> - in-system debugging of the processor via JTAG</li> +</ul> +<h3><a class="anchor" id="autotoc_md10"></a> +:abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu">NEORV32 CPU</a> - The Core</h3> +<ul> +<li><a href="https://stnolting.github.io/neorv32/#_risc_v_compatibility">RISC-V Compatibility</a> - what is compatible to the specs and what is not</li> +<li><a href="https://stnolting.github.io/neorv32/#_architecture">Architecture</a> - a look under the hood</li> +<li><a href="https://stnolting.github.io/neorv32/#_full_virtualization">Full Virtualization</a> - execution safety</li> +<li><a href="https://stnolting.github.io/neorv32/#_instruction_sets_and_extensions">ISA and Extensions</a> - available (RISC-V) ISA extensions</li> +<li><a href="https://stnolting.github.io/neorv32/#_control_and_status_registers_csrs">CSRs</a> - control and status registers</li> +<li><a href="https://stnolting.github.io/neorv32/#_traps_exceptions_and_interrupts">Traps</a> - interrupts and exceptions</li> +</ul> +<h3><a class="anchor" id="autotoc_md11"></a> +:floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework">Software Framework</a> - The Software Ecosystem</h3> +<ul> +<li><a href="https://github.com/stnolting/neorv32/tree/main/sw/example">Example Programs</a> - examples how to use the processor's IO/peripheral modules</li> +<li><a href="https://stnolting.github.io/neorv32/#_core_libraries">Core Libraries</a> - high-level functions for accessing the processor's peripherals</li> +<li><a href="https://stnolting.github.io/neorv32/sw/files.html">Software Framework Documentation</a> - <em>doxygen</em>-based</li> +<li><a href="https://stnolting.github.io/neorv32/#_application_makefile">Application Makefile</a> - turning <em>your</em> application into an executable</li> +<li><a href="https://stnolting.github.io/neorv32/#_bootloader">Bootloader</a> - the build-in NEORV32 bootloader</li> +<li><a href="https://stnolting.github.io/neorv32/#_executable_image_format">Image Generator</a> - create (FPGA) memory initialization files from your application</li> +</ul> +<h3><a class="anchor" id="autotoc_md12"></a> +:rocket: <a href="https://stnolting.github.io/neorv32/ug/">User Guide</a> - Let's Get It Started</h3> +<ul> +<li><a href="https://stnolting.github.io/neorv32/ug/#_software_toolchain_setup">Toolchain Setup</a> - install and set up the RISC-V GCC toolchain</li> +<li><a href="https://stnolting.github.io/neorv32/ug/#_general_hardware_setup">General Hardware Setup</a> - set up a new NEORV32 FPGA project</li> +<li><a href="https://stnolting.github.io/neorv32/ug/#_general_software_framework_setup">General Software Setup</a> - configure the software framework</li> +<li><a href="https://stnolting.github.io/neorv32/ug/#_application_program_compilation">Application Compilation</a> - compile an application using <em>make</em></li> +<li><a href="https://stnolting.github.io/neorv32/ug/#_uploading_and_starting_of_a_binary_executable_image_via_uart">Upload via Bootloader</a> - upload and execute executables</li> +<li><a href="https://stnolting.github.io/neorv32/ug/#_application_specific_processor_configuration">Application-Specific Processor Configuration</a> - tailor the processor to your needs</li> +<li><a href="https://stnolting.github.io/neorv32/ug/#_adding_custom_hardware_modules">Adding Custom Hardware Modules</a> - add <em>your</em> custom hardware</li> +<li><a href="https://stnolting.github.io/neorv32/ug/#_debugging_using_the_on_chip_debugger">Debugging via the On-Chip Debugger</a> - step through code <em>online</em> and <em>in-system</em></li> +<li><a href="https://stnolting.github.io/neorv32/ug/#_simulating_the_processor">Simulation</a> - simulate the whole SoC</li> +<li><a href="https://stnolting.github.io/neorv32/ug/#_litex_soc_builder_support">LiteX Integration</a> - build a SoC using NEORV32 + <a href="https://github.com/enjoy-digital/litex">LiteX</a></li> +<li><a href="https://stnolting.github.io/neorv32/ug/#_neorv32_in_verilog">Convert to Verilog</a> - turn the NEORV32 into an all-Verilog design</li> +<li><a href="https://stnolting.github.io/neorv32/ug/#_packaging_the_processor_as_vivado_ip_block">Package as Vivado IP block</a> - turn the entire processor into an interactive AMD Vivado IP block</li> +<li><a href="https://stnolting.github.io/neorv32/ug/#_eclipse_ide">Using Eclipse</a> - use the Eclipse IDE for developing and debugging</li> +</ul> +<h3><a class="anchor" id="autotoc_md13"></a> +:copyright: Legal</h3> +<p><a href="https://github.com/stnolting/neorv32/blob/main/LICENSE"><img src="https://img.shields.io/github/license/stnolting/neorv32?longCache=true&amp;style=flat" alt="license" class="inline"/></a> <a href="https://doi.org/10.5281/zenodo.5018888"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.5018888.svg" alt="DOI" style="pointer-events: none;" class="inline"/></a></p> +<ul> +<li><a href="https://stnolting.github.io/neorv32/#_legal">Overview</a> - license, disclaimer, limitation of liability for external links, proprietary notice, etc.</li> +<li><a href="https://stnolting.github.io/neorv32/#_citing">Citing</a> - citing information</li> +</ul> +<p>This is an open-source project that is free of charge. Use this project in any way you like (as long as it complies to the permissive <a href="https://github.com/stnolting/neorv32/blob/main/LICENSE">license</a>). Please cite it appropriately. :+1:</p> +<hr /> +<p><b>:heart: A big shout-out to the community and all the <a href="https://github.com/stnolting/neorv32/graphs/contributors">contributors</a> - this project would not be where it is without them!</b> </p> +</div></div><!-- contents --> +</div><!-- PageDoc --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/menu.js b/sw/menu.js new file mode 100644 index 0000000000..0fd1e99013 --- /dev/null +++ b/sw/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='<ul>'; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='<li><a href="'+url+'">'+ + data.children[i].text+'</a>'+ + makeTree(data.children[i],relPath)+'</li>'; + } + result+='</ul>'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+ + '<div class="left">'+ + '<form id="FSearchBox" action="'+relPath+searchPage+ + '" method="get"><span id="MSearchSelectExt">&#160;</span>'+ + '<input type="text" id="MSearchField" name="query" value="" placeholder="'+search+ + '" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)"'+ + ' onblur="searchBox.OnSearchFieldFocus(false)"/>'+ + '</form>'+ + '</div>'+ + '<div class="right"></div>'+ + '</div>'; + } else { + searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+ + '<span class="left">'+ + '<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()"'+ + ' onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>'+ + '<input type="text" id="MSearchField" value="" placeholder="'+search+ + '" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" '+ + 'onblur="searchBox.OnSearchFieldFocus(false)" '+ + 'onkeyup="searchBox.OnSearchFieldChange(event)"/>'+ + '</span>'+ + '<span class="right"><a id="MSearchClose" '+ + 'href="javascript:searchBox.CloseResultsWindow()">'+ + '<img id="MSearchCloseImg" border="0" src="'+relPath+ + 'search/close.svg" alt=""/></a>'+ + '</span>'+ + '</div>'; + } + } + + $('#main-nav').before('<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>'+ + '<label class="main-menu-btn" for="main-menu-state">'+ + '<span class="main-menu-btn-icon"></span> '+ + 'Toggle main menu visibility</label>'+ + '<span id="searchBoxPos1" style="position:absolute;right:8px;top:8px;height:36px;"></span>'+ + '</div>'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('<li id="searchBoxPos2" style="float:right"></li>'); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/sw/menudata.js b/sw/menudata.js new file mode 100644 index 0000000000..794a4d53fb --- /dev/null +++ b/sw/menudata.js @@ -0,0 +1,151 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Data Structures",url:"annotated.html",children:[ +{text:"Data Structures",url:"annotated.html"}, +{text:"Data Structure Index",url:"classes.html"}, +{text:"Data Fields",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"b",url:"functions.html#index_b"}, +{text:"c",url:"functions.html#index_c"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"h",url:"functions.html#index_h"}, +{text:"i",url:"functions.html#index_i"}, +{text:"m",url:"functions.html#index_m"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}, +{text:"w",url:"functions.html#index_w"}, +{text:"y",url:"functions.html#index_y"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"b",url:"functions_vars.html#index_b"}, +{text:"c",url:"functions_vars.html#index_c"}, +{text:"d",url:"functions_vars.html#index_d"}, +{text:"e",url:"functions_vars.html#index_e"}, +{text:"f",url:"functions_vars.html#index_f"}, +{text:"h",url:"functions_vars.html#index_h"}, +{text:"i",url:"functions_vars.html#index_i"}, +{text:"m",url:"functions_vars.html#index_m"}, +{text:"o",url:"functions_vars.html#index_o"}, +{text:"p",url:"functions_vars.html#index_p"}, +{text:"r",url:"functions_vars.html#index_r"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"t",url:"functions_vars.html#index_t"}, +{text:"u",url:"functions_vars.html#index_u"}, +{text:"w",url:"functions_vars.html#index_w"}, +{text:"y",url:"functions_vars.html#index_y"}]}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"Globals",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"_",url:"globals.html#index__5F"}, +{text:"a",url:"globals_a.html#index_a"}, +{text:"b",url:"globals_b.html#index_b"}, +{text:"c",url:"globals_c.html#index_c"}, +{text:"d",url:"globals_d.html#index_d"}, +{text:"e",url:"globals_e.html#index_e"}, +{text:"f",url:"globals_f.html#index_f"}, +{text:"g",url:"globals_g.html#index_g"}, +{text:"h",url:"globals_h.html#index_h"}, +{text:"i",url:"globals_i.html#index_i"}, +{text:"k",url:"globals_k.html#index_k"}, +{text:"m",url:"globals_m.html#index_m"}, +{text:"n",url:"globals_n.html#index_n"}, +{text:"o",url:"globals_o.html#index_o"}, +{text:"p",url:"globals_p.html#index_p"}, +{text:"r",url:"globals_r.html#index_r"}, +{text:"s",url:"globals_s.html#index_s"}, +{text:"t",url:"globals_t.html#index_t"}, +{text:"u",url:"globals_u.html#index_u"}, +{text:"v",url:"globals_v.html#index_v"}, +{text:"w",url:"globals_w.html#index_w"}, +{text:"x",url:"globals_x.html#index_x"}]}, +{text:"Functions",url:"globals_func.html",children:[ +{text:"_",url:"globals_func.html#index__5F"}, +{text:"a",url:"globals_func_a.html#index_a"}, +{text:"b",url:"globals_func_b.html#index_b"}, +{text:"c",url:"globals_func_c.html#index_c"}, +{text:"d",url:"globals_func_d.html#index_d"}, +{text:"g",url:"globals_func_g.html#index_g"}, +{text:"h",url:"globals_func_h.html#index_h"}, +{text:"m",url:"globals_func_m.html#index_m"}, +{text:"n",url:"globals_func_n.html#index_n"}, +{text:"p",url:"globals_func_p.html#index_p"}, +{text:"r",url:"globals_func_r.html#index_r"}, +{text:"s",url:"globals_func_s.html#index_s"}, +{text:"t",url:"globals_func_t.html#index_t"}, +{text:"u",url:"globals_func_u.html#index_u"}, +{text:"v",url:"globals_func_v.html#index_v"}, +{text:"w",url:"globals_func_w.html#index_w"}, +{text:"x",url:"globals_func_x.html#index_x"}]}, +{text:"Variables",url:"globals_vars.html"}, +{text:"Enumerations",url:"globals_enum.html",children:[ +{text:"c",url:"globals_enum.html#index_c"}, +{text:"e",url:"globals_enum.html#index_e"}, +{text:"n",url:"globals_enum.html#index_n"}, +{text:"s",url:"globals_enum.html#index_s"}, +{text:"x",url:"globals_enum.html#index_x"}]}, +{text:"Enumerator",url:"globals_eval.html",children:[ +{text:"c",url:"globals_eval.html#index_c"}, +{text:"d",url:"globals_eval_d.html#index_d"}, +{text:"e",url:"globals_eval_e.html#index_e"}, +{text:"f",url:"globals_eval_f.html#index_f"}, +{text:"g",url:"globals_eval_g.html#index_g"}, +{text:"h",url:"globals_eval_h.html#index_h"}, +{text:"n",url:"globals_eval_n.html#index_n"}, +{text:"o",url:"globals_eval_o.html#index_o"}, +{text:"p",url:"globals_eval_p.html#index_p"}, +{text:"r",url:"globals_eval_r.html#index_r"}, +{text:"s",url:"globals_eval_s.html#index_s"}, +{text:"t",url:"globals_eval_t.html#index_t"}, +{text:"u",url:"globals_eval_u.html#index_u"}, +{text:"w",url:"globals_eval_w.html#index_w"}, +{text:"x",url:"globals_eval_x.html#index_x"}]}, +{text:"Macros",url:"globals_defs.html",children:[ +{text:"a",url:"globals_defs.html#index_a"}, +{text:"b",url:"globals_defs_b.html#index_b"}, +{text:"c",url:"globals_defs_c.html#index_c"}, +{text:"d",url:"globals_defs_d.html#index_d"}, +{text:"e",url:"globals_defs_e.html#index_e"}, +{text:"f",url:"globals_defs_f.html#index_f"}, +{text:"g",url:"globals_defs_g.html#index_g"}, +{text:"i",url:"globals_defs_i.html#index_i"}, +{text:"m",url:"globals_defs_m.html#index_m"}, +{text:"n",url:"globals_defs_n.html#index_n"}, +{text:"o",url:"globals_defs_o.html#index_o"}, +{text:"p",url:"globals_defs_p.html#index_p"}, +{text:"r",url:"globals_defs_r.html#index_r"}, +{text:"s",url:"globals_defs_s.html#index_s"}, +{text:"t",url:"globals_defs_t.html#index_t"}, +{text:"u",url:"globals_defs_u.html#index_u"}, +{text:"w",url:"globals_defs_w.html#index_w"}, +{text:"x",url:"globals_defs_x.html#index_x"}]}]}]}]} diff --git a/sw/minus.svg b/sw/minus.svg new file mode 100644 index 0000000000..f70d0c1a18 --- /dev/null +++ b/sw/minus.svg @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> + <g> + <rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" /> + <rect style="fill:#fcfcfc;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" /> + <rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" /> + </g> +</svg> diff --git a/sw/minusd.svg b/sw/minusd.svg new file mode 100644 index 0000000000..5f8e879628 --- /dev/null +++ b/sw/minusd.svg @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> + <g> + <rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" /> + <rect style="fill:#000000;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" /> + <rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" /> + </g> +</svg> diff --git a/sw/nav_f.png b/sw/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_<lqdB{jiFDSaaN3W^xbJMH7CDK7=Q3_$6tQ&<~Cp4L6ZEndC`8;cO zrss?`_g+2sGU&M|cu~La_w1Rnf~7w`e!jQgteDwDLg6kW!`DinT@0SCelF{r5}E+Y CM>z8U literal 0 HcmV?d00001 diff --git a/sw/nav_fd.png b/sw/nav_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt<j{B<-5i=y8aRCp6>7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S literal 0 HcmV?d00001 diff --git a/sw/nav_g.png b/sw/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!K<?EJwDd;c`qumW{3c)I$ztaD0e0syCC7$E=v literal 0 HcmV?d00001 diff --git a/sw/nav_h.png b/sw/nav_h.png new file mode 100644 index 0000000000000000000000000000000000000000..33389b101d9cd9b4c98ad286b5d9c46a6671f650 GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t22D>F$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&v<Kx}xDV3h>FVdQ&MBb@0HFXL<NyEw literal 0 HcmV?d00001 diff --git a/sw/nav_hd.png b/sw/nav_hd.png new file mode 100644 index 0000000000000000000000000000000000000000..de80f18ad6488b9990303f267a76fdc83f0ffd80 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t21`#D$B+ufw|9379#G(63FK{W z5s<eodL#E@zbS9{Dekh>6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} literal 0 HcmV?d00001 diff --git a/sw/navtree.css b/sw/navtree.css new file mode 100644 index 0000000000..69211d4a78 --- /dev/null +++ b/sw/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: var(--nav-text-active-color); + text-shadow: var(--nav-text-active-shadow); +} + +#nav-tree .selected .arrow { + color: var(--nav-arrow-selected-color); + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px var(--font-family-nav); +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:var(--nav-text-active-color); +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:var(--nav-splitbar-image); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: var(--nav-background-color); + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/sw/neorv32_8h.html b/sw/neorv32_8h.html new file mode 100644 index 0000000000..36b21553eb --- /dev/null +++ b/sw/neorv32_8h.html @@ -0,0 +1,1867 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Main NEORV32 core library / driver / HAL include file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +<code>#include &lt;inttypes.h&gt;</code><br /> +<code>#include &lt;unistd.h&gt;</code><br /> +<code>#include &lt;stdlib.h&gt;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__intrinsics_8h_source.html">neorv32_intrinsics.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__aux_8h_source.html">neorv32_aux.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__legacy_8h_source.html">neorv32_legacy.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__cpu_8h_source.html">neorv32_cpu.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__cpu__amo_8h_source.html">neorv32_cpu_amo.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__cpu__csr_8h_source.html">neorv32_cpu_csr.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__cpu__cfu_8h_source.html">neorv32_cpu_cfu.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__rte_8h_source.html">neorv32_rte.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__cfs_8h_source.html">neorv32_cfs.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__clint_8h_source.html">neorv32_clint.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__crc_8h_source.html">neorv32_crc.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__dma_8h_source.html">neorv32_dma.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__gpio_8h_source.html">neorv32_gpio.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__gptmr_8h_source.html">neorv32_gptmr.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__neoled_8h_source.html">neorv32_neoled.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__onewire_8h_source.html">neorv32_onewire.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__pwm_8h_source.html">neorv32_pwm.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__sdi_8h_source.html">neorv32_sdi.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__slink_8h_source.html">neorv32_slink.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__spi_8h_source.html">neorv32_spi.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__sysinfo_8h_source.html">neorv32_sysinfo.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__trng_8h_source.html">neorv32_trng.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__twd_8h_source.html">neorv32_twd.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__twi_8h_source.html">neorv32_twi.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__uart_8h_source.html">neorv32_uart.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__wdt_8h_source.html">neorv32_wdt.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__xip_8h_source.html">neorv32_xip.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__xirq_8h_source.html">neorv32_xirq.h</a>&quot;</code><br /> +</div> +<p><a href="neorv32_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="unionsubwords64__t.html">subwords64_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="unionsubwords32__t.html">subwords32_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="unionsubwords16__t.html">subwords16_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Main Address Space Sections</div></td></tr> +<tr class="memitem:aa01bea676e878a9e87ca10ce2d91e51f" id="r_aa01bea676e878a9e87ca10ce2d91e51f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa01bea676e878a9e87ca10ce2d91e51f">XIP_MEM_BASE_ADDRESS</a>&#160;&#160;&#160;(0xE0000000U)</td></tr> +<tr class="separator:aa01bea676e878a9e87ca10ce2d91e51f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1eb0cb7fed7e154e15cb4009880a879c" id="r_a1eb0cb7fed7e154e15cb4009880a879c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1eb0cb7fed7e154e15cb4009880a879c">IO_BASE_ADDRESS</a>&#160;&#160;&#160;(0XFFE00000U)</td></tr> +<tr class="separator:a1eb0cb7fed7e154e15cb4009880a879c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">IO Address Space Map - Peripheral/IO Devices</div></td></tr> +<tr class="memitem:a9af9742516d8f0e43cee33882ea41157" id="r_a9af9742516d8f0e43cee33882ea41157"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9af9742516d8f0e43cee33882ea41157">NEORV32_BOOTROM_BASE</a>&#160;&#160;&#160;(0xFFE00000U)</td></tr> +<tr class="separator:a9af9742516d8f0e43cee33882ea41157"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8ac9e39bd62e9c5d7bcde0d44716b958" id="r_a8ac9e39bd62e9c5d7bcde0d44716b958"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8ac9e39bd62e9c5d7bcde0d44716b958">NEORV32_TWD_BASE</a>&#160;&#160;&#160;(0xFFEA0000U)</td></tr> +<tr class="separator:a8ac9e39bd62e9c5d7bcde0d44716b958"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a41d6f97daef61641da96b9f72f6b272f" id="r_a41d6f97daef61641da96b9f72f6b272f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a41d6f97daef61641da96b9f72f6b272f">NEORV32_CFS_BASE</a>&#160;&#160;&#160;(0xFFEB0000U)</td></tr> +<tr class="separator:a41d6f97daef61641da96b9f72f6b272f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab5e6dc57886cd5ed98b86f22fc37d7cc" id="r_ab5e6dc57886cd5ed98b86f22fc37d7cc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab5e6dc57886cd5ed98b86f22fc37d7cc">NEORV32_SLINK_BASE</a>&#160;&#160;&#160;(0xFFEC0000U)</td></tr> +<tr class="separator:ab5e6dc57886cd5ed98b86f22fc37d7cc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa8d3a83ffad1e71f0832a5da78d62008" id="r_aa8d3a83ffad1e71f0832a5da78d62008"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa8d3a83ffad1e71f0832a5da78d62008">NEORV32_DMA_BASE</a>&#160;&#160;&#160;(0xFFED0000U)</td></tr> +<tr class="separator:aa8d3a83ffad1e71f0832a5da78d62008"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0e2377055bdc0f416b5ae4385610600d" id="r_a0e2377055bdc0f416b5ae4385610600d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0e2377055bdc0f416b5ae4385610600d">NEORV32_CRC_BASE</a>&#160;&#160;&#160;(0xFFEE0000U)</td></tr> +<tr class="separator:a0e2377055bdc0f416b5ae4385610600d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae0978315beac8399f96f520bda81c7fe" id="r_ae0978315beac8399f96f520bda81c7fe"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae0978315beac8399f96f520bda81c7fe">NEORV32_XIP_BASE</a>&#160;&#160;&#160;(0xFFEF0000U)</td></tr> +<tr class="separator:ae0978315beac8399f96f520bda81c7fe"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afef7a6b121a788560b29e2ee2a58c725" id="r_afef7a6b121a788560b29e2ee2a58c725"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afef7a6b121a788560b29e2ee2a58c725">NEORV32_PWM_BASE</a>&#160;&#160;&#160;(0xFFF00000U)</td></tr> +<tr class="separator:afef7a6b121a788560b29e2ee2a58c725"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0991b1a5ba1e8c3550eb9770d43589d0" id="r_a0991b1a5ba1e8c3550eb9770d43589d0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0991b1a5ba1e8c3550eb9770d43589d0">NEORV32_GPTMR_BASE</a>&#160;&#160;&#160;(0xFFF10000U)</td></tr> +<tr class="separator:a0991b1a5ba1e8c3550eb9770d43589d0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8d0b612e52b77395a05d4f18af6fcf00" id="r_a8d0b612e52b77395a05d4f18af6fcf00"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8d0b612e52b77395a05d4f18af6fcf00">NEORV32_ONEWIRE_BASE</a>&#160;&#160;&#160;(0xFFF20000U)</td></tr> +<tr class="separator:a8d0b612e52b77395a05d4f18af6fcf00"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a942a897be2d4ae6820bee0f7bb3a0ff1" id="r_a942a897be2d4ae6820bee0f7bb3a0ff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a942a897be2d4ae6820bee0f7bb3a0ff1">NEORV32_XIRQ_BASE</a>&#160;&#160;&#160;(0xFFF30000U)</td></tr> +<tr class="separator:a942a897be2d4ae6820bee0f7bb3a0ff1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab1522f52c3c24ba2245dfa2783932d42" id="r_ab1522f52c3c24ba2245dfa2783932d42"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab1522f52c3c24ba2245dfa2783932d42">NEORV32_CLINT_BASE</a>&#160;&#160;&#160;(0xFFF40000U)</td></tr> +<tr class="separator:ab1522f52c3c24ba2245dfa2783932d42"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a000b37f710043fe21e49b2fdbc039d94" id="r_a000b37f710043fe21e49b2fdbc039d94"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a000b37f710043fe21e49b2fdbc039d94">NEORV32_UART0_BASE</a>&#160;&#160;&#160;(0xFFF50000U)</td></tr> +<tr class="separator:a000b37f710043fe21e49b2fdbc039d94"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a26a1defe18ce222b8b4ed1c760344700" id="r_a26a1defe18ce222b8b4ed1c760344700"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a26a1defe18ce222b8b4ed1c760344700">NEORV32_UART1_BASE</a>&#160;&#160;&#160;(0xFFF60000U)</td></tr> +<tr class="separator:a26a1defe18ce222b8b4ed1c760344700"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9b316ec038bd94ada42c9dab57a0a3cb" id="r_a9b316ec038bd94ada42c9dab57a0a3cb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9b316ec038bd94ada42c9dab57a0a3cb">NEORV32_SDI_BASE</a>&#160;&#160;&#160;(0xFFF70000U)</td></tr> +<tr class="separator:a9b316ec038bd94ada42c9dab57a0a3cb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa466dc5eace7351bd438606f0f7475a7" id="r_aa466dc5eace7351bd438606f0f7475a7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa466dc5eace7351bd438606f0f7475a7">NEORV32_SPI_BASE</a>&#160;&#160;&#160;(0xFFF80000U)</td></tr> +<tr class="separator:aa466dc5eace7351bd438606f0f7475a7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4a741408a4bb0938e03b99555306db9c" id="r_a4a741408a4bb0938e03b99555306db9c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4a741408a4bb0938e03b99555306db9c">NEORV32_TWI_BASE</a>&#160;&#160;&#160;(0xFFF90000U)</td></tr> +<tr class="separator:a4a741408a4bb0938e03b99555306db9c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab4846cd153e8a23deec45d81cc8372a2" id="r_ab4846cd153e8a23deec45d81cc8372a2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab4846cd153e8a23deec45d81cc8372a2">NEORV32_TRNG_BASE</a>&#160;&#160;&#160;(0xFFFA0000U)</td></tr> +<tr class="separator:ab4846cd153e8a23deec45d81cc8372a2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3012986cdd5748ee96bcc74cd7108dea" id="r_a3012986cdd5748ee96bcc74cd7108dea"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3012986cdd5748ee96bcc74cd7108dea">NEORV32_WDT_BASE</a>&#160;&#160;&#160;(0xFFFB0000U)</td></tr> +<tr class="separator:a3012986cdd5748ee96bcc74cd7108dea"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7fd1e24d4de2eed7bf9cd5391562c7f4" id="r_a7fd1e24d4de2eed7bf9cd5391562c7f4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7fd1e24d4de2eed7bf9cd5391562c7f4">NEORV32_GPIO_BASE</a>&#160;&#160;&#160;(0xFFFC0000U)</td></tr> +<tr class="separator:a7fd1e24d4de2eed7bf9cd5391562c7f4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a559fdce92e8af5efc426c8fc48d14f99" id="r_a559fdce92e8af5efc426c8fc48d14f99"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a559fdce92e8af5efc426c8fc48d14f99">NEORV32_NEOLED_BASE</a>&#160;&#160;&#160;(0xFFFD0000U)</td></tr> +<tr class="separator:a559fdce92e8af5efc426c8fc48d14f99"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5aa936f38782232c7ed3eab1283ee536" id="r_a5aa936f38782232c7ed3eab1283ee536"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5aa936f38782232c7ed3eab1283ee536">NEORV32_SYSINFO_BASE</a>&#160;&#160;&#160;(0xFFFE0000U)</td></tr> +<tr class="separator:a5aa936f38782232c7ed3eab1283ee536"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9bf0149681677f7d87abf8f62e2d9a3d" id="r_a9bf0149681677f7d87abf8f62e2d9a3d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9bf0149681677f7d87abf8f62e2d9a3d">NEORV32_DM_BASE</a>&#160;&#160;&#160;(0xFFFF0000U)</td></tr> +<tr class="separator:a9bf0149681677f7d87abf8f62e2d9a3d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Two-Wire Device (TWD)</div></td></tr> +<tr class="memitem:a7cd6e1c5a9213256b277d8ef74bfb564" id="r_a7cd6e1c5a9213256b277d8ef74bfb564"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7cd6e1c5a9213256b277d8ef74bfb564">TWD_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d">CSR_MIE_FIRQ0E</a></td></tr> +<tr class="separator:a7cd6e1c5a9213256b277d8ef74bfb564"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab61a869973c8d027360f9c1f47fb5b01" id="r_ab61a869973c8d027360f9c1f47fb5b01"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab61a869973c8d027360f9c1f47fb5b01">TWD_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00">CSR_MIP_FIRQ0P</a></td></tr> +<tr class="separator:ab61a869973c8d027360f9c1f47fb5b01"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad00097ae9632a0f11c0dab96e272cff5" id="r_ad00097ae9632a0f11c0dab96e272cff5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad00097ae9632a0f11c0dab96e272cff5">TWD_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922">RTE_TRAP_FIRQ_0</a></td></tr> +<tr class="separator:ad00097ae9632a0f11c0dab96e272cff5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3dc1579e0bd1718b8f24cda6b54ae43a" id="r_a3dc1579e0bd1718b8f24cda6b54ae43a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3dc1579e0bd1718b8f24cda6b54ae43a">TWD_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1">TRAP_CODE_FIRQ_0</a></td></tr> +<tr class="separator:a3dc1579e0bd1718b8f24cda6b54ae43a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Custom Functions Subsystem (CFS)</div></td></tr> +<tr class="memitem:ace79ee46daf3a1b689d9fe79dfcd6627" id="r_ace79ee46daf3a1b689d9fe79dfcd6627"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ace79ee46daf3a1b689d9fe79dfcd6627">CFS_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb">CSR_MIE_FIRQ1E</a></td></tr> +<tr class="separator:ace79ee46daf3a1b689d9fe79dfcd6627"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aae182648a2c23d070b9db0295388e001" id="r_aae182648a2c23d070b9db0295388e001"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aae182648a2c23d070b9db0295388e001">CFS_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52">CSR_MIP_FIRQ1P</a></td></tr> +<tr class="separator:aae182648a2c23d070b9db0295388e001"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a095f41fbefaa7acc1bfdd65cd3ce06ea" id="r_a095f41fbefaa7acc1bfdd65cd3ce06ea"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a095f41fbefaa7acc1bfdd65cd3ce06ea">CFS_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd">RTE_TRAP_FIRQ_1</a></td></tr> +<tr class="separator:a095f41fbefaa7acc1bfdd65cd3ce06ea"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aae6b2ae3fba20ff80bfb59735f179c26" id="r_aae6b2ae3fba20ff80bfb59735f179c26"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aae6b2ae3fba20ff80bfb59735f179c26">CFS_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7">TRAP_CODE_FIRQ_1</a></td></tr> +<tr class="separator:aae6b2ae3fba20ff80bfb59735f179c26"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Primary Universal Asynchronous Receiver/Transmitter (UART0)</div></td></tr> +<tr class="memitem:a6b55ce6abe6b141000a6bb00949169e9" id="r_a6b55ce6abe6b141000a6bb00949169e9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6b55ce6abe6b141000a6bb00949169e9">UART0_RX_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7">CSR_MIE_FIRQ2E</a></td></tr> +<tr class="separator:a6b55ce6abe6b141000a6bb00949169e9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0b738b26abb2b951f1f5c5d9525d7701" id="r_a0b738b26abb2b951f1f5c5d9525d7701"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0b738b26abb2b951f1f5c5d9525d7701">UART0_RX_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e">CSR_MIP_FIRQ2P</a></td></tr> +<tr class="separator:a0b738b26abb2b951f1f5c5d9525d7701"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae8588cca20d5e36f74c5207c376389a1" id="r_ae8588cca20d5e36f74c5207c376389a1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae8588cca20d5e36f74c5207c376389a1">UART0_RX_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489">RTE_TRAP_FIRQ_2</a></td></tr> +<tr class="separator:ae8588cca20d5e36f74c5207c376389a1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7a849638eff31f2e1955bdc53d4fc84d" id="r_a7a849638eff31f2e1955bdc53d4fc84d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7a849638eff31f2e1955bdc53d4fc84d">UART0_RX_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7">TRAP_CODE_FIRQ_2</a></td></tr> +<tr class="separator:a7a849638eff31f2e1955bdc53d4fc84d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aff756a395771f22c5f412f23f177ea7d" id="r_aff756a395771f22c5f412f23f177ea7d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aff756a395771f22c5f412f23f177ea7d">UART0_TX_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db">CSR_MIE_FIRQ3E</a></td></tr> +<tr class="separator:aff756a395771f22c5f412f23f177ea7d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:addbe29166bb77bc045ad0e3db68e57e9" id="r_addbe29166bb77bc045ad0e3db68e57e9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#addbe29166bb77bc045ad0e3db68e57e9">UART0_TX_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155">CSR_MIP_FIRQ3P</a></td></tr> +<tr class="separator:addbe29166bb77bc045ad0e3db68e57e9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9dc37695ca169bc0eb93898e7aeeee58" id="r_a9dc37695ca169bc0eb93898e7aeeee58"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9dc37695ca169bc0eb93898e7aeeee58">UART0_TX_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be">RTE_TRAP_FIRQ_3</a></td></tr> +<tr class="separator:a9dc37695ca169bc0eb93898e7aeeee58"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab50df423fdba86bb83bc5d90a4c3bb20" id="r_ab50df423fdba86bb83bc5d90a4c3bb20"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab50df423fdba86bb83bc5d90a4c3bb20">UART0_TX_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0">TRAP_CODE_FIRQ_3</a></td></tr> +<tr class="separator:ab50df423fdba86bb83bc5d90a4c3bb20"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Secondary Universal Asynchronous Receiver/Transmitter (UART1)</div></td></tr> +<tr class="memitem:a6c118c1784d8446360b00cde97437ca7" id="r_a6c118c1784d8446360b00cde97437ca7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6c118c1784d8446360b00cde97437ca7">UART1_RX_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc">CSR_MIE_FIRQ4E</a></td></tr> +<tr class="separator:a6c118c1784d8446360b00cde97437ca7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2e70d3a4e2973d224643813fcf315a20" id="r_a2e70d3a4e2973d224643813fcf315a20"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2e70d3a4e2973d224643813fcf315a20">UART1_RX_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8">CSR_MIP_FIRQ4P</a></td></tr> +<tr class="separator:a2e70d3a4e2973d224643813fcf315a20"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab1c351f5ea19ac9ea864155be9cc0b4b" id="r_ab1c351f5ea19ac9ea864155be9cc0b4b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab1c351f5ea19ac9ea864155be9cc0b4b">UART1_RX_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff">RTE_TRAP_FIRQ_4</a></td></tr> +<tr class="separator:ab1c351f5ea19ac9ea864155be9cc0b4b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad0b9eb2ee1f411d7fccdf4fe263214e1" id="r_ad0b9eb2ee1f411d7fccdf4fe263214e1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad0b9eb2ee1f411d7fccdf4fe263214e1">UART1_RX_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547">TRAP_CODE_FIRQ_4</a></td></tr> +<tr class="separator:ad0b9eb2ee1f411d7fccdf4fe263214e1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0039bae3454a22e71d64e70d674f5d6a" id="r_a0039bae3454a22e71d64e70d674f5d6a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0039bae3454a22e71d64e70d674f5d6a">UART1_TX_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698">CSR_MIE_FIRQ5E</a></td></tr> +<tr class="separator:a0039bae3454a22e71d64e70d674f5d6a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac4060532b7aa390623f54720460a2680" id="r_ac4060532b7aa390623f54720460a2680"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac4060532b7aa390623f54720460a2680">UART1_TX_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677">CSR_MIP_FIRQ5P</a></td></tr> +<tr class="separator:ac4060532b7aa390623f54720460a2680"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6af270d7ae8b1cde30e44eb9142491d3" id="r_a6af270d7ae8b1cde30e44eb9142491d3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6af270d7ae8b1cde30e44eb9142491d3">UART1_TX_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9">RTE_TRAP_FIRQ_5</a></td></tr> +<tr class="separator:a6af270d7ae8b1cde30e44eb9142491d3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4cc50287c7a53982761a8116396ff7dd" id="r_a4cc50287c7a53982761a8116396ff7dd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4cc50287c7a53982761a8116396ff7dd">UART1_TX_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757">TRAP_CODE_FIRQ_5</a></td></tr> +<tr class="separator:a4cc50287c7a53982761a8116396ff7dd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Serial Peripheral Interface (SPI)</div></td></tr> +<tr class="memitem:ab8fcd3f80c373eb0f9d0fc6bf64ca626" id="r_ab8fcd3f80c373eb0f9d0fc6bf64ca626"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab8fcd3f80c373eb0f9d0fc6bf64ca626">SPI_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a">CSR_MIE_FIRQ6E</a></td></tr> +<tr class="separator:ab8fcd3f80c373eb0f9d0fc6bf64ca626"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab2f58f746febb29a9828447c733f8043" id="r_ab2f58f746febb29a9828447c733f8043"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab2f58f746febb29a9828447c733f8043">SPI_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e">CSR_MIP_FIRQ6P</a></td></tr> +<tr class="separator:ab2f58f746febb29a9828447c733f8043"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4c1cd9ec9f80da2080e5d0d35cc524dd" id="r_a4c1cd9ec9f80da2080e5d0d35cc524dd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4c1cd9ec9f80da2080e5d0d35cc524dd">SPI_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998">RTE_TRAP_FIRQ_6</a></td></tr> +<tr class="separator:a4c1cd9ec9f80da2080e5d0d35cc524dd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a83c212f1f5d8ee2a5921b3b2b19e9cc4" id="r_a83c212f1f5d8ee2a5921b3b2b19e9cc4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a83c212f1f5d8ee2a5921b3b2b19e9cc4">SPI_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473">TRAP_CODE_FIRQ_6</a></td></tr> +<tr class="separator:a83c212f1f5d8ee2a5921b3b2b19e9cc4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Two-Wire Interface (TWI)</div></td></tr> +<tr class="memitem:a0913144fce247e24ccd0f178b9ac32b7" id="r_a0913144fce247e24ccd0f178b9ac32b7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0913144fce247e24ccd0f178b9ac32b7">TWI_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8">CSR_MIE_FIRQ7E</a></td></tr> +<tr class="separator:a0913144fce247e24ccd0f178b9ac32b7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a48b80113ca718fbdc50d75e1ec96a1ff" id="r_a48b80113ca718fbdc50d75e1ec96a1ff"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a48b80113ca718fbdc50d75e1ec96a1ff">TWI_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a">CSR_MIP_FIRQ7P</a></td></tr> +<tr class="separator:a48b80113ca718fbdc50d75e1ec96a1ff"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1ac29f2f7bace5ba92b2b68a4541a60c" id="r_a1ac29f2f7bace5ba92b2b68a4541a60c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1ac29f2f7bace5ba92b2b68a4541a60c">TWI_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb">RTE_TRAP_FIRQ_7</a></td></tr> +<tr class="separator:a1ac29f2f7bace5ba92b2b68a4541a60c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0afc1a759116d4d73a199ef769bced47" id="r_a0afc1a759116d4d73a199ef769bced47"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0afc1a759116d4d73a199ef769bced47">TWI_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26">TRAP_CODE_FIRQ_7</a></td></tr> +<tr class="separator:a0afc1a759116d4d73a199ef769bced47"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">External Interrupt Controller (XIRQ)</div></td></tr> +<tr class="memitem:afe0cb262d517c7da73d6b5dc78886334" id="r_afe0cb262d517c7da73d6b5dc78886334"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afe0cb262d517c7da73d6b5dc78886334">XIRQ_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e">CSR_MIE_FIRQ8E</a></td></tr> +<tr class="separator:afe0cb262d517c7da73d6b5dc78886334"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a866768963f8648363dce40de9f34d61b" id="r_a866768963f8648363dce40de9f34d61b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a866768963f8648363dce40de9f34d61b">XIRQ_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580">CSR_MIP_FIRQ8P</a></td></tr> +<tr class="separator:a866768963f8648363dce40de9f34d61b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a95387d3482ec8e5c1d734805fdf64fa5" id="r_a95387d3482ec8e5c1d734805fdf64fa5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a95387d3482ec8e5c1d734805fdf64fa5">XIRQ_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308">RTE_TRAP_FIRQ_8</a></td></tr> +<tr class="separator:a95387d3482ec8e5c1d734805fdf64fa5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a16b9a7444833b5581df073661deb8f3a" id="r_a16b9a7444833b5581df073661deb8f3a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a16b9a7444833b5581df073661deb8f3a">XIRQ_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916">TRAP_CODE_FIRQ_8</a></td></tr> +<tr class="separator:a16b9a7444833b5581df073661deb8f3a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Smart LED Controller (NEOLED)</div></td></tr> +<tr class="memitem:a8d0409818600c0b2acfe8253e8f027b8" id="r_a8d0409818600c0b2acfe8253e8f027b8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8d0409818600c0b2acfe8253e8f027b8">NEOLED_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19">CSR_MIE_FIRQ9E</a></td></tr> +<tr class="separator:a8d0409818600c0b2acfe8253e8f027b8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aded7d7f5f4ba3a6d90f9a29e62a8cfab" id="r_aded7d7f5f4ba3a6d90f9a29e62a8cfab"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aded7d7f5f4ba3a6d90f9a29e62a8cfab">NEOLED_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e">CSR_MIP_FIRQ9P</a></td></tr> +<tr class="separator:aded7d7f5f4ba3a6d90f9a29e62a8cfab"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aca6cfc3f580c4dfe1e213009ee450c58" id="r_aca6cfc3f580c4dfe1e213009ee450c58"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aca6cfc3f580c4dfe1e213009ee450c58">NEOLED_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76">RTE_TRAP_FIRQ_9</a></td></tr> +<tr class="separator:aca6cfc3f580c4dfe1e213009ee450c58"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab4a2ac455d7426992de6877ea7325f21" id="r_ab4a2ac455d7426992de6877ea7325f21"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab4a2ac455d7426992de6877ea7325f21">NEOLED_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4">TRAP_CODE_FIRQ_9</a></td></tr> +<tr class="separator:ab4a2ac455d7426992de6877ea7325f21"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Direct Memory Access Controller (DMA)</div></td></tr> +<tr class="memitem:ace46f95dec73b33bf2535eb653bf8f65" id="r_ace46f95dec73b33bf2535eb653bf8f65"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ace46f95dec73b33bf2535eb653bf8f65">DMA_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a">CSR_MIE_FIRQ10E</a></td></tr> +<tr class="separator:ace46f95dec73b33bf2535eb653bf8f65"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1fa2b25383e6d05cf26f3517091ddbbf" id="r_a1fa2b25383e6d05cf26f3517091ddbbf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1fa2b25383e6d05cf26f3517091ddbbf">DMA_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba">CSR_MIP_FIRQ10P</a></td></tr> +<tr class="separator:a1fa2b25383e6d05cf26f3517091ddbbf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a568b54ba7dfdae736d8d685dc4d32113" id="r_a568b54ba7dfdae736d8d685dc4d32113"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a568b54ba7dfdae736d8d685dc4d32113">DMA_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52">RTE_TRAP_FIRQ_10</a></td></tr> +<tr class="separator:a568b54ba7dfdae736d8d685dc4d32113"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad2e81443af8a4ce2db3a4e3c1a8fb784" id="r_ad2e81443af8a4ce2db3a4e3c1a8fb784"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad2e81443af8a4ce2db3a4e3c1a8fb784">DMA_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42">TRAP_CODE_FIRQ_10</a></td></tr> +<tr class="separator:ad2e81443af8a4ce2db3a4e3c1a8fb784"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Serial Data Interface (SDI)</div></td></tr> +<tr class="memitem:a30cf20b6d704c50cc5c46238bb43646f" id="r_a30cf20b6d704c50cc5c46238bb43646f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a30cf20b6d704c50cc5c46238bb43646f">SDI_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd">CSR_MIE_FIRQ11E</a></td></tr> +<tr class="separator:a30cf20b6d704c50cc5c46238bb43646f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a68611c0dfbe331739eff10230ac3fede" id="r_a68611c0dfbe331739eff10230ac3fede"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a68611c0dfbe331739eff10230ac3fede">SDI_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544">CSR_MIP_FIRQ11P</a></td></tr> +<tr class="separator:a68611c0dfbe331739eff10230ac3fede"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa0ff72ea560d7e1462787dc31bd467cf" id="r_aa0ff72ea560d7e1462787dc31bd467cf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa0ff72ea560d7e1462787dc31bd467cf">SDI_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0">RTE_TRAP_FIRQ_11</a></td></tr> +<tr class="separator:aa0ff72ea560d7e1462787dc31bd467cf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a68925ca3f482f148caedd36118fd8d79" id="r_a68925ca3f482f148caedd36118fd8d79"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a68925ca3f482f148caedd36118fd8d79">SDI_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334">TRAP_CODE_FIRQ_11</a></td></tr> +<tr class="separator:a68925ca3f482f148caedd36118fd8d79"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">General Purpose Timer (GPTMR)</div></td></tr> +<tr class="memitem:a0a59186908b498cb92273b7767966e26" id="r_a0a59186908b498cb92273b7767966e26"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0a59186908b498cb92273b7767966e26">GPTMR_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943">CSR_MIE_FIRQ12E</a></td></tr> +<tr class="separator:a0a59186908b498cb92273b7767966e26"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4a3164d123ddddd07750f868e67d82d8" id="r_a4a3164d123ddddd07750f868e67d82d8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4a3164d123ddddd07750f868e67d82d8">GPTMR_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792">CSR_MIP_FIRQ12P</a></td></tr> +<tr class="separator:a4a3164d123ddddd07750f868e67d82d8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aac38deeef36de0a474ab238a3054f860" id="r_aac38deeef36de0a474ab238a3054f860"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aac38deeef36de0a474ab238a3054f860">GPTMR_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9">RTE_TRAP_FIRQ_12</a></td></tr> +<tr class="separator:aac38deeef36de0a474ab238a3054f860"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a445543c36d1f78477aa8ea4841c720a1" id="r_a445543c36d1f78477aa8ea4841c720a1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a445543c36d1f78477aa8ea4841c720a1">GPTMR_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c">TRAP_CODE_FIRQ_12</a></td></tr> +<tr class="separator:a445543c36d1f78477aa8ea4841c720a1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">1-Wire Interface Controller (ONEWIRE)</div></td></tr> +<tr class="memitem:a8bb1918679e32e898af2d485cfa44afb" id="r_a8bb1918679e32e898af2d485cfa44afb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8bb1918679e32e898af2d485cfa44afb">ONEWIRE_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f">CSR_MIE_FIRQ13E</a></td></tr> +<tr class="separator:a8bb1918679e32e898af2d485cfa44afb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3853ef999f99ca062e6025038811d0f0" id="r_a3853ef999f99ca062e6025038811d0f0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3853ef999f99ca062e6025038811d0f0">ONEWIRE_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570">CSR_MIP_FIRQ13P</a></td></tr> +<tr class="separator:a3853ef999f99ca062e6025038811d0f0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a142f4a1c754edfab292706618d427b94" id="r_a142f4a1c754edfab292706618d427b94"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a142f4a1c754edfab292706618d427b94">ONEWIRE_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220">RTE_TRAP_FIRQ_13</a></td></tr> +<tr class="separator:a142f4a1c754edfab292706618d427b94"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3e7aaa405a7d1fcd71a36c4b6b5a4081" id="r_a3e7aaa405a7d1fcd71a36c4b6b5a4081"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3e7aaa405a7d1fcd71a36c4b6b5a4081">ONEWIRE_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9">TRAP_CODE_FIRQ_13</a></td></tr> +<tr class="separator:a3e7aaa405a7d1fcd71a36c4b6b5a4081"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Stream Link Interface (SLINK)</div></td></tr> +<tr class="memitem:a8680ab1f14e512f21913572b35cbbf77" id="r_a8680ab1f14e512f21913572b35cbbf77"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8680ab1f14e512f21913572b35cbbf77">SLINK_RX_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b">CSR_MIE_FIRQ14E</a></td></tr> +<tr class="separator:a8680ab1f14e512f21913572b35cbbf77"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5c48d5c4effb47cdb019aa2da7c84526" id="r_a5c48d5c4effb47cdb019aa2da7c84526"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5c48d5c4effb47cdb019aa2da7c84526">SLINK_RX_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d">CSR_MIP_FIRQ14P</a></td></tr> +<tr class="separator:a5c48d5c4effb47cdb019aa2da7c84526"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4fff18e72d10377cdcb8d2ac0a617a5d" id="r_a4fff18e72d10377cdcb8d2ac0a617a5d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4fff18e72d10377cdcb8d2ac0a617a5d">SLINK_RX_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313">RTE_TRAP_FIRQ_14</a></td></tr> +<tr class="separator:a4fff18e72d10377cdcb8d2ac0a617a5d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab1fdaedb2c4c8753ef3be87c82568dda" id="r_ab1fdaedb2c4c8753ef3be87c82568dda"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab1fdaedb2c4c8753ef3be87c82568dda">SLINK_RX_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e">TRAP_CODE_FIRQ_14</a></td></tr> +<tr class="separator:ab1fdaedb2c4c8753ef3be87c82568dda"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a232fe0eb5665373b6e2b464bdc228df2" id="r_a232fe0eb5665373b6e2b464bdc228df2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a232fe0eb5665373b6e2b464bdc228df2">SLINK_TX_FIRQ_ENABLE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1">CSR_MIE_FIRQ15E</a></td></tr> +<tr class="separator:a232fe0eb5665373b6e2b464bdc228df2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac8e98b2af75c8e31f9815dee3dcbaf8e" id="r_ac8e98b2af75c8e31f9815dee3dcbaf8e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac8e98b2af75c8e31f9815dee3dcbaf8e">SLINK_TX_FIRQ_PENDING</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d">CSR_MIP_FIRQ15P</a></td></tr> +<tr class="separator:ac8e98b2af75c8e31f9815dee3dcbaf8e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4e039d13b8d3f20453e1bb6b40512e43" id="r_a4e039d13b8d3f20453e1bb6b40512e43"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4e039d13b8d3f20453e1bb6b40512e43">SLINK_TX_RTE_ID</a>&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe">RTE_TRAP_FIRQ_15</a></td></tr> +<tr class="separator:a4e039d13b8d3f20453e1bb6b40512e43"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7fbe28901775e284d5700086f0b0bfcd" id="r_a7fbe28901775e284d5700086f0b0bfcd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7fbe28901775e284d5700086f0b0bfcd">SLINK_TX_TRAP_CODE</a>&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110">TRAP_CODE_FIRQ_15</a></td></tr> +<tr class="separator:a7fbe28901775e284d5700086f0b0bfcd"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a> +Enumerations</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader"></div></td></tr> +<tr class="memitem:a10022df4c223533b04d5aebe222e8b73" id="r_a10022df4c223533b04d5aebe222e8b73"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05">CLK_PRSC_2</a> = 0 +, <a class="el" href="#a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1">CLK_PRSC_4</a> = 1 +, <a class="el" href="#a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9">CLK_PRSC_8</a> = 2 +, <a class="el" href="#a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da">CLK_PRSC_64</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e">CLK_PRSC_128</a> = 4 +, <a class="el" href="#a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17">CLK_PRSC_1024</a> = 5 +, <a class="el" href="#a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79">CLK_PRSC_2048</a> = 6 +, <a class="el" href="#a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee">CLK_PRSC_4096</a> = 7 +<br /> + }</td></tr> +<tr class="separator:a10022df4c223533b04d5aebe222e8b73"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">Export linker script symbols</h2></td></tr> +<tr class="memitem:aca22a64c8c580dfde1676732d97ead7c" id="r_aca22a64c8c580dfde1676732d97ead7c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aca22a64c8c580dfde1676732d97ead7c">neorv32_heap_begin_c</a>&#160;&#160;&#160;((uint32_t)&amp;<a class="el" href="#a0eaa3dcfb1db0c72534046feb9fa9b60">__heap_start</a>[0])</td></tr> +<tr class="separator:aca22a64c8c580dfde1676732d97ead7c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac8b656bd05c05176638ea3f922228ca5" id="r_ac8b656bd05c05176638ea3f922228ca5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac8b656bd05c05176638ea3f922228ca5">neorv32_heap_end_c</a>&#160;&#160;&#160;((uint32_t)&amp;<a class="el" href="#ae6ef7c715931df8bdc331577da14119b">__heap_end</a>[0])</td></tr> +<tr class="separator:ac8b656bd05c05176638ea3f922228ca5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a32904e45632a47e21f7c9d873720cdc5" id="r_a32904e45632a47e21f7c9d873720cdc5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a32904e45632a47e21f7c9d873720cdc5">neorv32_heap_size_c</a>&#160;&#160;&#160;((uint32_t)&amp;<a class="el" href="#aaa2cb9e7075a852870fd67eff2861b18">__crt0_max_heap</a>[0])</td></tr> +<tr class="separator:a32904e45632a47e21f7c9d873720cdc5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0eaa3dcfb1db0c72534046feb9fa9b60" id="r_a0eaa3dcfb1db0c72534046feb9fa9b60"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0eaa3dcfb1db0c72534046feb9fa9b60">__heap_start</a> []</td></tr> +<tr class="separator:a0eaa3dcfb1db0c72534046feb9fa9b60"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae6ef7c715931df8bdc331577da14119b" id="r_ae6ef7c715931df8bdc331577da14119b"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae6ef7c715931df8bdc331577da14119b">__heap_end</a> []</td></tr> +<tr class="separator:ae6ef7c715931df8bdc331577da14119b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aaa2cb9e7075a852870fd67eff2861b18" id="r_aaa2cb9e7075a852870fd67eff2861b18"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aaa2cb9e7075a852870fd67eff2861b18">__crt0_max_heap</a> []</td></tr> +<tr class="separator:aaa2cb9e7075a852870fd67eff2861b18"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Main NEORV32 core library / driver / HAL include file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ace79ee46daf3a1b689d9fe79dfcd6627" name="ace79ee46daf3a1b689d9fe79dfcd6627"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ace79ee46daf3a1b689d9fe79dfcd6627">&#9670;&#160;</a></span>CFS_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define CFS_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb">CSR_MIE_FIRQ1E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="aae182648a2c23d070b9db0295388e001" name="aae182648a2c23d070b9db0295388e001"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aae182648a2c23d070b9db0295388e001">&#9670;&#160;</a></span>CFS_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define CFS_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52">CSR_MIP_FIRQ1P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="a095f41fbefaa7acc1bfdd65cd3ce06ea" name="a095f41fbefaa7acc1bfdd65cd3ce06ea"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a095f41fbefaa7acc1bfdd65cd3ce06ea">&#9670;&#160;</a></span>CFS_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define CFS_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd">RTE_TRAP_FIRQ_1</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="aae6b2ae3fba20ff80bfb59735f179c26" name="aae6b2ae3fba20ff80bfb59735f179c26"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aae6b2ae3fba20ff80bfb59735f179c26">&#9670;&#160;</a></span>CFS_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define CFS_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7">TRAP_CODE_FIRQ_1</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="ace46f95dec73b33bf2535eb653bf8f65" name="ace46f95dec73b33bf2535eb653bf8f65"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ace46f95dec73b33bf2535eb653bf8f65">&#9670;&#160;</a></span>DMA_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DMA_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a">CSR_MIE_FIRQ10E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="a1fa2b25383e6d05cf26f3517091ddbbf" name="a1fa2b25383e6d05cf26f3517091ddbbf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1fa2b25383e6d05cf26f3517091ddbbf">&#9670;&#160;</a></span>DMA_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DMA_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba">CSR_MIP_FIRQ10P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="a568b54ba7dfdae736d8d685dc4d32113" name="a568b54ba7dfdae736d8d685dc4d32113"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a568b54ba7dfdae736d8d685dc4d32113">&#9670;&#160;</a></span>DMA_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DMA_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52">RTE_TRAP_FIRQ_10</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="ad2e81443af8a4ce2db3a4e3c1a8fb784" name="ad2e81443af8a4ce2db3a4e3c1a8fb784"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad2e81443af8a4ce2db3a4e3c1a8fb784">&#9670;&#160;</a></span>DMA_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DMA_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42">TRAP_CODE_FIRQ_10</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="a0a59186908b498cb92273b7767966e26" name="a0a59186908b498cb92273b7767966e26"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0a59186908b498cb92273b7767966e26">&#9670;&#160;</a></span>GPTMR_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define GPTMR_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943">CSR_MIE_FIRQ12E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="a4a3164d123ddddd07750f868e67d82d8" name="a4a3164d123ddddd07750f868e67d82d8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4a3164d123ddddd07750f868e67d82d8">&#9670;&#160;</a></span>GPTMR_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define GPTMR_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792">CSR_MIP_FIRQ12P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="aac38deeef36de0a474ab238a3054f860" name="aac38deeef36de0a474ab238a3054f860"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aac38deeef36de0a474ab238a3054f860">&#9670;&#160;</a></span>GPTMR_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define GPTMR_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9">RTE_TRAP_FIRQ_12</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="a445543c36d1f78477aa8ea4841c720a1" name="a445543c36d1f78477aa8ea4841c720a1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a445543c36d1f78477aa8ea4841c720a1">&#9670;&#160;</a></span>GPTMR_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define GPTMR_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c">TRAP_CODE_FIRQ_12</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="a1eb0cb7fed7e154e15cb4009880a879c" name="a1eb0cb7fed7e154e15cb4009880a879c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1eb0cb7fed7e154e15cb4009880a879c">&#9670;&#160;</a></span>IO_BASE_ADDRESS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define IO_BASE_ADDRESS&#160;&#160;&#160;(0XFFE00000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>peripheral/IO devices memory base address </p> + +</div> +</div> +<a id="a8d0409818600c0b2acfe8253e8f027b8" name="a8d0409818600c0b2acfe8253e8f027b8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8d0409818600c0b2acfe8253e8f027b8">&#9670;&#160;</a></span>NEOLED_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEOLED_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19">CSR_MIE_FIRQ9E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="aded7d7f5f4ba3a6d90f9a29e62a8cfab" name="aded7d7f5f4ba3a6d90f9a29e62a8cfab"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aded7d7f5f4ba3a6d90f9a29e62a8cfab">&#9670;&#160;</a></span>NEOLED_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEOLED_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e">CSR_MIP_FIRQ9P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="aca6cfc3f580c4dfe1e213009ee450c58" name="aca6cfc3f580c4dfe1e213009ee450c58"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aca6cfc3f580c4dfe1e213009ee450c58">&#9670;&#160;</a></span>NEOLED_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEOLED_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76">RTE_TRAP_FIRQ_9</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="ab4a2ac455d7426992de6877ea7325f21" name="ab4a2ac455d7426992de6877ea7325f21"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab4a2ac455d7426992de6877ea7325f21">&#9670;&#160;</a></span>NEOLED_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEOLED_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4">TRAP_CODE_FIRQ_9</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="a9af9742516d8f0e43cee33882ea41157" name="a9af9742516d8f0e43cee33882ea41157"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9af9742516d8f0e43cee33882ea41157">&#9670;&#160;</a></span>NEORV32_BOOTROM_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_BOOTROM_BASE&#160;&#160;&#160;(0xFFE00000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Bootloader ROM (BOOTROM) </p> + +</div> +</div> +<a id="a41d6f97daef61641da96b9f72f6b272f" name="a41d6f97daef61641da96b9f72f6b272f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a41d6f97daef61641da96b9f72f6b272f">&#9670;&#160;</a></span>NEORV32_CFS_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_CFS_BASE&#160;&#160;&#160;(0xFFEB0000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Custom Functions Subsystem (CFS) </p> + +</div> +</div> +<a id="ab1522f52c3c24ba2245dfa2783932d42" name="ab1522f52c3c24ba2245dfa2783932d42"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab1522f52c3c24ba2245dfa2783932d42">&#9670;&#160;</a></span>NEORV32_CLINT_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_CLINT_BASE&#160;&#160;&#160;(0xFFF40000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Core Local Interruptor (CLINT) </p> + +</div> +</div> +<a id="a0e2377055bdc0f416b5ae4385610600d" name="a0e2377055bdc0f416b5ae4385610600d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0e2377055bdc0f416b5ae4385610600d">&#9670;&#160;</a></span>NEORV32_CRC_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_CRC_BASE&#160;&#160;&#160;(0xFFEE0000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Cyclic Redundancy Check Unit (DMA) </p> + +</div> +</div> +<a id="a9bf0149681677f7d87abf8f62e2d9a3d" name="a9bf0149681677f7d87abf8f62e2d9a3d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9bf0149681677f7d87abf8f62e2d9a3d">&#9670;&#160;</a></span>NEORV32_DM_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_DM_BASE&#160;&#160;&#160;(0xFFFF0000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>On-Chip Debugger - Debug Module (OCD) </p> + +</div> +</div> +<a id="aa8d3a83ffad1e71f0832a5da78d62008" name="aa8d3a83ffad1e71f0832a5da78d62008"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa8d3a83ffad1e71f0832a5da78d62008">&#9670;&#160;</a></span>NEORV32_DMA_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_DMA_BASE&#160;&#160;&#160;(0xFFED0000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Direct Memory Access Controller (DMA) </p> + +</div> +</div> +<a id="a7fd1e24d4de2eed7bf9cd5391562c7f4" name="a7fd1e24d4de2eed7bf9cd5391562c7f4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7fd1e24d4de2eed7bf9cd5391562c7f4">&#9670;&#160;</a></span>NEORV32_GPIO_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_GPIO_BASE&#160;&#160;&#160;(0xFFFC0000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>General Purpose Input/Output Port Controller (GPIO) </p> + +</div> +</div> +<a id="a0991b1a5ba1e8c3550eb9770d43589d0" name="a0991b1a5ba1e8c3550eb9770d43589d0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0991b1a5ba1e8c3550eb9770d43589d0">&#9670;&#160;</a></span>NEORV32_GPTMR_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_GPTMR_BASE&#160;&#160;&#160;(0xFFF10000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>General Purpose Timer (GPTMR) </p> + +</div> +</div> +<a id="aca22a64c8c580dfde1676732d97ead7c" name="aca22a64c8c580dfde1676732d97ead7c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aca22a64c8c580dfde1676732d97ead7c">&#9670;&#160;</a></span>neorv32_heap_begin_c</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_heap_begin_c&#160;&#160;&#160;((uint32_t)&amp;<a class="el" href="#a0eaa3dcfb1db0c72534046feb9fa9b60">__heap_start</a>[0])</td> + </tr> + </table> +</div><div class="memdoc"> +<p>heap start address </p> + +</div> +</div> +<a id="ac8b656bd05c05176638ea3f922228ca5" name="ac8b656bd05c05176638ea3f922228ca5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac8b656bd05c05176638ea3f922228ca5">&#9670;&#160;</a></span>neorv32_heap_end_c</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_heap_end_c&#160;&#160;&#160;((uint32_t)&amp;<a class="el" href="#ae6ef7c715931df8bdc331577da14119b">__heap_end</a>[0])</td> + </tr> + </table> +</div><div class="memdoc"> +<p>heap start address </p> + +</div> +</div> +<a id="a32904e45632a47e21f7c9d873720cdc5" name="a32904e45632a47e21f7c9d873720cdc5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a32904e45632a47e21f7c9d873720cdc5">&#9670;&#160;</a></span>neorv32_heap_size_c</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_heap_size_c&#160;&#160;&#160;((uint32_t)&amp;<a class="el" href="#aaa2cb9e7075a852870fd67eff2861b18">__crt0_max_heap</a>[0])</td> + </tr> + </table> +</div><div class="memdoc"> +<p>heap start address </p> + +</div> +</div> +<a id="a559fdce92e8af5efc426c8fc48d14f99" name="a559fdce92e8af5efc426c8fc48d14f99"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a559fdce92e8af5efc426c8fc48d14f99">&#9670;&#160;</a></span>NEORV32_NEOLED_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_NEOLED_BASE&#160;&#160;&#160;(0xFFFD0000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Smart LED Hardware Interface (NEOLED) </p> + +</div> +</div> +<a id="a8d0b612e52b77395a05d4f18af6fcf00" name="a8d0b612e52b77395a05d4f18af6fcf00"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8d0b612e52b77395a05d4f18af6fcf00">&#9670;&#160;</a></span>NEORV32_ONEWIRE_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_ONEWIRE_BASE&#160;&#160;&#160;(0xFFF20000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>1-Wire Interface Controller (ONEWIRE) </p> + +</div> +</div> +<a id="afef7a6b121a788560b29e2ee2a58c725" name="afef7a6b121a788560b29e2ee2a58c725"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afef7a6b121a788560b29e2ee2a58c725">&#9670;&#160;</a></span>NEORV32_PWM_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_PWM_BASE&#160;&#160;&#160;(0xFFF00000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Pulse Width Modulation Controller (PWM) </p> + +</div> +</div> +<a id="a9b316ec038bd94ada42c9dab57a0a3cb" name="a9b316ec038bd94ada42c9dab57a0a3cb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9b316ec038bd94ada42c9dab57a0a3cb">&#9670;&#160;</a></span>NEORV32_SDI_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_SDI_BASE&#160;&#160;&#160;(0xFFF70000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Serial Data Interface (SDI) </p> + +</div> +</div> +<a id="ab5e6dc57886cd5ed98b86f22fc37d7cc" name="ab5e6dc57886cd5ed98b86f22fc37d7cc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab5e6dc57886cd5ed98b86f22fc37d7cc">&#9670;&#160;</a></span>NEORV32_SLINK_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_SLINK_BASE&#160;&#160;&#160;(0xFFEC0000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Stream Link Interface (SLINK) </p> + +</div> +</div> +<a id="aa466dc5eace7351bd438606f0f7475a7" name="aa466dc5eace7351bd438606f0f7475a7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa466dc5eace7351bd438606f0f7475a7">&#9670;&#160;</a></span>NEORV32_SPI_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_SPI_BASE&#160;&#160;&#160;(0xFFF80000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Serial Peripheral Interface Controller (SPI) </p> + +</div> +</div> +<a id="a5aa936f38782232c7ed3eab1283ee536" name="a5aa936f38782232c7ed3eab1283ee536"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5aa936f38782232c7ed3eab1283ee536">&#9670;&#160;</a></span>NEORV32_SYSINFO_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_SYSINFO_BASE&#160;&#160;&#160;(0xFFFE0000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>System Information Memory (SYSINFO) </p> + +</div> +</div> +<a id="ab4846cd153e8a23deec45d81cc8372a2" name="ab4846cd153e8a23deec45d81cc8372a2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab4846cd153e8a23deec45d81cc8372a2">&#9670;&#160;</a></span>NEORV32_TRNG_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_TRNG_BASE&#160;&#160;&#160;(0xFFFA0000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>True Random Number Generator (TRNG) </p> + +</div> +</div> +<a id="a8ac9e39bd62e9c5d7bcde0d44716b958" name="a8ac9e39bd62e9c5d7bcde0d44716b958"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8ac9e39bd62e9c5d7bcde0d44716b958">&#9670;&#160;</a></span>NEORV32_TWD_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_TWD_BASE&#160;&#160;&#160;(0xFFEA0000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Two-Wire Device (TWD) </p> + +</div> +</div> +<a id="a4a741408a4bb0938e03b99555306db9c" name="a4a741408a4bb0938e03b99555306db9c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4a741408a4bb0938e03b99555306db9c">&#9670;&#160;</a></span>NEORV32_TWI_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_TWI_BASE&#160;&#160;&#160;(0xFFF90000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Two-Wire Interface Controller (TWI) </p> + +</div> +</div> +<a id="a000b37f710043fe21e49b2fdbc039d94" name="a000b37f710043fe21e49b2fdbc039d94"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a000b37f710043fe21e49b2fdbc039d94">&#9670;&#160;</a></span>NEORV32_UART0_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_UART0_BASE&#160;&#160;&#160;(0xFFF50000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Primary Universal Asynchronous Receiver and Transmitter (UART0) </p> + +</div> +</div> +<a id="a26a1defe18ce222b8b4ed1c760344700" name="a26a1defe18ce222b8b4ed1c760344700"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a26a1defe18ce222b8b4ed1c760344700">&#9670;&#160;</a></span>NEORV32_UART1_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_UART1_BASE&#160;&#160;&#160;(0xFFF60000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Secondary Universal Asynchronous Receiver and Transmitter (UART1) </p> + +</div> +</div> +<a id="a3012986cdd5748ee96bcc74cd7108dea" name="a3012986cdd5748ee96bcc74cd7108dea"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3012986cdd5748ee96bcc74cd7108dea">&#9670;&#160;</a></span>NEORV32_WDT_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_WDT_BASE&#160;&#160;&#160;(0xFFFB0000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Watchdog Timer (WDT) </p> + +</div> +</div> +<a id="ae0978315beac8399f96f520bda81c7fe" name="ae0978315beac8399f96f520bda81c7fe"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae0978315beac8399f96f520bda81c7fe">&#9670;&#160;</a></span>NEORV32_XIP_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_XIP_BASE&#160;&#160;&#160;(0xFFEF0000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Execute In Place Module (XIP) </p> + +</div> +</div> +<a id="a942a897be2d4ae6820bee0f7bb3a0ff1" name="a942a897be2d4ae6820bee0f7bb3a0ff1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a942a897be2d4ae6820bee0f7bb3a0ff1">&#9670;&#160;</a></span>NEORV32_XIRQ_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_XIRQ_BASE&#160;&#160;&#160;(0xFFF30000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>External Interrupt Controller (XIRQ) </p> + +</div> +</div> +<a id="a8bb1918679e32e898af2d485cfa44afb" name="a8bb1918679e32e898af2d485cfa44afb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8bb1918679e32e898af2d485cfa44afb">&#9670;&#160;</a></span>ONEWIRE_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define ONEWIRE_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f">CSR_MIE_FIRQ13E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="a3853ef999f99ca062e6025038811d0f0" name="a3853ef999f99ca062e6025038811d0f0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3853ef999f99ca062e6025038811d0f0">&#9670;&#160;</a></span>ONEWIRE_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define ONEWIRE_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570">CSR_MIP_FIRQ13P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="a142f4a1c754edfab292706618d427b94" name="a142f4a1c754edfab292706618d427b94"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a142f4a1c754edfab292706618d427b94">&#9670;&#160;</a></span>ONEWIRE_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define ONEWIRE_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220">RTE_TRAP_FIRQ_13</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="a3e7aaa405a7d1fcd71a36c4b6b5a4081" name="a3e7aaa405a7d1fcd71a36c4b6b5a4081"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3e7aaa405a7d1fcd71a36c4b6b5a4081">&#9670;&#160;</a></span>ONEWIRE_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define ONEWIRE_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9">TRAP_CODE_FIRQ_13</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="a30cf20b6d704c50cc5c46238bb43646f" name="a30cf20b6d704c50cc5c46238bb43646f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a30cf20b6d704c50cc5c46238bb43646f">&#9670;&#160;</a></span>SDI_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SDI_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd">CSR_MIE_FIRQ11E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="a68611c0dfbe331739eff10230ac3fede" name="a68611c0dfbe331739eff10230ac3fede"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a68611c0dfbe331739eff10230ac3fede">&#9670;&#160;</a></span>SDI_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SDI_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544">CSR_MIP_FIRQ11P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="aa0ff72ea560d7e1462787dc31bd467cf" name="aa0ff72ea560d7e1462787dc31bd467cf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa0ff72ea560d7e1462787dc31bd467cf">&#9670;&#160;</a></span>SDI_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SDI_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0">RTE_TRAP_FIRQ_11</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="a68925ca3f482f148caedd36118fd8d79" name="a68925ca3f482f148caedd36118fd8d79"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a68925ca3f482f148caedd36118fd8d79">&#9670;&#160;</a></span>SDI_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SDI_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334">TRAP_CODE_FIRQ_11</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="a8680ab1f14e512f21913572b35cbbf77" name="a8680ab1f14e512f21913572b35cbbf77"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8680ab1f14e512f21913572b35cbbf77">&#9670;&#160;</a></span>SLINK_RX_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SLINK_RX_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b">CSR_MIE_FIRQ14E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="a5c48d5c4effb47cdb019aa2da7c84526" name="a5c48d5c4effb47cdb019aa2da7c84526"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5c48d5c4effb47cdb019aa2da7c84526">&#9670;&#160;</a></span>SLINK_RX_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SLINK_RX_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d">CSR_MIP_FIRQ14P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="a4fff18e72d10377cdcb8d2ac0a617a5d" name="a4fff18e72d10377cdcb8d2ac0a617a5d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4fff18e72d10377cdcb8d2ac0a617a5d">&#9670;&#160;</a></span>SLINK_RX_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SLINK_RX_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313">RTE_TRAP_FIRQ_14</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="ab1fdaedb2c4c8753ef3be87c82568dda" name="ab1fdaedb2c4c8753ef3be87c82568dda"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab1fdaedb2c4c8753ef3be87c82568dda">&#9670;&#160;</a></span>SLINK_RX_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SLINK_RX_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e">TRAP_CODE_FIRQ_14</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="a232fe0eb5665373b6e2b464bdc228df2" name="a232fe0eb5665373b6e2b464bdc228df2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a232fe0eb5665373b6e2b464bdc228df2">&#9670;&#160;</a></span>SLINK_TX_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SLINK_TX_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1">CSR_MIE_FIRQ15E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="ac8e98b2af75c8e31f9815dee3dcbaf8e" name="ac8e98b2af75c8e31f9815dee3dcbaf8e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac8e98b2af75c8e31f9815dee3dcbaf8e">&#9670;&#160;</a></span>SLINK_TX_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SLINK_TX_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d">CSR_MIP_FIRQ15P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="a4e039d13b8d3f20453e1bb6b40512e43" name="a4e039d13b8d3f20453e1bb6b40512e43"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4e039d13b8d3f20453e1bb6b40512e43">&#9670;&#160;</a></span>SLINK_TX_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SLINK_TX_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe">RTE_TRAP_FIRQ_15</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="a7fbe28901775e284d5700086f0b0bfcd" name="a7fbe28901775e284d5700086f0b0bfcd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7fbe28901775e284d5700086f0b0bfcd">&#9670;&#160;</a></span>SLINK_TX_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SLINK_TX_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110">TRAP_CODE_FIRQ_15</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="ab8fcd3f80c373eb0f9d0fc6bf64ca626" name="ab8fcd3f80c373eb0f9d0fc6bf64ca626"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab8fcd3f80c373eb0f9d0fc6bf64ca626">&#9670;&#160;</a></span>SPI_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SPI_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a">CSR_MIE_FIRQ6E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="ab2f58f746febb29a9828447c733f8043" name="ab2f58f746febb29a9828447c733f8043"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab2f58f746febb29a9828447c733f8043">&#9670;&#160;</a></span>SPI_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SPI_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e">CSR_MIP_FIRQ6P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="a4c1cd9ec9f80da2080e5d0d35cc524dd" name="a4c1cd9ec9f80da2080e5d0d35cc524dd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4c1cd9ec9f80da2080e5d0d35cc524dd">&#9670;&#160;</a></span>SPI_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SPI_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998">RTE_TRAP_FIRQ_6</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="a83c212f1f5d8ee2a5921b3b2b19e9cc4" name="a83c212f1f5d8ee2a5921b3b2b19e9cc4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a83c212f1f5d8ee2a5921b3b2b19e9cc4">&#9670;&#160;</a></span>SPI_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define SPI_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473">TRAP_CODE_FIRQ_6</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="a7cd6e1c5a9213256b277d8ef74bfb564" name="a7cd6e1c5a9213256b277d8ef74bfb564"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7cd6e1c5a9213256b277d8ef74bfb564">&#9670;&#160;</a></span>TWD_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define TWD_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d">CSR_MIE_FIRQ0E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="ab61a869973c8d027360f9c1f47fb5b01" name="ab61a869973c8d027360f9c1f47fb5b01"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab61a869973c8d027360f9c1f47fb5b01">&#9670;&#160;</a></span>TWD_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define TWD_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00">CSR_MIP_FIRQ0P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="ad00097ae9632a0f11c0dab96e272cff5" name="ad00097ae9632a0f11c0dab96e272cff5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad00097ae9632a0f11c0dab96e272cff5">&#9670;&#160;</a></span>TWD_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define TWD_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922">RTE_TRAP_FIRQ_0</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="a3dc1579e0bd1718b8f24cda6b54ae43a" name="a3dc1579e0bd1718b8f24cda6b54ae43a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3dc1579e0bd1718b8f24cda6b54ae43a">&#9670;&#160;</a></span>TWD_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define TWD_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1">TRAP_CODE_FIRQ_0</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="a0913144fce247e24ccd0f178b9ac32b7" name="a0913144fce247e24ccd0f178b9ac32b7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0913144fce247e24ccd0f178b9ac32b7">&#9670;&#160;</a></span>TWI_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define TWI_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8">CSR_MIE_FIRQ7E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="a48b80113ca718fbdc50d75e1ec96a1ff" name="a48b80113ca718fbdc50d75e1ec96a1ff"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a48b80113ca718fbdc50d75e1ec96a1ff">&#9670;&#160;</a></span>TWI_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define TWI_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a">CSR_MIP_FIRQ7P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="a1ac29f2f7bace5ba92b2b68a4541a60c" name="a1ac29f2f7bace5ba92b2b68a4541a60c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1ac29f2f7bace5ba92b2b68a4541a60c">&#9670;&#160;</a></span>TWI_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define TWI_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb">RTE_TRAP_FIRQ_7</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="a0afc1a759116d4d73a199ef769bced47" name="a0afc1a759116d4d73a199ef769bced47"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0afc1a759116d4d73a199ef769bced47">&#9670;&#160;</a></span>TWI_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define TWI_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26">TRAP_CODE_FIRQ_7</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="a6b55ce6abe6b141000a6bb00949169e9" name="a6b55ce6abe6b141000a6bb00949169e9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6b55ce6abe6b141000a6bb00949169e9">&#9670;&#160;</a></span>UART0_RX_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART0_RX_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7">CSR_MIE_FIRQ2E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="a0b738b26abb2b951f1f5c5d9525d7701" name="a0b738b26abb2b951f1f5c5d9525d7701"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0b738b26abb2b951f1f5c5d9525d7701">&#9670;&#160;</a></span>UART0_RX_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART0_RX_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e">CSR_MIP_FIRQ2P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="ae8588cca20d5e36f74c5207c376389a1" name="ae8588cca20d5e36f74c5207c376389a1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae8588cca20d5e36f74c5207c376389a1">&#9670;&#160;</a></span>UART0_RX_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART0_RX_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489">RTE_TRAP_FIRQ_2</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="a7a849638eff31f2e1955bdc53d4fc84d" name="a7a849638eff31f2e1955bdc53d4fc84d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7a849638eff31f2e1955bdc53d4fc84d">&#9670;&#160;</a></span>UART0_RX_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART0_RX_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7">TRAP_CODE_FIRQ_2</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="aff756a395771f22c5f412f23f177ea7d" name="aff756a395771f22c5f412f23f177ea7d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aff756a395771f22c5f412f23f177ea7d">&#9670;&#160;</a></span>UART0_TX_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART0_TX_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db">CSR_MIE_FIRQ3E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="addbe29166bb77bc045ad0e3db68e57e9" name="addbe29166bb77bc045ad0e3db68e57e9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#addbe29166bb77bc045ad0e3db68e57e9">&#9670;&#160;</a></span>UART0_TX_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART0_TX_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155">CSR_MIP_FIRQ3P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="a9dc37695ca169bc0eb93898e7aeeee58" name="a9dc37695ca169bc0eb93898e7aeeee58"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9dc37695ca169bc0eb93898e7aeeee58">&#9670;&#160;</a></span>UART0_TX_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART0_TX_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be">RTE_TRAP_FIRQ_3</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="ab50df423fdba86bb83bc5d90a4c3bb20" name="ab50df423fdba86bb83bc5d90a4c3bb20"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab50df423fdba86bb83bc5d90a4c3bb20">&#9670;&#160;</a></span>UART0_TX_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART0_TX_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0">TRAP_CODE_FIRQ_3</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="a6c118c1784d8446360b00cde97437ca7" name="a6c118c1784d8446360b00cde97437ca7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6c118c1784d8446360b00cde97437ca7">&#9670;&#160;</a></span>UART1_RX_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART1_RX_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc">CSR_MIE_FIRQ4E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="a2e70d3a4e2973d224643813fcf315a20" name="a2e70d3a4e2973d224643813fcf315a20"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2e70d3a4e2973d224643813fcf315a20">&#9670;&#160;</a></span>UART1_RX_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART1_RX_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8">CSR_MIP_FIRQ4P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="ab1c351f5ea19ac9ea864155be9cc0b4b" name="ab1c351f5ea19ac9ea864155be9cc0b4b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab1c351f5ea19ac9ea864155be9cc0b4b">&#9670;&#160;</a></span>UART1_RX_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART1_RX_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff">RTE_TRAP_FIRQ_4</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="ad0b9eb2ee1f411d7fccdf4fe263214e1" name="ad0b9eb2ee1f411d7fccdf4fe263214e1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad0b9eb2ee1f411d7fccdf4fe263214e1">&#9670;&#160;</a></span>UART1_RX_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART1_RX_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547">TRAP_CODE_FIRQ_4</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="a0039bae3454a22e71d64e70d674f5d6a" name="a0039bae3454a22e71d64e70d674f5d6a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0039bae3454a22e71d64e70d674f5d6a">&#9670;&#160;</a></span>UART1_TX_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART1_TX_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698">CSR_MIE_FIRQ5E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="ac4060532b7aa390623f54720460a2680" name="ac4060532b7aa390623f54720460a2680"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac4060532b7aa390623f54720460a2680">&#9670;&#160;</a></span>UART1_TX_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART1_TX_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677">CSR_MIP_FIRQ5P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="a6af270d7ae8b1cde30e44eb9142491d3" name="a6af270d7ae8b1cde30e44eb9142491d3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6af270d7ae8b1cde30e44eb9142491d3">&#9670;&#160;</a></span>UART1_TX_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART1_TX_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9">RTE_TRAP_FIRQ_5</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="a4cc50287c7a53982761a8116396ff7dd" name="a4cc50287c7a53982761a8116396ff7dd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4cc50287c7a53982761a8116396ff7dd">&#9670;&#160;</a></span>UART1_TX_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define UART1_TX_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757">TRAP_CODE_FIRQ_5</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<a id="aa01bea676e878a9e87ca10ce2d91e51f" name="aa01bea676e878a9e87ca10ce2d91e51f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa01bea676e878a9e87ca10ce2d91e51f">&#9670;&#160;</a></span>XIP_MEM_BASE_ADDRESS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define XIP_MEM_BASE_ADDRESS&#160;&#160;&#160;(0xE0000000U)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>XIP-mapped memory base address </p> + +</div> +</div> +<a id="afe0cb262d517c7da73d6b5dc78886334" name="afe0cb262d517c7da73d6b5dc78886334"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afe0cb262d517c7da73d6b5dc78886334">&#9670;&#160;</a></span>XIRQ_FIRQ_ENABLE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define XIRQ_FIRQ_ENABLE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e">CSR_MIE_FIRQ8E</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIE CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> + +</div> +</div> +<a id="a866768963f8648363dce40de9f34d61b" name="a866768963f8648363dce40de9f34d61b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a866768963f8648363dce40de9f34d61b">&#9670;&#160;</a></span>XIRQ_FIRQ_PENDING</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define XIRQ_FIRQ_PENDING&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580">CSR_MIP_FIRQ8P</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MIP CSR bit (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> + +</div> +</div> +<a id="a95387d3482ec8e5c1d734805fdf64fa5" name="a95387d3482ec8e5c1d734805fdf64fa5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a95387d3482ec8e5c1d734805fdf64fa5">&#9670;&#160;</a></span>XIRQ_RTE_ID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define XIRQ_RTE_ID&#160;&#160;&#160;<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308">RTE_TRAP_FIRQ_8</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE entry code (<a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>) </p> + +</div> +</div> +<a id="a16b9a7444833b5581df073661deb8f3a" name="a16b9a7444833b5581df073661deb8f3a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a16b9a7444833b5581df073661deb8f3a">&#9670;&#160;</a></span>XIRQ_TRAP_CODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define XIRQ_TRAP_CODE&#160;&#160;&#160;<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916">TRAP_CODE_FIRQ_8</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>MCAUSE CSR trap code (<a class="el" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="a10022df4c223533b04d5aebe222e8b73" name="a10022df4c223533b04d5aebe222e8b73"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a10022df4c223533b04d5aebe222e8b73">&#9670;&#160;</a></span>NEORV32_CLOCK_PRSC_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Processor clock prescaler select (relative to processor's main clock) </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05" name="a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05"></a>CLK_PRSC_2&#160;</td><td class="fielddoc"><p>CPU_CLK / 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1" name="a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1"></a>CLK_PRSC_4&#160;</td><td class="fielddoc"><p>CPU_CLK / 4 </p> +</td></tr> +<tr><td class="fieldname"><a id="a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9" name="a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9"></a>CLK_PRSC_8&#160;</td><td class="fielddoc"><p>CPU_CLK / 8 </p> +</td></tr> +<tr><td class="fieldname"><a id="a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da" name="a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da"></a>CLK_PRSC_64&#160;</td><td class="fielddoc"><p>CPU_CLK / 64 </p> +</td></tr> +<tr><td class="fieldname"><a id="a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e" name="a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e"></a>CLK_PRSC_128&#160;</td><td class="fielddoc"><p>CPU_CLK / 128 </p> +</td></tr> +<tr><td class="fieldname"><a id="a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17" name="a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17"></a>CLK_PRSC_1024&#160;</td><td class="fielddoc"><p>CPU_CLK / 1024 </p> +</td></tr> +<tr><td class="fieldname"><a id="a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79" name="a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79"></a>CLK_PRSC_2048&#160;</td><td class="fielddoc"><p>CPU_CLK / 2048 </p> +</td></tr> +<tr><td class="fieldname"><a id="a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee" name="a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee"></a>CLK_PRSC_4096&#160;</td><td class="fielddoc"><p>CPU_CLK / 4096 </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Variable Documentation</h2> +<a id="aaa2cb9e7075a852870fd67eff2861b18" name="aaa2cb9e7075a852870fd67eff2861b18"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aaa2cb9e7075a852870fd67eff2861b18">&#9670;&#160;</a></span>__crt0_max_heap</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">char __crt0_max_heap[]</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">extern</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>heap size in bytes </p> + +</div> +</div> +<a id="ae6ef7c715931df8bdc331577da14119b" name="ae6ef7c715931df8bdc331577da14119b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae6ef7c715931df8bdc331577da14119b">&#9670;&#160;</a></span>__heap_end</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">char __heap_end[]</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">extern</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>heap last address </p> + +</div> +</div> +<a id="a0eaa3dcfb1db0c72534046feb9fa9b60" name="a0eaa3dcfb1db0c72534046feb9fa9b60"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0eaa3dcfb1db0c72534046feb9fa9b60">&#9670;&#160;</a></span>__heap_start</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">char __heap_start[]</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">extern</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>heap start address </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32_8h_source.html b/sw/neorv32_8h_source.html new file mode 100644 index 0000000000..f89d07f2e2 --- /dev/null +++ b/sw/neorv32_8h_source.html @@ -0,0 +1,361 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef neorv32_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define neorv32_h</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifdef __cplusplus</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">// Standard libraries</span></div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include &lt;inttypes.h&gt;</span></div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include &lt;unistd.h&gt;</span></div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include &lt;stdlib.h&gt;</span></div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32_8h.html#aa01bea676e878a9e87ca10ce2d91e51f"> 35</a></span><span class="preprocessor">#define XIP_MEM_BASE_ADDRESS (0xE0000000U)</span></div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a1eb0cb7fed7e154e15cb4009880a879c"> 37</a></span><span class="preprocessor">#define IO_BASE_ADDRESS (0XFFE00000U)</span></div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a9af9742516d8f0e43cee33882ea41157"> 45</a></span><span class="preprocessor">#define NEORV32_BOOTROM_BASE (0xFFE00000U) </span></div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">//#define NEORV32_???_BASE (0xFFE10000U) /**&lt; reserved */</span></div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">//#define NEORV32_???_BASE (0xFFE20000U) /**&lt; reserved */</span></div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">//#define NEORV32_???_BASE (0xFFE30000U) /**&lt; reserved */</span></div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">//#define NEORV32_???_BASE (0xFFE40000U) /**&lt; reserved */</span></div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">//#define NEORV32_???_BASE (0xFFE50000U) /**&lt; reserved */</span></div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment">//#define NEORV32_???_BASE (0xFFE60000U) /**&lt; reserved */</span></div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment">//#define NEORV32_???_BASE (0xFFE70000U) /**&lt; reserved */</span></div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment">//#define NEORV32_???_BASE (0xFFE80000U) /**&lt; reserved */</span></div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment">//#define NEORV32_???_BASE (0xFFE90000U) /**&lt; reserved */</span></div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a8ac9e39bd62e9c5d7bcde0d44716b958"> 55</a></span><span class="preprocessor">#define NEORV32_TWD_BASE (0xFFEA0000U) </span></div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a41d6f97daef61641da96b9f72f6b272f"> 56</a></span><span class="preprocessor">#define NEORV32_CFS_BASE (0xFFEB0000U) </span></div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ab5e6dc57886cd5ed98b86f22fc37d7cc"> 57</a></span><span class="preprocessor">#define NEORV32_SLINK_BASE (0xFFEC0000U) </span></div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="neorv32_8h.html#aa8d3a83ffad1e71f0832a5da78d62008"> 58</a></span><span class="preprocessor">#define NEORV32_DMA_BASE (0xFFED0000U) </span></div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a0e2377055bdc0f416b5ae4385610600d"> 59</a></span><span class="preprocessor">#define NEORV32_CRC_BASE (0xFFEE0000U) </span></div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ae0978315beac8399f96f520bda81c7fe"> 60</a></span><span class="preprocessor">#define NEORV32_XIP_BASE (0xFFEF0000U) </span></div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="neorv32_8h.html#afef7a6b121a788560b29e2ee2a58c725"> 61</a></span><span class="preprocessor">#define NEORV32_PWM_BASE (0xFFF00000U) </span></div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a0991b1a5ba1e8c3550eb9770d43589d0"> 62</a></span><span class="preprocessor">#define NEORV32_GPTMR_BASE (0xFFF10000U) </span></div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a8d0b612e52b77395a05d4f18af6fcf00"> 63</a></span><span class="preprocessor">#define NEORV32_ONEWIRE_BASE (0xFFF20000U) </span></div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a942a897be2d4ae6820bee0f7bb3a0ff1"> 64</a></span><span class="preprocessor">#define NEORV32_XIRQ_BASE (0xFFF30000U) </span></div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ab1522f52c3c24ba2245dfa2783932d42"> 65</a></span><span class="preprocessor">#define NEORV32_CLINT_BASE (0xFFF40000U) </span></div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a000b37f710043fe21e49b2fdbc039d94"> 66</a></span><span class="preprocessor">#define NEORV32_UART0_BASE (0xFFF50000U) </span></div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a26a1defe18ce222b8b4ed1c760344700"> 67</a></span><span class="preprocessor">#define NEORV32_UART1_BASE (0xFFF60000U) </span></div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a9b316ec038bd94ada42c9dab57a0a3cb"> 68</a></span><span class="preprocessor">#define NEORV32_SDI_BASE (0xFFF70000U) </span></div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="neorv32_8h.html#aa466dc5eace7351bd438606f0f7475a7"> 69</a></span><span class="preprocessor">#define NEORV32_SPI_BASE (0xFFF80000U) </span></div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a4a741408a4bb0938e03b99555306db9c"> 70</a></span><span class="preprocessor">#define NEORV32_TWI_BASE (0xFFF90000U) </span></div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ab4846cd153e8a23deec45d81cc8372a2"> 71</a></span><span class="preprocessor">#define NEORV32_TRNG_BASE (0xFFFA0000U) </span></div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a3012986cdd5748ee96bcc74cd7108dea"> 72</a></span><span class="preprocessor">#define NEORV32_WDT_BASE (0xFFFB0000U) </span></div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a7fd1e24d4de2eed7bf9cd5391562c7f4"> 73</a></span><span class="preprocessor">#define NEORV32_GPIO_BASE (0xFFFC0000U) </span></div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a559fdce92e8af5efc426c8fc48d14f99"> 74</a></span><span class="preprocessor">#define NEORV32_NEOLED_BASE (0xFFFD0000U) </span></div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a5aa936f38782232c7ed3eab1283ee536"> 75</a></span><span class="preprocessor">#define NEORV32_SYSINFO_BASE (0xFFFE0000U) </span></div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a9bf0149681677f7d87abf8f62e2d9a3d"> 76</a></span><span class="preprocessor">#define NEORV32_DM_BASE (0xFFFF0000U) </span></div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a7cd6e1c5a9213256b277d8ef74bfb564"> 86</a></span><span class="preprocessor">#define TWD_FIRQ_ENABLE CSR_MIE_FIRQ0E </span></div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ab61a869973c8d027360f9c1f47fb5b01"> 87</a></span><span class="preprocessor">#define TWD_FIRQ_PENDING CSR_MIP_FIRQ0P </span></div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ad00097ae9632a0f11c0dab96e272cff5"> 88</a></span><span class="preprocessor">#define TWD_RTE_ID RTE_TRAP_FIRQ_0 </span></div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a3dc1579e0bd1718b8f24cda6b54ae43a"> 89</a></span><span class="preprocessor">#define TWD_TRAP_CODE TRAP_CODE_FIRQ_0 </span></div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ace79ee46daf3a1b689d9fe79dfcd6627"> 93</a></span><span class="preprocessor">#define CFS_FIRQ_ENABLE CSR_MIE_FIRQ1E </span></div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="neorv32_8h.html#aae182648a2c23d070b9db0295388e001"> 94</a></span><span class="preprocessor">#define CFS_FIRQ_PENDING CSR_MIP_FIRQ1P </span></div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a095f41fbefaa7acc1bfdd65cd3ce06ea"> 95</a></span><span class="preprocessor">#define CFS_RTE_ID RTE_TRAP_FIRQ_1 </span></div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"><a class="line" href="neorv32_8h.html#aae6b2ae3fba20ff80bfb59735f179c26"> 96</a></span><span class="preprocessor">#define CFS_TRAP_CODE TRAP_CODE_FIRQ_1 </span></div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a6b55ce6abe6b141000a6bb00949169e9"> 100</a></span><span class="preprocessor">#define UART0_RX_FIRQ_ENABLE CSR_MIE_FIRQ2E </span></div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a0b738b26abb2b951f1f5c5d9525d7701"> 101</a></span><span class="preprocessor">#define UART0_RX_FIRQ_PENDING CSR_MIP_FIRQ2P </span></div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ae8588cca20d5e36f74c5207c376389a1"> 102</a></span><span class="preprocessor">#define UART0_RX_RTE_ID RTE_TRAP_FIRQ_2 </span></div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a7a849638eff31f2e1955bdc53d4fc84d"> 103</a></span><span class="preprocessor">#define UART0_RX_TRAP_CODE TRAP_CODE_FIRQ_2 </span></div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"><a class="line" href="neorv32_8h.html#aff756a395771f22c5f412f23f177ea7d"> 104</a></span><span class="preprocessor">#define UART0_TX_FIRQ_ENABLE CSR_MIE_FIRQ3E </span></div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"><a class="line" href="neorv32_8h.html#addbe29166bb77bc045ad0e3db68e57e9"> 105</a></span><span class="preprocessor">#define UART0_TX_FIRQ_PENDING CSR_MIP_FIRQ3P </span></div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a9dc37695ca169bc0eb93898e7aeeee58"> 106</a></span><span class="preprocessor">#define UART0_TX_RTE_ID RTE_TRAP_FIRQ_3 </span></div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ab50df423fdba86bb83bc5d90a4c3bb20"> 107</a></span><span class="preprocessor">#define UART0_TX_TRAP_CODE TRAP_CODE_FIRQ_3 </span></div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a6c118c1784d8446360b00cde97437ca7"> 111</a></span><span class="preprocessor">#define UART1_RX_FIRQ_ENABLE CSR_MIE_FIRQ4E </span></div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a2e70d3a4e2973d224643813fcf315a20"> 112</a></span><span class="preprocessor">#define UART1_RX_FIRQ_PENDING CSR_MIP_FIRQ4P </span></div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ab1c351f5ea19ac9ea864155be9cc0b4b"> 113</a></span><span class="preprocessor">#define UART1_RX_RTE_ID RTE_TRAP_FIRQ_4 </span></div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ad0b9eb2ee1f411d7fccdf4fe263214e1"> 114</a></span><span class="preprocessor">#define UART1_RX_TRAP_CODE TRAP_CODE_FIRQ_4 </span></div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a0039bae3454a22e71d64e70d674f5d6a"> 115</a></span><span class="preprocessor">#define UART1_TX_FIRQ_ENABLE CSR_MIE_FIRQ5E </span></div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ac4060532b7aa390623f54720460a2680"> 116</a></span><span class="preprocessor">#define UART1_TX_FIRQ_PENDING CSR_MIP_FIRQ5P </span></div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a6af270d7ae8b1cde30e44eb9142491d3"> 117</a></span><span class="preprocessor">#define UART1_TX_RTE_ID RTE_TRAP_FIRQ_5 </span></div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a4cc50287c7a53982761a8116396ff7dd"> 118</a></span><span class="preprocessor">#define UART1_TX_TRAP_CODE TRAP_CODE_FIRQ_5 </span></div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ab8fcd3f80c373eb0f9d0fc6bf64ca626"> 122</a></span><span class="preprocessor">#define SPI_FIRQ_ENABLE CSR_MIE_FIRQ6E </span></div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ab2f58f746febb29a9828447c733f8043"> 123</a></span><span class="preprocessor">#define SPI_FIRQ_PENDING CSR_MIP_FIRQ6P </span></div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a4c1cd9ec9f80da2080e5d0d35cc524dd"> 124</a></span><span class="preprocessor">#define SPI_RTE_ID RTE_TRAP_FIRQ_6 </span></div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a83c212f1f5d8ee2a5921b3b2b19e9cc4"> 125</a></span><span class="preprocessor">#define SPI_TRAP_CODE TRAP_CODE_FIRQ_6 </span></div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a0913144fce247e24ccd0f178b9ac32b7"> 129</a></span><span class="preprocessor">#define TWI_FIRQ_ENABLE CSR_MIE_FIRQ7E </span></div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a48b80113ca718fbdc50d75e1ec96a1ff"> 130</a></span><span class="preprocessor">#define TWI_FIRQ_PENDING CSR_MIP_FIRQ7P </span></div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a1ac29f2f7bace5ba92b2b68a4541a60c"> 131</a></span><span class="preprocessor">#define TWI_RTE_ID RTE_TRAP_FIRQ_7 </span></div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a0afc1a759116d4d73a199ef769bced47"> 132</a></span><span class="preprocessor">#define TWI_TRAP_CODE TRAP_CODE_FIRQ_7 </span></div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"><a class="line" href="neorv32_8h.html#afe0cb262d517c7da73d6b5dc78886334"> 136</a></span><span class="preprocessor">#define XIRQ_FIRQ_ENABLE CSR_MIE_FIRQ8E </span></div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a866768963f8648363dce40de9f34d61b"> 137</a></span><span class="preprocessor">#define XIRQ_FIRQ_PENDING CSR_MIP_FIRQ8P </span></div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a95387d3482ec8e5c1d734805fdf64fa5"> 138</a></span><span class="preprocessor">#define XIRQ_RTE_ID RTE_TRAP_FIRQ_8 </span></div> +<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a16b9a7444833b5581df073661deb8f3a"> 139</a></span><span class="preprocessor">#define XIRQ_TRAP_CODE TRAP_CODE_FIRQ_8 </span></div> +<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a8d0409818600c0b2acfe8253e8f027b8"> 143</a></span><span class="preprocessor">#define NEOLED_FIRQ_ENABLE CSR_MIE_FIRQ9E </span></div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"><a class="line" href="neorv32_8h.html#aded7d7f5f4ba3a6d90f9a29e62a8cfab"> 144</a></span><span class="preprocessor">#define NEOLED_FIRQ_PENDING CSR_MIP_FIRQ9P </span></div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"><a class="line" href="neorv32_8h.html#aca6cfc3f580c4dfe1e213009ee450c58"> 145</a></span><span class="preprocessor">#define NEOLED_RTE_ID RTE_TRAP_FIRQ_9 </span></div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ab4a2ac455d7426992de6877ea7325f21"> 146</a></span><span class="preprocessor">#define NEOLED_TRAP_CODE TRAP_CODE_FIRQ_9 </span></div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ace46f95dec73b33bf2535eb653bf8f65"> 150</a></span><span class="preprocessor">#define DMA_FIRQ_ENABLE CSR_MIE_FIRQ10E </span></div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a1fa2b25383e6d05cf26f3517091ddbbf"> 151</a></span><span class="preprocessor">#define DMA_FIRQ_PENDING CSR_MIP_FIRQ10P </span></div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a568b54ba7dfdae736d8d685dc4d32113"> 152</a></span><span class="preprocessor">#define DMA_RTE_ID RTE_TRAP_FIRQ_10 </span></div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ad2e81443af8a4ce2db3a4e3c1a8fb784"> 153</a></span><span class="preprocessor">#define DMA_TRAP_CODE TRAP_CODE_FIRQ_10 </span></div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a30cf20b6d704c50cc5c46238bb43646f"> 157</a></span><span class="preprocessor">#define SDI_FIRQ_ENABLE CSR_MIE_FIRQ11E </span></div> +<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a68611c0dfbe331739eff10230ac3fede"> 158</a></span><span class="preprocessor">#define SDI_FIRQ_PENDING CSR_MIP_FIRQ11P </span></div> +<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"><a class="line" href="neorv32_8h.html#aa0ff72ea560d7e1462787dc31bd467cf"> 159</a></span><span class="preprocessor">#define SDI_RTE_ID RTE_TRAP_FIRQ_11 </span></div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a68925ca3f482f148caedd36118fd8d79"> 160</a></span><span class="preprocessor">#define SDI_TRAP_CODE TRAP_CODE_FIRQ_11 </span></div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a0a59186908b498cb92273b7767966e26"> 164</a></span><span class="preprocessor">#define GPTMR_FIRQ_ENABLE CSR_MIE_FIRQ12E </span></div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a4a3164d123ddddd07750f868e67d82d8"> 165</a></span><span class="preprocessor">#define GPTMR_FIRQ_PENDING CSR_MIP_FIRQ12P </span></div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"><a class="line" href="neorv32_8h.html#aac38deeef36de0a474ab238a3054f860"> 166</a></span><span class="preprocessor">#define GPTMR_RTE_ID RTE_TRAP_FIRQ_12 </span></div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a445543c36d1f78477aa8ea4841c720a1"> 167</a></span><span class="preprocessor">#define GPTMR_TRAP_CODE TRAP_CODE_FIRQ_12 </span></div> +<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a8bb1918679e32e898af2d485cfa44afb"> 171</a></span><span class="preprocessor">#define ONEWIRE_FIRQ_ENABLE CSR_MIE_FIRQ13E </span></div> +<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a3853ef999f99ca062e6025038811d0f0"> 172</a></span><span class="preprocessor">#define ONEWIRE_FIRQ_PENDING CSR_MIP_FIRQ13P </span></div> +<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a142f4a1c754edfab292706618d427b94"> 173</a></span><span class="preprocessor">#define ONEWIRE_RTE_ID RTE_TRAP_FIRQ_13 </span></div> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a3e7aaa405a7d1fcd71a36c4b6b5a4081"> 174</a></span><span class="preprocessor">#define ONEWIRE_TRAP_CODE TRAP_CODE_FIRQ_13 </span></div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a8680ab1f14e512f21913572b35cbbf77"> 178</a></span><span class="preprocessor">#define SLINK_RX_FIRQ_ENABLE CSR_MIE_FIRQ14E </span></div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a5c48d5c4effb47cdb019aa2da7c84526"> 179</a></span><span class="preprocessor">#define SLINK_RX_FIRQ_PENDING CSR_MIP_FIRQ14P </span></div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a4fff18e72d10377cdcb8d2ac0a617a5d"> 180</a></span><span class="preprocessor">#define SLINK_RX_RTE_ID RTE_TRAP_FIRQ_14 </span></div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ab1fdaedb2c4c8753ef3be87c82568dda"> 181</a></span><span class="preprocessor">#define SLINK_RX_TRAP_CODE TRAP_CODE_FIRQ_14 </span></div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a232fe0eb5665373b6e2b464bdc228df2"> 182</a></span><span class="preprocessor">#define SLINK_TX_FIRQ_ENABLE CSR_MIE_FIRQ15E </span></div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ac8e98b2af75c8e31f9815dee3dcbaf8e"> 183</a></span><span class="preprocessor">#define SLINK_TX_FIRQ_PENDING CSR_MIP_FIRQ15P </span></div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a4e039d13b8d3f20453e1bb6b40512e43"> 184</a></span><span class="preprocessor">#define SLINK_TX_RTE_ID RTE_TRAP_FIRQ_15 </span></div> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a7fbe28901775e284d5700086f0b0bfcd"> 185</a></span><span class="preprocessor">#define SLINK_TX_TRAP_CODE TRAP_CODE_FIRQ_15 </span></div> +<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code hl_variable" href="neorv32_8h.html#a0eaa3dcfb1db0c72534046feb9fa9b60">__heap_start</a>[]; </div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span><span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code hl_variable" href="neorv32_8h.html#ae6ef7c715931df8bdc331577da14119b">__heap_end</a>[]; </div> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code hl_variable" href="neorv32_8h.html#aaa2cb9e7075a852870fd67eff2861b18">__crt0_max_heap</a>[]; </div> +<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span><span class="comment">// aliases</span></div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"><a class="line" href="neorv32_8h.html#aca22a64c8c580dfde1676732d97ead7c"> 198</a></span><span class="preprocessor">#define neorv32_heap_begin_c ((uint32_t)&amp;__heap_start[0])</span></div> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"><a class="line" href="neorv32_8h.html#ac8b656bd05c05176638ea3f922228ca5"> 199</a></span><span class="preprocessor">#define neorv32_heap_end_c ((uint32_t)&amp;__heap_end[0])</span></div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a32904e45632a47e21f7c9d873720cdc5"> 200</a></span><span class="preprocessor">#define neorv32_heap_size_c ((uint32_t)&amp;__crt0_max_heap[0])</span></div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00208" data-start="{" data-end="};"> +<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73"> 208</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a> {</div> +<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05"> 209</a></span> <a class="code hl_enumvalue" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05">CLK_PRSC_2</a> = 0, </div> +<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1"> 210</a></span> <a class="code hl_enumvalue" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1">CLK_PRSC_4</a> = 1, </div> +<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9"> 211</a></span> <a class="code hl_enumvalue" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9">CLK_PRSC_8</a> = 2, </div> +<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da"> 212</a></span> <a class="code hl_enumvalue" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da">CLK_PRSC_64</a> = 3, </div> +<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e"> 213</a></span> <a class="code hl_enumvalue" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e">CLK_PRSC_128</a> = 4, </div> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17"> 214</a></span> <a class="code hl_enumvalue" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17">CLK_PRSC_1024</a> = 5, </div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79"> 215</a></span> <a class="code hl_enumvalue" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79">CLK_PRSC_2048</a> = 6, </div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <a class="code hl_enumvalue" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee">CLK_PRSC_4096</a> = 7 </div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"><a class="line" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee"> 217</a></span>};</div> +</div> +<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00226" data-start="{" data-end="};"> +<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"><a class="line" href="unionsubwords64__t.html"> 226</a></span><span class="keyword">typedef</span> <span class="keyword">union </span>{</div> +<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> uint64_t uint64;</div> +<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> uint32_t uint32[<span class="keyword">sizeof</span>(uint64_t)/<span class="keyword">sizeof</span>(uint32_t)];</div> +<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> uint16_t uint16[<span class="keyword">sizeof</span>(uint64_t)/<span class="keyword">sizeof</span>(uint16_t)];</div> +<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> uint8_t uint8[ <span class="keyword">sizeof</span>(uint64_t)/<span class="keyword">sizeof</span>(uint8_t)];</div> +<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span>} <a class="code hl_union" href="unionsubwords64__t.html">subwords64_t</a>;</div> +</div> +<div class="foldopen" id="foldopen00233" data-start="{" data-end="};"> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"><a class="line" href="unionsubwords32__t.html"> 233</a></span><span class="keyword">typedef</span> <span class="keyword">union </span>{</div> +<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> uint32_t uint32[<span class="keyword">sizeof</span>(uint32_t)/<span class="keyword">sizeof</span>(uint32_t)];</div> +<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> uint16_t uint16[<span class="keyword">sizeof</span>(uint32_t)/<span class="keyword">sizeof</span>(uint16_t)];</div> +<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> uint8_t uint8[ <span class="keyword">sizeof</span>(uint32_t)/<span class="keyword">sizeof</span>(uint8_t)];</div> +<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span>} <a class="code hl_union" href="unionsubwords32__t.html">subwords32_t</a>;</div> +</div> +<div class="foldopen" id="foldopen00239" data-start="{" data-end="};"> +<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"><a class="line" href="unionsubwords16__t.html"> 239</a></span><span class="keyword">typedef</span> <span class="keyword">union </span>{</div> +<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> uint16_t uint16[<span class="keyword">sizeof</span>(uint16_t)/<span class="keyword">sizeof</span>(uint16_t)];</div> +<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> uint8_t uint8[ <span class="keyword">sizeof</span>(uint16_t)/<span class="keyword">sizeof</span>(uint8_t)];</div> +<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span>} <a class="code hl_union" href="unionsubwords16__t.html">subwords16_t</a>;</div> +</div> +<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span><span class="comment">// ----------------------------------------------------------------------------</span></div> +<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span><span class="comment">// Include all system header files</span></div> +<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="comment">// ----------------------------------------------------------------------------</span></div> +<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span><span class="comment">// intrinsics</span></div> +<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__intrinsics_8h.html">neorv32_intrinsics.h</a>&quot;</span></div> +<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> </div> +<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span><span class="comment">// helper functions</span></div> +<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__aux_8h.html">neorv32_aux.h</a>&quot;</span></div> +<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> </div> +<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="comment">// legacy compatibility layer</span></div> +<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__legacy_8h.html">neorv32_legacy.h</a>&quot;</span></div> +<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div> +<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span><span class="comment">// CPU core</span></div> +<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__cpu_8h.html">neorv32_cpu.h</a>&quot;</span></div> +<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__cpu__amo_8h.html">neorv32_cpu_amo.h</a>&quot;</span></div> +<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__cpu__csr_8h.html">neorv32_cpu_csr.h</a>&quot;</span></div> +<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__cpu__cfu_8h.html">neorv32_cpu_cfu.h</a>&quot;</span></div> +<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> </div> +<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span><span class="comment">// NEORV32 runtime environment</span></div> +<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__rte_8h.html">neorv32_rte.h</a>&quot;</span></div> +<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> </div> +<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span><span class="comment">// IO/peripheral devices</span></div> +<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__cfs_8h.html">neorv32_cfs.h</a>&quot;</span></div> +<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__clint_8h.html">neorv32_clint.h</a>&quot;</span></div> +<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__crc_8h.html">neorv32_crc.h</a>&quot;</span></div> +<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__dma_8h.html">neorv32_dma.h</a>&quot;</span></div> +<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__gpio_8h.html">neorv32_gpio.h</a>&quot;</span></div> +<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__gptmr_8h.html">neorv32_gptmr.h</a>&quot;</span></div> +<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__neoled_8h.html">neorv32_neoled.h</a>&quot;</span></div> +<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__onewire_8h.html">neorv32_onewire.h</a>&quot;</span></div> +<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__pwm_8h.html">neorv32_pwm.h</a>&quot;</span></div> +<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__sdi_8h.html">neorv32_sdi.h</a>&quot;</span></div> +<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__slink_8h.html">neorv32_slink.h</a>&quot;</span></div> +<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__spi_8h.html">neorv32_spi.h</a>&quot;</span></div> +<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__sysinfo_8h.html">neorv32_sysinfo.h</a>&quot;</span></div> +<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__trng_8h.html">neorv32_trng.h</a>&quot;</span></div> +<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__twd_8h.html">neorv32_twd.h</a>&quot;</span></div> +<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__twi_8h.html">neorv32_twi.h</a>&quot;</span></div> +<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__uart_8h.html">neorv32_uart.h</a>&quot;</span></div> +<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__wdt_8h.html">neorv32_wdt.h</a>&quot;</span></div> +<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__xip_8h.html">neorv32_xip.h</a>&quot;</span></div> +<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span><span class="preprocessor">#include &quot;<a class="code" href="neorv32__xirq_8h.html">neorv32_xirq.h</a>&quot;</span></div> +<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> </div> +<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> </div> +<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span><span class="preprocessor">#ifdef __cplusplus</span></div> +<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span>}</div> +<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div> +<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_h</span></div> +<div class="ttc" id="aneorv32_8h_html_a0eaa3dcfb1db0c72534046feb9fa9b60"><div class="ttname"><a href="neorv32_8h.html#a0eaa3dcfb1db0c72534046feb9fa9b60">__heap_start</a></div><div class="ttdeci">char __heap_start[]</div></div> +<div class="ttc" id="aneorv32_8h_html_a10022df4c223533b04d5aebe222e8b73"><div class="ttname"><a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a></div><div class="ttdeci">NEORV32_CLOCK_PRSC_enum</div><div class="ttdef"><b>Definition</b> neorv32.h:208</div></div> +<div class="ttc" id="aneorv32_8h_html_a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee"><div class="ttname"><a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee">CLK_PRSC_4096</a></div><div class="ttdeci">@ CLK_PRSC_4096</div><div class="ttdef"><b>Definition</b> neorv32.h:216</div></div> +<div class="ttc" id="aneorv32_8h_html_a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17"><div class="ttname"><a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17">CLK_PRSC_1024</a></div><div class="ttdeci">@ CLK_PRSC_1024</div><div class="ttdef"><b>Definition</b> neorv32.h:214</div></div> +<div class="ttc" id="aneorv32_8h_html_a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da"><div class="ttname"><a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da">CLK_PRSC_64</a></div><div class="ttdeci">@ CLK_PRSC_64</div><div class="ttdef"><b>Definition</b> neorv32.h:212</div></div> +<div class="ttc" id="aneorv32_8h_html_a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1"><div class="ttname"><a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1">CLK_PRSC_4</a></div><div class="ttdeci">@ CLK_PRSC_4</div><div class="ttdef"><b>Definition</b> neorv32.h:210</div></div> +<div class="ttc" id="aneorv32_8h_html_a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e"><div class="ttname"><a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e">CLK_PRSC_128</a></div><div class="ttdeci">@ CLK_PRSC_128</div><div class="ttdef"><b>Definition</b> neorv32.h:213</div></div> +<div class="ttc" id="aneorv32_8h_html_a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79"><div class="ttname"><a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79">CLK_PRSC_2048</a></div><div class="ttdeci">@ CLK_PRSC_2048</div><div class="ttdef"><b>Definition</b> neorv32.h:215</div></div> +<div class="ttc" id="aneorv32_8h_html_a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9"><div class="ttname"><a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9">CLK_PRSC_8</a></div><div class="ttdeci">@ CLK_PRSC_8</div><div class="ttdef"><b>Definition</b> neorv32.h:211</div></div> +<div class="ttc" id="aneorv32_8h_html_a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05"><div class="ttname"><a href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05">CLK_PRSC_2</a></div><div class="ttdeci">@ CLK_PRSC_2</div><div class="ttdef"><b>Definition</b> neorv32.h:209</div></div> +<div class="ttc" id="aneorv32_8h_html_aaa2cb9e7075a852870fd67eff2861b18"><div class="ttname"><a href="neorv32_8h.html#aaa2cb9e7075a852870fd67eff2861b18">__crt0_max_heap</a></div><div class="ttdeci">char __crt0_max_heap[]</div></div> +<div class="ttc" id="aneorv32_8h_html_ae6ef7c715931df8bdc331577da14119b"><div class="ttname"><a href="neorv32_8h.html#ae6ef7c715931df8bdc331577da14119b">__heap_end</a></div><div class="ttdeci">char __heap_end[]</div></div> +<div class="ttc" id="aneorv32__aux_8h_html"><div class="ttname"><a href="neorv32__aux_8h.html">neorv32_aux.h</a></div><div class="ttdoc">General auxiliary functions header file.</div></div> +<div class="ttc" id="aneorv32__cfs_8h_html"><div class="ttname"><a href="neorv32__cfs_8h.html">neorv32_cfs.h</a></div><div class="ttdoc">Custom Functions Subsystem (CFS) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__clint_8h_html"><div class="ttname"><a href="neorv32__clint_8h.html">neorv32_clint.h</a></div><div class="ttdoc">Hardware Local Interruptor (CLINT) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html"><div class="ttname"><a href="neorv32__cpu_8h.html">neorv32_cpu.h</a></div><div class="ttdoc">CPU Core Functions HW driver header file.</div></div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html"><div class="ttname"><a href="neorv32__cpu__amo_8h.html">neorv32_cpu_amo.h</a></div><div class="ttdoc">Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - header file.</div></div> +<div class="ttc" id="aneorv32__cpu__cfu_8h_html"><div class="ttname"><a href="neorv32__cpu__cfu_8h.html">neorv32_cpu_cfu.h</a></div><div class="ttdoc">CPU Core custom functions unit HW driver header file.</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html"><div class="ttname"><a href="neorv32__cpu__csr_8h.html">neorv32_cpu_csr.h</a></div><div class="ttdoc">Control and Status Registers (CSR) definitions.</div></div> +<div class="ttc" id="aneorv32__crc_8h_html"><div class="ttname"><a href="neorv32__crc_8h.html">neorv32_crc.h</a></div><div class="ttdoc">Cyclic redundancy check unit (CRC) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__dma_8h_html"><div class="ttname"><a href="neorv32__dma_8h.html">neorv32_dma.h</a></div><div class="ttdoc">Direct Memory Access Controller (DMA) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__gpio_8h_html"><div class="ttname"><a href="neorv32__gpio_8h.html">neorv32_gpio.h</a></div><div class="ttdoc">General purpose input/output port unit (GPIO) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__gptmr_8h_html"><div class="ttname"><a href="neorv32__gptmr_8h.html">neorv32_gptmr.h</a></div><div class="ttdoc">General purpose timer (GPTMR) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__intrinsics_8h_html"><div class="ttname"><a href="neorv32__intrinsics_8h.html">neorv32_intrinsics.h</a></div><div class="ttdoc">Helper macros for custom &quot;intrinsics&quot; / instructions.</div></div> +<div class="ttc" id="aneorv32__legacy_8h_html"><div class="ttname"><a href="neorv32__legacy_8h.html">neorv32_legacy.h</a></div><div class="ttdoc">Legacy compatibility layer.</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html"><div class="ttname"><a href="neorv32__neoled_8h.html">neorv32_neoled.h</a></div><div class="ttdoc">Smart LED Interface (NEOLED) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html"><div class="ttname"><a href="neorv32__onewire_8h.html">neorv32_onewire.h</a></div><div class="ttdoc">1-Wire Interface Controller (ONEWIRE) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html"><div class="ttname"><a href="neorv32__pwm_8h.html">neorv32_pwm.h</a></div><div class="ttdoc">Pulse-Width Modulation Controller (PWM) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__rte_8h_html"><div class="ttname"><a href="neorv32__rte_8h.html">neorv32_rte.h</a></div><div class="ttdoc">NEORV32 Runtime Environment.</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html"><div class="ttname"><a href="neorv32__sdi_8h.html">neorv32_sdi.h</a></div><div class="ttdoc">Serial data interface controller (SPPI) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__slink_8h_html"><div class="ttname"><a href="neorv32__slink_8h.html">neorv32_slink.h</a></div><div class="ttdoc">Stream Link Interface HW driver header file.</div></div> +<div class="ttc" id="aneorv32__spi_8h_html"><div class="ttname"><a href="neorv32__spi_8h.html">neorv32_spi.h</a></div><div class="ttdoc">Serial peripheral interface controller (SPI) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html"><div class="ttname"><a href="neorv32__sysinfo_8h.html">neorv32_sysinfo.h</a></div><div class="ttdoc">System Information Memory (SYSINFO) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__trng_8h_html"><div class="ttname"><a href="neorv32__trng_8h.html">neorv32_trng.h</a></div><div class="ttdoc">True Random Number Generator (TRNG) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__twd_8h_html"><div class="ttname"><a href="neorv32__twd_8h.html">neorv32_twd.h</a></div><div class="ttdoc">Two-Wire Device Controller (TWD) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__twi_8h_html"><div class="ttname"><a href="neorv32__twi_8h.html">neorv32_twi.h</a></div><div class="ttdoc">Two-Wire Interface Controller (TWI) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__uart_8h_html"><div class="ttname"><a href="neorv32__uart_8h.html">neorv32_uart.h</a></div><div class="ttdoc">Universal asynchronous receiver/transmitter (UART0/UART1) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html"><div class="ttname"><a href="neorv32__wdt_8h.html">neorv32_wdt.h</a></div><div class="ttdoc">Watchdog Timer (WDT) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__xip_8h_html"><div class="ttname"><a href="neorv32__xip_8h.html">neorv32_xip.h</a></div><div class="ttdoc">Execute in place module (XIP) HW driver header file.</div></div> +<div class="ttc" id="aneorv32__xirq_8h_html"><div class="ttname"><a href="neorv32__xirq_8h.html">neorv32_xirq.h</a></div><div class="ttdoc">External Interrupt controller HW driver header file.</div></div> +<div class="ttc" id="aunionsubwords16__t_html"><div class="ttname"><a href="unionsubwords16__t.html">subwords16_t</a></div><div class="ttdef"><b>Definition</b> neorv32.h:239</div></div> +<div class="ttc" id="aunionsubwords32__t_html"><div class="ttname"><a href="unionsubwords32__t.html">subwords32_t</a></div><div class="ttdef"><b>Definition</b> neorv32.h:233</div></div> +<div class="ttc" id="aunionsubwords64__t_html"><div class="ttname"><a href="unionsubwords64__t.html">subwords64_t</a></div><div class="ttdef"><b>Definition</b> neorv32.h:226</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__aux_8c.html b/sw/neorv32__aux_8c.html new file mode 100644 index 0000000000..0553b4de03 --- /dev/null +++ b/sw/neorv32__aux_8c.html @@ -0,0 +1,267 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_aux.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_aux.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>General auxiliary functions source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a94aa8369ba5f4ebdf5628fcb1ab2ba1c" id="r_a94aa8369ba5f4ebdf5628fcb1ab2ba1c"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a94aa8369ba5f4ebdf5628fcb1ab2ba1c">neorv32_aux_date2unixtime</a> (<a class="el" href="structdate__t.html">date_t</a> *date)</td></tr> +<tr class="separator:a94aa8369ba5f4ebdf5628fcb1ab2ba1c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a885a81838a91b57797e849cb835c6887" id="r_a885a81838a91b57797e849cb835c6887"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a885a81838a91b57797e849cb835c6887">neorv32_aux_unixtime2date</a> (uint64_t unixtime, <a class="el" href="structdate__t.html">date_t</a> *date)</td></tr> +<tr class="separator:a885a81838a91b57797e849cb835c6887"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a05a5482da3b72a5bdf2181e754143d79" id="r_a05a5482da3b72a5bdf2181e754143d79"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a05a5482da3b72a5bdf2181e754143d79">neorv32_aux_hexstr2uint64</a> (char *buffer, unsigned int length)</td></tr> +<tr class="separator:a05a5482da3b72a5bdf2181e754143d79"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aff31dd983f75f70eeae331c65acaa50e" id="r_aff31dd983f75f70eeae331c65acaa50e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aff31dd983f75f70eeae331c65acaa50e">neorv32_aux_xorshift32</a> (void)</td></tr> +<tr class="separator:aff31dd983f75f70eeae331c65acaa50e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af72230251bc58d3142353849f63d5667" id="r_af72230251bc58d3142353849f63d5667"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af72230251bc58d3142353849f63d5667">neorv32_aux_itoa</a> (char *buffer, uint32_t num, uint32_t base)</td></tr> +<tr class="separator:af72230251bc58d3142353849f63d5667"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>General auxiliary functions source file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a94aa8369ba5f4ebdf5628fcb1ab2ba1c" name="a94aa8369ba5f4ebdf5628fcb1ab2ba1c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a94aa8369ba5f4ebdf5628fcb1ab2ba1c">&#9670;&#160;</a></span>neorv32_aux_date2unixtime()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_aux_date2unixtime </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structdate__t.html">date_t</a> *</td> <td class="paramname"><span class="paramname"><em>date</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Convert date to Unix time stamp.</p> +<dl class="section copyright"><dt>Copyright</dt><dd>Copyright (C) 2010-2024 Oryx Embedded SARL. All rights reserved. SPDX-License-Identifier: GPL-2.0-or-later <a href="https://github.com/Oryx-Embedded/Common/blob/master/date_time.c">https://github.com/Oryx-Embedded/Common/blob/master/date_time.c</a></dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">date</td><td>Pointer to date and time struct (<a class="el" href="structdate__t.html">date_t</a>). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Unix time since 00:00:00 UTC, January 1, 1970 in seconds. </dd></dl> + +</div> +</div> +<a id="a05a5482da3b72a5bdf2181e754143d79" name="a05a5482da3b72a5bdf2181e754143d79"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a05a5482da3b72a5bdf2181e754143d79">&#9670;&#160;</a></span>neorv32_aux_hexstr2uint64()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_aux_hexstr2uint64 </td> + <td>(</td> + <td class="paramtype">char *</td> <td class="paramname"><span class="paramname"><em>buffer</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">unsigned int</td> <td class="paramname"><span class="paramname"><em>length</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Helper function to convert up to 16 hex chars string into uint64_t</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">buffer</td><td>Pointer to array of chars to convert into number. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>Length of the conversion string. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Converted number (uint64_t). </dd></dl> + +</div> +</div> +<a id="af72230251bc58d3142353849f63d5667" name="af72230251bc58d3142353849f63d5667"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af72230251bc58d3142353849f63d5667">&#9670;&#160;</a></span>neorv32_aux_itoa()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_aux_itoa </td> + <td>(</td> + <td class="paramtype">char *</td> <td class="paramname"><span class="paramname"><em>buffer</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>num</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>base</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Simplified version of "itoa": convert number to string.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">buffer</td><td>Pointer to array for the result string [33 chars]. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">num</td><td>Number to convert. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">base</td><td>Base of number representation (2..16). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a885a81838a91b57797e849cb835c6887" name="a885a81838a91b57797e849cb835c6887"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a885a81838a91b57797e849cb835c6887">&#9670;&#160;</a></span>neorv32_aux_unixtime2date()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_aux_unixtime2date </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>unixtime</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"><a class="el" href="structdate__t.html">date_t</a> *</td> <td class="paramname"><span class="paramname"><em>date</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Convert Unix time stamp to date.</p> +<dl class="section copyright"><dt>Copyright</dt><dd>Copyright (C) 2010-2024 Oryx Embedded SARL. All rights reserved. SPDX-License-Identifier: GPL-2.0-or-later <a href="https://github.com/Oryx-Embedded/Common/blob/master/date_time.c">https://github.com/Oryx-Embedded/Common/blob/master/date_time.c</a></dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">unixtime</td><td>Unix time since 00:00:00 UTC, January 1, 1970 in seconds. </td></tr> + <tr><td class="paramdir">[in,out]</td><td class="paramname">date</td><td>Pointer to date and time struct (<a class="el" href="structdate__t.html">date_t</a>). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="aff31dd983f75f70eeae331c65acaa50e" name="aff31dd983f75f70eeae331c65acaa50e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aff31dd983f75f70eeae331c65acaa50e">&#9670;&#160;</a></span>neorv32_aux_xorshift32()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_aux_xorshift32 </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>XORSHIFT pseudo random number generator.</p> +<dl class="section return"><dt>Returns</dt><dd>Random number (uint32_t). </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__aux_8h.html b/sw/neorv32__aux_8h.html new file mode 100644 index 0000000000..733a368f3e --- /dev/null +++ b/sw/neorv32__aux_8h.html @@ -0,0 +1,328 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_aux.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_aux.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>General auxiliary functions header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__aux_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdate__t.html">date_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Select minimum/maximum</div></td></tr> +<tr class="memitem:aa18754c48dc72c66679e024e074f0f47" id="r_aa18754c48dc72c66679e024e074f0f47"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa18754c48dc72c66679e024e074f0f47">neorv32_aux_min</a>(a, b)</td></tr> +<tr class="separator:aa18754c48dc72c66679e024e074f0f47"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7be19d0ada72a1071a4baac9367702d1" id="r_a7be19d0ada72a1071a4baac9367702d1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7be19d0ada72a1071a4baac9367702d1">neorv32_aux_max</a>(a, b)</td></tr> +<tr class="separator:a7be19d0ada72a1071a4baac9367702d1"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">AUX prototypes</div></td></tr> +<tr class="memitem:a94aa8369ba5f4ebdf5628fcb1ab2ba1c" id="r_a94aa8369ba5f4ebdf5628fcb1ab2ba1c"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a94aa8369ba5f4ebdf5628fcb1ab2ba1c">neorv32_aux_date2unixtime</a> (<a class="el" href="structdate__t.html">date_t</a> *date)</td></tr> +<tr class="separator:a94aa8369ba5f4ebdf5628fcb1ab2ba1c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a885a81838a91b57797e849cb835c6887" id="r_a885a81838a91b57797e849cb835c6887"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a885a81838a91b57797e849cb835c6887">neorv32_aux_unixtime2date</a> (uint64_t unixtime, <a class="el" href="structdate__t.html">date_t</a> *date)</td></tr> +<tr class="separator:a885a81838a91b57797e849cb835c6887"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a05a5482da3b72a5bdf2181e754143d79" id="r_a05a5482da3b72a5bdf2181e754143d79"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a05a5482da3b72a5bdf2181e754143d79">neorv32_aux_hexstr2uint64</a> (char *buffer, unsigned int length)</td></tr> +<tr class="separator:a05a5482da3b72a5bdf2181e754143d79"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aff31dd983f75f70eeae331c65acaa50e" id="r_aff31dd983f75f70eeae331c65acaa50e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aff31dd983f75f70eeae331c65acaa50e">neorv32_aux_xorshift32</a> (void)</td></tr> +<tr class="separator:aff31dd983f75f70eeae331c65acaa50e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af72230251bc58d3142353849f63d5667" id="r_af72230251bc58d3142353849f63d5667"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af72230251bc58d3142353849f63d5667">neorv32_aux_itoa</a> (char *buffer, uint32_t num, uint32_t base)</td></tr> +<tr class="separator:af72230251bc58d3142353849f63d5667"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>General auxiliary functions header file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a7be19d0ada72a1071a4baac9367702d1" name="a7be19d0ada72a1071a4baac9367702d1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7be19d0ada72a1071a4baac9367702d1">&#9670;&#160;</a></span>neorv32_aux_max</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_aux_max</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>a</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>b</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line">({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a &gt; _b ? _a : _b; })</div> +</div><!-- fragment --> +</div> +</div> +<a id="aa18754c48dc72c66679e024e074f0f47" name="aa18754c48dc72c66679e024e074f0f47"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa18754c48dc72c66679e024e074f0f47">&#9670;&#160;</a></span>neorv32_aux_min</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_aux_min</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>a</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>b</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line">({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a &lt; _b ? _a : _b; })</div> +</div><!-- fragment --> +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a94aa8369ba5f4ebdf5628fcb1ab2ba1c" name="a94aa8369ba5f4ebdf5628fcb1ab2ba1c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a94aa8369ba5f4ebdf5628fcb1ab2ba1c">&#9670;&#160;</a></span>neorv32_aux_date2unixtime()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_aux_date2unixtime </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structdate__t.html">date_t</a> *</td> <td class="paramname"><span class="paramname"><em>date</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Convert date to Unix time stamp.</p> +<dl class="section copyright"><dt>Copyright</dt><dd>Copyright (C) 2010-2024 Oryx Embedded SARL. All rights reserved. SPDX-License-Identifier: GPL-2.0-or-later <a href="https://github.com/Oryx-Embedded/Common/blob/master/date_time.c">https://github.com/Oryx-Embedded/Common/blob/master/date_time.c</a></dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">date</td><td>Pointer to date and time struct (<a class="el" href="structdate__t.html">date_t</a>). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Unix time since 00:00:00 UTC, January 1, 1970 in seconds. </dd></dl> + +</div> +</div> +<a id="a05a5482da3b72a5bdf2181e754143d79" name="a05a5482da3b72a5bdf2181e754143d79"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a05a5482da3b72a5bdf2181e754143d79">&#9670;&#160;</a></span>neorv32_aux_hexstr2uint64()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_aux_hexstr2uint64 </td> + <td>(</td> + <td class="paramtype">char *</td> <td class="paramname"><span class="paramname"><em>buffer</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">unsigned int</td> <td class="paramname"><span class="paramname"><em>length</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Helper function to convert up to 16 hex chars string into uint64_t</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">buffer</td><td>Pointer to array of chars to convert into number. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>Length of the conversion string. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Converted number (uint64_t). </dd></dl> + +</div> +</div> +<a id="af72230251bc58d3142353849f63d5667" name="af72230251bc58d3142353849f63d5667"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af72230251bc58d3142353849f63d5667">&#9670;&#160;</a></span>neorv32_aux_itoa()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_aux_itoa </td> + <td>(</td> + <td class="paramtype">char *</td> <td class="paramname"><span class="paramname"><em>buffer</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>num</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>base</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Simplified version of "itoa": convert number to string.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">buffer</td><td>Pointer to array for the result string [33 chars]. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">num</td><td>Number to convert. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">base</td><td>Base of number representation (2..16). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a885a81838a91b57797e849cb835c6887" name="a885a81838a91b57797e849cb835c6887"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a885a81838a91b57797e849cb835c6887">&#9670;&#160;</a></span>neorv32_aux_unixtime2date()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_aux_unixtime2date </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>unixtime</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"><a class="el" href="structdate__t.html">date_t</a> *</td> <td class="paramname"><span class="paramname"><em>date</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Convert Unix time stamp to date.</p> +<dl class="section copyright"><dt>Copyright</dt><dd>Copyright (C) 2010-2024 Oryx Embedded SARL. All rights reserved. SPDX-License-Identifier: GPL-2.0-or-later <a href="https://github.com/Oryx-Embedded/Common/blob/master/date_time.c">https://github.com/Oryx-Embedded/Common/blob/master/date_time.c</a></dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">unixtime</td><td>Unix time since 00:00:00 UTC, January 1, 1970 in seconds. </td></tr> + <tr><td class="paramdir">[in,out]</td><td class="paramname">date</td><td>Pointer to date and time struct (<a class="el" href="structdate__t.html">date_t</a>). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="aff31dd983f75f70eeae331c65acaa50e" name="aff31dd983f75f70eeae331c65acaa50e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aff31dd983f75f70eeae331c65acaa50e">&#9670;&#160;</a></span>neorv32_aux_xorshift32()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_aux_xorshift32 </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>XORSHIFT pseudo random number generator.</p> +<dl class="section return"><dt>Returns</dt><dd>Random number (uint32_t). </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__aux_8h_source.html b/sw/neorv32__aux_8h_source.html new file mode 100644 index 0000000000..e80fdd6f75 --- /dev/null +++ b/sw/neorv32__aux_8h_source.html @@ -0,0 +1,154 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_aux.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_aux.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__aux_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#ifndef neorv32_aux_h</span></div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#define neorv32_aux_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#define neorv32_aux_min(a, b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a &lt; _b ? _a : _b; })</span></div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#define neorv32_aux_max(a, b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a &gt; _b ? _a : _b; })</span></div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00033" data-start="{" data-end="};"> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="structdate__t.html"> 33</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span>{</div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="structdate__t.html#aabab1b1efd94b69bfb28b639c612dd4f"> 34</a></span> uint16_t <a class="code hl_variable" href="structdate__t.html#aabab1b1efd94b69bfb28b639c612dd4f">year</a>; </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="structdate__t.html#a1a97f6a755cd4209a0880cf811d52c7b"> 35</a></span> uint8_t <a class="code hl_variable" href="structdate__t.html#a1a97f6a755cd4209a0880cf811d52c7b">month</a>; </div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="structdate__t.html#a482ad87226bae7841dfec63e035aeace"> 36</a></span> uint8_t <a class="code hl_variable" href="structdate__t.html#a482ad87226bae7841dfec63e035aeace">day</a>; </div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="structdate__t.html#a44167cd71416886e55048310af6d4e1b"> 37</a></span> uint8_t <a class="code hl_variable" href="structdate__t.html#a44167cd71416886e55048310af6d4e1b">weekday</a>; </div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="structdate__t.html#a39a23695634a2814d827984f4eea54eb"> 38</a></span> uint8_t <a class="code hl_variable" href="structdate__t.html#a39a23695634a2814d827984f4eea54eb">hours</a>; </div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="structdate__t.html#a2ab79834ebae42979e359bf30ad5f67a"> 39</a></span> uint8_t <a class="code hl_variable" href="structdate__t.html#a2ab79834ebae42979e359bf30ad5f67a">minutes</a>; </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="structdate__t.html#a1071948e7754cb415da9714d59a315bf"> 40</a></span> uint8_t <a class="code hl_variable" href="structdate__t.html#a1071948e7754cb415da9714d59a315bf">seconds</a>; </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span>} <a class="code hl_struct" href="structdate__t.html">date_t</a>;</div> +</div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span>uint64_t <a class="code hl_function" href="neorv32__aux_8h.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c">neorv32_aux_date2unixtime</a>(<a class="code hl_struct" href="structdate__t.html">date_t</a>* date);</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__aux_8h.html#a885a81838a91b57797e849cb835c6887">neorv32_aux_unixtime2date</a>(uint64_t unixtime, <a class="code hl_struct" href="structdate__t.html">date_t</a>* date);</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span>uint64_t <a class="code hl_function" href="neorv32__aux_8h.html#a05a5482da3b72a5bdf2181e754143d79">neorv32_aux_hexstr2uint64</a>(<span class="keywordtype">char</span> *buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length);</div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span>uint32_t <a class="code hl_function" href="neorv32__aux_8h.html#aff31dd983f75f70eeae331c65acaa50e">neorv32_aux_xorshift32</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__aux_8h.html#af72230251bc58d3142353849f63d5667">neorv32_aux_itoa</a>(<span class="keywordtype">char</span> *buffer, uint32_t num, uint32_t base);</div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_aux_h</span></div> +<div class="ttc" id="aneorv32__aux_8h_html_a05a5482da3b72a5bdf2181e754143d79"><div class="ttname"><a href="neorv32__aux_8h.html#a05a5482da3b72a5bdf2181e754143d79">neorv32_aux_hexstr2uint64</a></div><div class="ttdeci">uint64_t neorv32_aux_hexstr2uint64(char *buffer, unsigned int length)</div><div class="ttdef"><b>Definition</b> neorv32_aux.c:151</div></div> +<div class="ttc" id="aneorv32__aux_8h_html_a885a81838a91b57797e849cb835c6887"><div class="ttname"><a href="neorv32__aux_8h.html#a885a81838a91b57797e849cb835c6887">neorv32_aux_unixtime2date</a></div><div class="ttdeci">void neorv32_aux_unixtime2date(uint64_t unixtime, date_t *date)</div><div class="ttdef"><b>Definition</b> neorv32_aux.c:85</div></div> +<div class="ttc" id="aneorv32__aux_8h_html_a94aa8369ba5f4ebdf5628fcb1ab2ba1c"><div class="ttname"><a href="neorv32__aux_8h.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c">neorv32_aux_date2unixtime</a></div><div class="ttdeci">uint64_t neorv32_aux_date2unixtime(date_t *date)</div><div class="ttdef"><b>Definition</b> neorv32_aux.c:28</div></div> +<div class="ttc" id="aneorv32__aux_8h_html_af72230251bc58d3142353849f63d5667"><div class="ttname"><a href="neorv32__aux_8h.html#af72230251bc58d3142353849f63d5667">neorv32_aux_itoa</a></div><div class="ttdeci">void neorv32_aux_itoa(char *buffer, uint32_t num, uint32_t base)</div><div class="ttdef"><b>Definition</b> neorv32_aux.c:214</div></div> +<div class="ttc" id="aneorv32__aux_8h_html_aff31dd983f75f70eeae331c65acaa50e"><div class="ttname"><a href="neorv32__aux_8h.html#aff31dd983f75f70eeae331c65acaa50e">neorv32_aux_xorshift32</a></div><div class="ttdeci">uint32_t neorv32_aux_xorshift32(void)</div><div class="ttdef"><b>Definition</b> neorv32_aux.c:195</div></div> +<div class="ttc" id="astructdate__t_html"><div class="ttname"><a href="structdate__t.html">date_t</a></div><div class="ttdef"><b>Definition</b> neorv32_aux.h:33</div></div> +<div class="ttc" id="astructdate__t_html_a1071948e7754cb415da9714d59a315bf"><div class="ttname"><a href="structdate__t.html#a1071948e7754cb415da9714d59a315bf">date_t::seconds</a></div><div class="ttdeci">uint8_t seconds</div><div class="ttdef"><b>Definition</b> neorv32_aux.h:40</div></div> +<div class="ttc" id="astructdate__t_html_a1a97f6a755cd4209a0880cf811d52c7b"><div class="ttname"><a href="structdate__t.html#a1a97f6a755cd4209a0880cf811d52c7b">date_t::month</a></div><div class="ttdeci">uint8_t month</div><div class="ttdef"><b>Definition</b> neorv32_aux.h:35</div></div> +<div class="ttc" id="astructdate__t_html_a2ab79834ebae42979e359bf30ad5f67a"><div class="ttname"><a href="structdate__t.html#a2ab79834ebae42979e359bf30ad5f67a">date_t::minutes</a></div><div class="ttdeci">uint8_t minutes</div><div class="ttdef"><b>Definition</b> neorv32_aux.h:39</div></div> +<div class="ttc" id="astructdate__t_html_a39a23695634a2814d827984f4eea54eb"><div class="ttname"><a href="structdate__t.html#a39a23695634a2814d827984f4eea54eb">date_t::hours</a></div><div class="ttdeci">uint8_t hours</div><div class="ttdef"><b>Definition</b> neorv32_aux.h:38</div></div> +<div class="ttc" id="astructdate__t_html_a44167cd71416886e55048310af6d4e1b"><div class="ttname"><a href="structdate__t.html#a44167cd71416886e55048310af6d4e1b">date_t::weekday</a></div><div class="ttdeci">uint8_t weekday</div><div class="ttdef"><b>Definition</b> neorv32_aux.h:37</div></div> +<div class="ttc" id="astructdate__t_html_a482ad87226bae7841dfec63e035aeace"><div class="ttname"><a href="structdate__t.html#a482ad87226bae7841dfec63e035aeace">date_t::day</a></div><div class="ttdeci">uint8_t day</div><div class="ttdef"><b>Definition</b> neorv32_aux.h:36</div></div> +<div class="ttc" id="astructdate__t_html_aabab1b1efd94b69bfb28b639c612dd4f"><div class="ttname"><a href="structdate__t.html#aabab1b1efd94b69bfb28b639c612dd4f">date_t::year</a></div><div class="ttdeci">uint16_t year</div><div class="ttdef"><b>Definition</b> neorv32_aux.h:34</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cfs_8c.html b/sw/neorv32__cfs_8c.html new file mode 100644 index 0000000000..9875bae152 --- /dev/null +++ b/sw/neorv32__cfs_8c.html @@ -0,0 +1,142 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_cfs.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_cfs.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Custom Functions Subsystem (CFS) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:abac96dfaefe433eca1c0b93fa6183d2e" id="r_abac96dfaefe433eca1c0b93fa6183d2e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abac96dfaefe433eca1c0b93fa6183d2e">neorv32_cfs_available</a> (void)</td></tr> +<tr class="separator:abac96dfaefe433eca1c0b93fa6183d2e"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Custom Functions Subsystem (CFS) HW driver source file. </p> +<dl class="section warning"><dt>Warning</dt><dd>There are no "real" CFS driver functions available here, because these functions are defined by the actual hardware. </dd> +<dd> +Hence, the CFS designer has to provide the actual driver functions.</dd></dl> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the CFS was synthesized (IO_CFS_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="abac96dfaefe433eca1c0b93fa6183d2e" name="abac96dfaefe433eca1c0b93fa6183d2e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abac96dfaefe433eca1c0b93fa6183d2e">&#9670;&#160;</a></span>neorv32_cfs_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_cfs_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if custom functions subsystem was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if CFS was not synthesized, 1 if CFS is available. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cfs_8h.html b/sw/neorv32__cfs_8h.html new file mode 100644 index 0000000000..4af6c7f6dd --- /dev/null +++ b/sw/neorv32__cfs_8h.html @@ -0,0 +1,172 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cfs.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_cfs.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Custom Functions Subsystem (CFS) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__cfs_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__cfs__t.html">neorv32_cfs_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">IO Device: Custom Functions Subsystem (CFS)</div></td></tr> +<tr class="memitem:a6c101b306bd096f78d351e39b308d3e2" id="r_a6c101b306bd096f78d351e39b308d3e2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6c101b306bd096f78d351e39b308d3e2">NEORV32_CFS</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__cfs__t.html">neorv32_cfs_t</a>*) (<a class="el" href="neorv32_8h.html#a41d6f97daef61641da96b9f72f6b272f">NEORV32_CFS_BASE</a>))</td></tr> +<tr class="separator:a6c101b306bd096f78d351e39b308d3e2"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:abac96dfaefe433eca1c0b93fa6183d2e" id="r_abac96dfaefe433eca1c0b93fa6183d2e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abac96dfaefe433eca1c0b93fa6183d2e">neorv32_cfs_available</a> (void)</td></tr> +<tr class="separator:abac96dfaefe433eca1c0b93fa6183d2e"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Custom Functions Subsystem (CFS) HW driver header file. </p> +<dl class="section warning"><dt>Warning</dt><dd>There are no "real" CFS driver functions available here, because these functions are defined by the actual hardware. </dd> +<dd> +The CFS designer has to provide the actual driver functions.</dd></dl> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the CFS was synthesized (IO_CFS_EN = true). </dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a6c101b306bd096f78d351e39b308d3e2" name="a6c101b306bd096f78d351e39b308d3e2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6c101b306bd096f78d351e39b308d3e2">&#9670;&#160;</a></span>NEORV32_CFS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_CFS&#160;&#160;&#160;((<a class="el" href="structneorv32__cfs__t.html">neorv32_cfs_t</a>*) (<a class="el" href="neorv32_8h.html#a41d6f97daef61641da96b9f72f6b272f">NEORV32_CFS_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>CFS module hardware access (<a class="el" href="structneorv32__cfs__t.html">neorv32_cfs_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="abac96dfaefe433eca1c0b93fa6183d2e" name="abac96dfaefe433eca1c0b93fa6183d2e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abac96dfaefe433eca1c0b93fa6183d2e">&#9670;&#160;</a></span>neorv32_cfs_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_cfs_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if custom functions subsystem was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if CFS was not synthesized, 1 if CFS is available. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cfs_8h_source.html b/sw/neorv32__cfs_8h_source.html new file mode 100644 index 0000000000..cb8b22bd1b --- /dev/null +++ b/sw/neorv32__cfs_8h_source.html @@ -0,0 +1,130 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cfs.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_cfs.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__cfs_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifndef neorv32_cfs_h</span></div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define neorv32_cfs_h</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00031" data-start="{" data-end="};"> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__cfs__t.html"> 31</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="structneorv32__cfs__t.html#a9bfa2b6f4938f42fb1ee3beaeb8cc32e"> 32</a></span> uint32_t REG[(64*1024)/4]; </div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>} <a class="code hl_struct" href="structneorv32__cfs__t.html">neorv32_cfs_t</a>;</div> +</div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="neorv32__cfs_8h.html#a6c101b306bd096f78d351e39b308d3e2"> 36</a></span><span class="preprocessor">#define NEORV32_CFS ((neorv32_cfs_t*) (NEORV32_CFS_BASE))</span></div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__cfs_8h.html#abac96dfaefe433eca1c0b93fa6183d2e">neorv32_cfs_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_cfs_h</span></div> +<div class="ttc" id="aneorv32__cfs_8h_html_abac96dfaefe433eca1c0b93fa6183d2e"><div class="ttname"><a href="neorv32__cfs_8h.html#abac96dfaefe433eca1c0b93fa6183d2e">neorv32_cfs_available</a></div><div class="ttdeci">int neorv32_cfs_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_cfs.c:29</div></div> +<div class="ttc" id="astructneorv32__cfs__t_html"><div class="ttname"><a href="structneorv32__cfs__t.html">neorv32_cfs_t</a></div><div class="ttdef"><b>Definition</b> neorv32_cfs.h:31</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__clint_8c.html b/sw/neorv32__clint_8c.html new file mode 100644 index 0000000000..e831095065 --- /dev/null +++ b/sw/neorv32__clint_8c.html @@ -0,0 +1,347 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_clint.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_clint.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Hardware Local Interruptor (CLINT) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a197e7946193987bf04a08aa0563462bf" id="r_a197e7946193987bf04a08aa0563462bf"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a197e7946193987bf04a08aa0563462bf">neorv32_clint_available</a> (void)</td></tr> +<tr class="separator:a197e7946193987bf04a08aa0563462bf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4478c86505e3a22b774208006060b8a4" id="r_a4478c86505e3a22b774208006060b8a4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4478c86505e3a22b774208006060b8a4">neorv32_clint_msi_set</a> (int hart)</td></tr> +<tr class="separator:a4478c86505e3a22b774208006060b8a4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6655e1e21cc94cda4e5c21544a72c758" id="r_a6655e1e21cc94cda4e5c21544a72c758"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6655e1e21cc94cda4e5c21544a72c758">neorv32_clint_msi_clr</a> (int hart)</td></tr> +<tr class="separator:a6655e1e21cc94cda4e5c21544a72c758"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af8e6985da6cd629a0572edd8c70cd888" id="r_af8e6985da6cd629a0572edd8c70cd888"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af8e6985da6cd629a0572edd8c70cd888">neorv32_clint_time_set</a> (uint64_t time)</td></tr> +<tr class="separator:af8e6985da6cd629a0572edd8c70cd888"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a94364eb5e89145b5e2b61ac6d3eeccd4" id="r_a94364eb5e89145b5e2b61ac6d3eeccd4"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a94364eb5e89145b5e2b61ac6d3eeccd4">neorv32_clint_time_get</a> (void)</td></tr> +<tr class="separator:a94364eb5e89145b5e2b61ac6d3eeccd4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af1e2ff4ce5f3a20b07eeaac50685110a" id="r_af1e2ff4ce5f3a20b07eeaac50685110a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af1e2ff4ce5f3a20b07eeaac50685110a">neorv32_clint_mtimecmp_set</a> (int hart, uint64_t timecmp)</td></tr> +<tr class="separator:af1e2ff4ce5f3a20b07eeaac50685110a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1d6526b096fbf99fdde2632bff7ce8df" id="r_a1d6526b096fbf99fdde2632bff7ce8df"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1d6526b096fbf99fdde2632bff7ce8df">neorv32_clint_mtimecmp_get</a> (int hart)</td></tr> +<tr class="separator:a1d6526b096fbf99fdde2632bff7ce8df"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abe9bcd07591e9c2d3e27435809bf4bdd" id="r_abe9bcd07591e9c2d3e27435809bf4bdd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abe9bcd07591e9c2d3e27435809bf4bdd">neorv32_clint_unixtime_set</a> (uint64_t unixtime)</td></tr> +<tr class="separator:abe9bcd07591e9c2d3e27435809bf4bdd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a89aa592a96260e68f99df71a194facaa" id="r_a89aa592a96260e68f99df71a194facaa"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a89aa592a96260e68f99df71a194facaa">neorv32_clint_unixtime_get</a> (void)</td></tr> +<tr class="separator:a89aa592a96260e68f99df71a194facaa"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Hardware Local Interruptor (CLINT) HW driver source file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a197e7946193987bf04a08aa0563462bf" name="a197e7946193987bf04a08aa0563462bf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a197e7946193987bf04a08aa0563462bf">&#9670;&#160;</a></span>neorv32_clint_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_clint_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if CLINT module was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if CLINT was not synthesized, 1 if CLINT is available. </dd></dl> + +</div> +</div> +<a id="a6655e1e21cc94cda4e5c21544a72c758" name="a6655e1e21cc94cda4e5c21544a72c758"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6655e1e21cc94cda4e5c21544a72c758">&#9670;&#160;</a></span>neorv32_clint_msi_clr()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_clint_msi_clr </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>hart</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear machine software interrupt.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">hart</td><td>Hart index (0..4094). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a4478c86505e3a22b774208006060b8a4" name="a4478c86505e3a22b774208006060b8a4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4478c86505e3a22b774208006060b8a4">&#9670;&#160;</a></span>neorv32_clint_msi_set()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_clint_msi_set </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>hart</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Trigger machine software interrupt.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">hart</td><td>Hart index (0..4094). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a1d6526b096fbf99fdde2632bff7ce8df" name="a1d6526b096fbf99fdde2632bff7ce8df"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1d6526b096fbf99fdde2632bff7ce8df">&#9670;&#160;</a></span>neorv32_clint_mtimecmp_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_clint_mtimecmp_get </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>hart</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get MTIMER compare time register (MTIMECMP).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">hart</td><td>Hart index (0..4094). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Current MTIMECMP value. </dd></dl> + +</div> +</div> +<a id="af1e2ff4ce5f3a20b07eeaac50685110a" name="af1e2ff4ce5f3a20b07eeaac50685110a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af1e2ff4ce5f3a20b07eeaac50685110a">&#9670;&#160;</a></span>neorv32_clint_mtimecmp_set()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_clint_mtimecmp_set </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>hart</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>timecmp</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set MTIMER compare time register (MTIMECMP) for generating interrupts.</p> +<dl class="section note"><dt>Note</dt><dd>The interrupt is triggered when MTIME &gt;= MTIMECMP. </dd> +<dd> +Global interrupts and the timer interrupt source have to be enabled.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">hart</td><td>Hart index (0..4094). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">timecmp</td><td>System time for interrupt (uint64_t). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a94364eb5e89145b5e2b61ac6d3eeccd4" name="a94364eb5e89145b5e2b61ac6d3eeccd4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a94364eb5e89145b5e2b61ac6d3eeccd4">&#9670;&#160;</a></span>neorv32_clint_time_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_clint_time_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current system time.</p> +<dl class="section note"><dt>Note</dt><dd>The CLINT MTIME timer increments with the primary processor clock.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Current system time (uint64_t). </dd></dl> + +</div> +</div> +<a id="af8e6985da6cd629a0572edd8c70cd888" name="af8e6985da6cd629a0572edd8c70cd888"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af8e6985da6cd629a0572edd8c70cd888">&#9670;&#160;</a></span>neorv32_clint_time_set()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_clint_time_set </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>time</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set current CLINT system time.</p> +<dl class="section note"><dt>Note</dt><dd>The CLINT timer increments with the primary processor clock.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">time</td><td>New system time (uint64_t). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a89aa592a96260e68f99df71a194facaa" name="a89aa592a96260e68f99df71a194facaa"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a89aa592a96260e68f99df71a194facaa">&#9670;&#160;</a></span>neorv32_clint_unixtime_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_clint_unixtime_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get Unix time from TIME.</p> +<dl class="section return"><dt>Returns</dt><dd>Unix time since 00:00:00 UTC, January 1st, 1970 in seconds. </dd></dl> + +</div> +</div> +<a id="abe9bcd07591e9c2d3e27435809bf4bdd" name="abe9bcd07591e9c2d3e27435809bf4bdd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abe9bcd07591e9c2d3e27435809bf4bdd">&#9670;&#160;</a></span>neorv32_clint_unixtime_set()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_clint_unixtime_set </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>unixtime</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set TIME to Unix time.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">unixtime</td><td>Unix time since 00:00:00 UTC, January 1st, 1970 in seconds. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__clint_8h.html b/sw/neorv32__clint_8h.html new file mode 100644 index 0000000000..649525d01e --- /dev/null +++ b/sw/neorv32__clint_8h.html @@ -0,0 +1,377 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_clint.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_clint.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Hardware Local Interruptor (CLINT) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__clint_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__clint__t.html">neorv32_clint_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">IO Device: Core Local Interruptor (CLINT)</div></td></tr> +<tr class="memitem:aa85ecb43f16fa798c5e583f08d29ca3e" id="r_aa85ecb43f16fa798c5e583f08d29ca3e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa85ecb43f16fa798c5e583f08d29ca3e">NEORV32_CLINT</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__clint__t.html">neorv32_clint_t</a>*) (<a class="el" href="neorv32_8h.html#ab1522f52c3c24ba2245dfa2783932d42">NEORV32_CLINT_BASE</a>))</td></tr> +<tr class="separator:aa85ecb43f16fa798c5e583f08d29ca3e"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:a197e7946193987bf04a08aa0563462bf" id="r_a197e7946193987bf04a08aa0563462bf"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a197e7946193987bf04a08aa0563462bf">neorv32_clint_available</a> (void)</td></tr> +<tr class="separator:a197e7946193987bf04a08aa0563462bf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4478c86505e3a22b774208006060b8a4" id="r_a4478c86505e3a22b774208006060b8a4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4478c86505e3a22b774208006060b8a4">neorv32_clint_msi_set</a> (int hart)</td></tr> +<tr class="separator:a4478c86505e3a22b774208006060b8a4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6655e1e21cc94cda4e5c21544a72c758" id="r_a6655e1e21cc94cda4e5c21544a72c758"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6655e1e21cc94cda4e5c21544a72c758">neorv32_clint_msi_clr</a> (int hart)</td></tr> +<tr class="separator:a6655e1e21cc94cda4e5c21544a72c758"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af8e6985da6cd629a0572edd8c70cd888" id="r_af8e6985da6cd629a0572edd8c70cd888"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af8e6985da6cd629a0572edd8c70cd888">neorv32_clint_time_set</a> (uint64_t time)</td></tr> +<tr class="separator:af8e6985da6cd629a0572edd8c70cd888"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a94364eb5e89145b5e2b61ac6d3eeccd4" id="r_a94364eb5e89145b5e2b61ac6d3eeccd4"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a94364eb5e89145b5e2b61ac6d3eeccd4">neorv32_clint_time_get</a> (void)</td></tr> +<tr class="separator:a94364eb5e89145b5e2b61ac6d3eeccd4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af1e2ff4ce5f3a20b07eeaac50685110a" id="r_af1e2ff4ce5f3a20b07eeaac50685110a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af1e2ff4ce5f3a20b07eeaac50685110a">neorv32_clint_mtimecmp_set</a> (int hart, uint64_t timecmp)</td></tr> +<tr class="separator:af1e2ff4ce5f3a20b07eeaac50685110a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1d6526b096fbf99fdde2632bff7ce8df" id="r_a1d6526b096fbf99fdde2632bff7ce8df"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1d6526b096fbf99fdde2632bff7ce8df">neorv32_clint_mtimecmp_get</a> (int hart)</td></tr> +<tr class="separator:a1d6526b096fbf99fdde2632bff7ce8df"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abe9bcd07591e9c2d3e27435809bf4bdd" id="r_abe9bcd07591e9c2d3e27435809bf4bdd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abe9bcd07591e9c2d3e27435809bf4bdd">neorv32_clint_unixtime_set</a> (uint64_t unixtime)</td></tr> +<tr class="separator:abe9bcd07591e9c2d3e27435809bf4bdd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a89aa592a96260e68f99df71a194facaa" id="r_a89aa592a96260e68f99df71a194facaa"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a89aa592a96260e68f99df71a194facaa">neorv32_clint_unixtime_get</a> (void)</td></tr> +<tr class="separator:a89aa592a96260e68f99df71a194facaa"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Hardware Local Interruptor (CLINT) HW driver header file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="aa85ecb43f16fa798c5e583f08d29ca3e" name="aa85ecb43f16fa798c5e583f08d29ca3e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa85ecb43f16fa798c5e583f08d29ca3e">&#9670;&#160;</a></span>NEORV32_CLINT</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_CLINT&#160;&#160;&#160;((<a class="el" href="structneorv32__clint__t.html">neorv32_clint_t</a>*) (<a class="el" href="neorv32_8h.html#ab1522f52c3c24ba2245dfa2783932d42">NEORV32_CLINT_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>CLINT module hardware access (<a class="el" href="structneorv32__clint__t.html">neorv32_clint_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a197e7946193987bf04a08aa0563462bf" name="a197e7946193987bf04a08aa0563462bf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a197e7946193987bf04a08aa0563462bf">&#9670;&#160;</a></span>neorv32_clint_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_clint_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if CLINT module was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if CLINT was not synthesized, 1 if CLINT is available. </dd></dl> + +</div> +</div> +<a id="a6655e1e21cc94cda4e5c21544a72c758" name="a6655e1e21cc94cda4e5c21544a72c758"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6655e1e21cc94cda4e5c21544a72c758">&#9670;&#160;</a></span>neorv32_clint_msi_clr()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_clint_msi_clr </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>hart</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear machine software interrupt.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">hart</td><td>Hart index (0..4094). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a4478c86505e3a22b774208006060b8a4" name="a4478c86505e3a22b774208006060b8a4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4478c86505e3a22b774208006060b8a4">&#9670;&#160;</a></span>neorv32_clint_msi_set()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_clint_msi_set </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>hart</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Trigger machine software interrupt.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">hart</td><td>Hart index (0..4094). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a1d6526b096fbf99fdde2632bff7ce8df" name="a1d6526b096fbf99fdde2632bff7ce8df"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1d6526b096fbf99fdde2632bff7ce8df">&#9670;&#160;</a></span>neorv32_clint_mtimecmp_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_clint_mtimecmp_get </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>hart</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get MTIMER compare time register (MTIMECMP).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">hart</td><td>Hart index (0..4094). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Current MTIMECMP value. </dd></dl> + +</div> +</div> +<a id="af1e2ff4ce5f3a20b07eeaac50685110a" name="af1e2ff4ce5f3a20b07eeaac50685110a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af1e2ff4ce5f3a20b07eeaac50685110a">&#9670;&#160;</a></span>neorv32_clint_mtimecmp_set()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_clint_mtimecmp_set </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>hart</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>timecmp</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set MTIMER compare time register (MTIMECMP) for generating interrupts.</p> +<dl class="section note"><dt>Note</dt><dd>The interrupt is triggered when MTIME &gt;= MTIMECMP. </dd> +<dd> +Global interrupts and the timer interrupt source have to be enabled.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">hart</td><td>Hart index (0..4094). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">timecmp</td><td>System time for interrupt (uint64_t). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a94364eb5e89145b5e2b61ac6d3eeccd4" name="a94364eb5e89145b5e2b61ac6d3eeccd4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a94364eb5e89145b5e2b61ac6d3eeccd4">&#9670;&#160;</a></span>neorv32_clint_time_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_clint_time_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current system time.</p> +<dl class="section note"><dt>Note</dt><dd>The CLINT MTIME timer increments with the primary processor clock.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Current system time (uint64_t). </dd></dl> + +</div> +</div> +<a id="af8e6985da6cd629a0572edd8c70cd888" name="af8e6985da6cd629a0572edd8c70cd888"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af8e6985da6cd629a0572edd8c70cd888">&#9670;&#160;</a></span>neorv32_clint_time_set()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_clint_time_set </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>time</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set current CLINT system time.</p> +<dl class="section note"><dt>Note</dt><dd>The CLINT timer increments with the primary processor clock.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">time</td><td>New system time (uint64_t). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a89aa592a96260e68f99df71a194facaa" name="a89aa592a96260e68f99df71a194facaa"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a89aa592a96260e68f99df71a194facaa">&#9670;&#160;</a></span>neorv32_clint_unixtime_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_clint_unixtime_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get Unix time from TIME.</p> +<dl class="section return"><dt>Returns</dt><dd>Unix time since 00:00:00 UTC, January 1st, 1970 in seconds. </dd></dl> + +</div> +</div> +<a id="abe9bcd07591e9c2d3e27435809bf4bdd" name="abe9bcd07591e9c2d3e27435809bf4bdd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abe9bcd07591e9c2d3e27435809bf4bdd">&#9670;&#160;</a></span>neorv32_clint_unixtime_set()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_clint_unixtime_set </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>unixtime</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set TIME to Unix time.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">unixtime</td><td>Unix time since 00:00:00 UTC, January 1st, 1970 in seconds. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__clint_8h_source.html b/sw/neorv32__clint_8h_source.html new file mode 100644 index 0000000000..bf2537270a --- /dev/null +++ b/sw/neorv32__clint_8h_source.html @@ -0,0 +1,150 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_clint.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_clint.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__clint_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef neorv32_clint_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define neorv32_clint_h</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00027" data-start="{" data-end="};"> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="structneorv32__clint__t.html"> 27</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="structneorv32__clint__t.html#a7b49826af73aae2035cd697cb4b2666b"> 28</a></span> uint32_t MSWI[4096]; </div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__clint__t.html#ac198a6ec62ea154d2533aebdd7b0df36"> 29</a></span> <a class="code hl_union" href="unionsubwords64__t.html">subwords64_t</a> MTIMECMP[4095]; </div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__clint__t.html#aea25562a01a789da8b6c5ee82c6a9ef0"> 30</a></span> <a class="code hl_union" href="unionsubwords64__t.html">subwords64_t</a> <a class="code hl_variable" href="structneorv32__clint__t.html#aea25562a01a789da8b6c5ee82c6a9ef0">MTIME</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span>} <a class="code hl_struct" href="structneorv32__clint__t.html">neorv32_clint_t</a>;</div> +</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="neorv32__clint_8h.html#aa85ecb43f16fa798c5e583f08d29ca3e"> 34</a></span><span class="preprocessor">#define NEORV32_CLINT ((neorv32_clint_t*) (NEORV32_CLINT_BASE))</span></div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__clint_8h.html#a197e7946193987bf04a08aa0563462bf">neorv32_clint_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__clint_8h.html#a4478c86505e3a22b774208006060b8a4">neorv32_clint_msi_set</a>(<span class="keywordtype">int</span> hart);</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__clint_8h.html#a6655e1e21cc94cda4e5c21544a72c758">neorv32_clint_msi_clr</a>(<span class="keywordtype">int</span> hart);</div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__clint_8h.html#af8e6985da6cd629a0572edd8c70cd888">neorv32_clint_time_set</a>(uint64_t time);</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span>uint64_t <a class="code hl_function" href="neorv32__clint_8h.html#a94364eb5e89145b5e2b61ac6d3eeccd4">neorv32_clint_time_get</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__clint_8h.html#af1e2ff4ce5f3a20b07eeaac50685110a">neorv32_clint_mtimecmp_set</a>(<span class="keywordtype">int</span> hart, uint64_t timecmp);</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span>uint64_t <a class="code hl_function" href="neorv32__clint_8h.html#a1d6526b096fbf99fdde2632bff7ce8df">neorv32_clint_mtimecmp_get</a>(<span class="keywordtype">int</span> hart);</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__clint_8h.html#abe9bcd07591e9c2d3e27435809bf4bdd">neorv32_clint_unixtime_set</a>(uint64_t unixtime);</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span>uint64_t <a class="code hl_function" href="neorv32__clint_8h.html#a89aa592a96260e68f99df71a194facaa">neorv32_clint_unixtime_get</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_clint_h</span></div> +<div class="ttc" id="aneorv32__clint_8h_html_a197e7946193987bf04a08aa0563462bf"><div class="ttname"><a href="neorv32__clint_8h.html#a197e7946193987bf04a08aa0563462bf">neorv32_clint_available</a></div><div class="ttdeci">int neorv32_clint_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_clint.c:24</div></div> +<div class="ttc" id="aneorv32__clint_8h_html_a1d6526b096fbf99fdde2632bff7ce8df"><div class="ttname"><a href="neorv32__clint_8h.html#a1d6526b096fbf99fdde2632bff7ce8df">neorv32_clint_mtimecmp_get</a></div><div class="ttdeci">uint64_t neorv32_clint_mtimecmp_get(int hart)</div><div class="ttdef"><b>Definition</b> neorv32_clint.c:132</div></div> +<div class="ttc" id="aneorv32__clint_8h_html_a4478c86505e3a22b774208006060b8a4"><div class="ttname"><a href="neorv32__clint_8h.html#a4478c86505e3a22b774208006060b8a4">neorv32_clint_msi_set</a></div><div class="ttdeci">void neorv32_clint_msi_set(int hart)</div><div class="ttdef"><b>Definition</b> neorv32_clint.c:40</div></div> +<div class="ttc" id="aneorv32__clint_8h_html_a6655e1e21cc94cda4e5c21544a72c758"><div class="ttname"><a href="neorv32__clint_8h.html#a6655e1e21cc94cda4e5c21544a72c758">neorv32_clint_msi_clr</a></div><div class="ttdeci">void neorv32_clint_msi_clr(int hart)</div><div class="ttdef"><b>Definition</b> neorv32_clint.c:51</div></div> +<div class="ttc" id="aneorv32__clint_8h_html_a89aa592a96260e68f99df71a194facaa"><div class="ttname"><a href="neorv32__clint_8h.html#a89aa592a96260e68f99df71a194facaa">neorv32_clint_unixtime_get</a></div><div class="ttdeci">uint64_t neorv32_clint_unixtime_get(void)</div><div class="ttdef"><b>Definition</b> neorv32_clint.c:154</div></div> +<div class="ttc" id="aneorv32__clint_8h_html_a94364eb5e89145b5e2b61ac6d3eeccd4"><div class="ttname"><a href="neorv32__clint_8h.html#a94364eb5e89145b5e2b61ac6d3eeccd4">neorv32_clint_time_get</a></div><div class="ttdeci">uint64_t neorv32_clint_time_get(void)</div><div class="ttdef"><b>Definition</b> neorv32_clint.c:83</div></div> +<div class="ttc" id="aneorv32__clint_8h_html_abe9bcd07591e9c2d3e27435809bf4bdd"><div class="ttname"><a href="neorv32__clint_8h.html#abe9bcd07591e9c2d3e27435809bf4bdd">neorv32_clint_unixtime_set</a></div><div class="ttdeci">void neorv32_clint_unixtime_set(uint64_t unixtime)</div><div class="ttdef"><b>Definition</b> neorv32_clint.c:143</div></div> +<div class="ttc" id="aneorv32__clint_8h_html_af1e2ff4ce5f3a20b07eeaac50685110a"><div class="ttname"><a href="neorv32__clint_8h.html#af1e2ff4ce5f3a20b07eeaac50685110a">neorv32_clint_mtimecmp_set</a></div><div class="ttdeci">void neorv32_clint_mtimecmp_set(int hart, uint64_t timecmp)</div><div class="ttdef"><b>Definition</b> neorv32_clint.c:112</div></div> +<div class="ttc" id="aneorv32__clint_8h_html_af8e6985da6cd629a0572edd8c70cd888"><div class="ttname"><a href="neorv32__clint_8h.html#af8e6985da6cd629a0572edd8c70cd888">neorv32_clint_time_set</a></div><div class="ttdeci">void neorv32_clint_time_set(uint64_t time)</div><div class="ttdef"><b>Definition</b> neorv32_clint.c:64</div></div> +<div class="ttc" id="astructneorv32__clint__t_html"><div class="ttname"><a href="structneorv32__clint__t.html">neorv32_clint_t</a></div><div class="ttdef"><b>Definition</b> neorv32_clint.h:27</div></div> +<div class="ttc" id="astructneorv32__clint__t_html_aea25562a01a789da8b6c5ee82c6a9ef0"><div class="ttname"><a href="structneorv32__clint__t.html#aea25562a01a789da8b6c5ee82c6a9ef0">neorv32_clint_t::MTIME</a></div><div class="ttdeci">subwords64_t MTIME</div><div class="ttdef"><b>Definition</b> neorv32_clint.h:30</div></div> +<div class="ttc" id="aunionsubwords64__t_html"><div class="ttname"><a href="unionsubwords64__t.html">subwords64_t</a></div><div class="ttdef"><b>Definition</b> neorv32.h:226</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cpu_8c.html b/sw/neorv32__cpu_8c.html new file mode 100644 index 0000000000..2d20d9e21a --- /dev/null +++ b/sw/neorv32__cpu_8c.html @@ -0,0 +1,413 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_cpu.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_cpu.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>CPU Core Functions HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ac3fd7dc7cd1e0a08225c41820af27f92" id="r_ac3fd7dc7cd1e0a08225c41820af27f92"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac3fd7dc7cd1e0a08225c41820af27f92">neorv32_cpu_get_cycle</a> (void)</td></tr> +<tr class="separator:ac3fd7dc7cd1e0a08225c41820af27f92"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a232d0290c459dc790d989fcdc4d121bf" id="r_a232d0290c459dc790d989fcdc4d121bf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a232d0290c459dc790d989fcdc4d121bf">neorv32_cpu_set_mcycle</a> (uint64_t value)</td></tr> +<tr class="separator:a232d0290c459dc790d989fcdc4d121bf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a387aa304770b05594c4acca128a60a75" id="r_a387aa304770b05594c4acca128a60a75"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a387aa304770b05594c4acca128a60a75">neorv32_cpu_get_instret</a> (void)</td></tr> +<tr class="separator:a387aa304770b05594c4acca128a60a75"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5c3cf52498abb3cf3c14a724b287ecf0" id="r_a5c3cf52498abb3cf3c14a724b287ecf0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5c3cf52498abb3cf3c14a724b287ecf0">neorv32_cpu_set_minstret</a> (uint64_t value)</td></tr> +<tr class="separator:a5c3cf52498abb3cf3c14a724b287ecf0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa9027535b13d9f9325e734997fc4a137" id="r_aa9027535b13d9f9325e734997fc4a137"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa9027535b13d9f9325e734997fc4a137">neorv32_cpu_delay_ms</a> (uint32_t time_ms)</td></tr> +<tr class="separator:aa9027535b13d9f9325e734997fc4a137"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8346fb926f84f3d7bccbb4741105505f" id="r_a8346fb926f84f3d7bccbb4741105505f"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8346fb926f84f3d7bccbb4741105505f">neorv32_cpu_get_clk_from_prsc</a> (int prsc)</td></tr> +<tr class="separator:a8346fb926f84f3d7bccbb4741105505f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a27dd614bc270dfa30ed73323ebda2d2d" id="r_a27dd614bc270dfa30ed73323ebda2d2d"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a27dd614bc270dfa30ed73323ebda2d2d">neorv32_cpu_pmp_get_num_regions</a> (void)</td></tr> +<tr class="separator:a27dd614bc270dfa30ed73323ebda2d2d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad4f8160f4821b6691e9682ef60c7cd7b" id="r_ad4f8160f4821b6691e9682ef60c7cd7b"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4f8160f4821b6691e9682ef60c7cd7b">neorv32_cpu_pmp_get_granularity</a> (void)</td></tr> +<tr class="separator:ad4f8160f4821b6691e9682ef60c7cd7b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa458a700619b2f7666cfcffe02ec2e2c" id="r_aa458a700619b2f7666cfcffe02ec2e2c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa458a700619b2f7666cfcffe02ec2e2c">neorv32_cpu_pmp_configure_region</a> (int index, uint32_t addr, uint8_t config)</td></tr> +<tr class="separator:aa458a700619b2f7666cfcffe02ec2e2c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a70f49b80322aa457f29f7671f94a183d" id="r_a70f49b80322aa457f29f7671f94a183d"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a70f49b80322aa457f29f7671f94a183d">neorv32_cpu_hpm_get_num_counters</a> (void)</td></tr> +<tr class="separator:a70f49b80322aa457f29f7671f94a183d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adb3ae542bbb0ddf9f562a4e42bc24d10" id="r_adb3ae542bbb0ddf9f562a4e42bc24d10"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adb3ae542bbb0ddf9f562a4e42bc24d10">neorv32_cpu_hpm_get_size</a> (void)</td></tr> +<tr class="separator:adb3ae542bbb0ddf9f562a4e42bc24d10"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aca49efb45d3808ad76cf65ba291f546d" id="r_aca49efb45d3808ad76cf65ba291f546d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aca49efb45d3808ad76cf65ba291f546d">neorv32_cpu_goto_user_mode</a> (void)</td></tr> +<tr class="separator:aca49efb45d3808ad76cf65ba291f546d"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>CPU Core Functions HW driver source file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="aa9027535b13d9f9325e734997fc4a137" name="aa9027535b13d9f9325e734997fc4a137"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa9027535b13d9f9325e734997fc4a137">&#9670;&#160;</a></span>neorv32_cpu_delay_ms()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_delay_ms </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>time_ms</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Delay function using busy wait.</p> +<dl class="section note"><dt>Note</dt><dd>This function uses the cycle CPU counter if available. Otherwise the CLINT.MTIMER system timer is used if available. A simple loop is used as alternative fall-back (imprecise!).</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">time_ms</td><td>Time in ms to wait (unsigned 32-bit). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a8346fb926f84f3d7bccbb4741105505f" name="a8346fb926f84f3d7bccbb4741105505f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8346fb926f84f3d7bccbb4741105505f">&#9670;&#160;</a></span>neorv32_cpu_get_clk_from_prsc()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_get_clk_from_prsc </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>prsc</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get actual clocking frequency from prescaler select <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a></p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>Prescaler select <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a>. return Actual <em>raw</em> clock frequency in Hz. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac3fd7dc7cd1e0a08225c41820af27f92" name="ac3fd7dc7cd1e0a08225c41820af27f92"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac3fd7dc7cd1e0a08225c41820af27f92">&#9670;&#160;</a></span>neorv32_cpu_get_cycle()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_cpu_get_cycle </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Unavailable extensions warnings. Get cycle counter from cycle[h].</p> +<dl class="section return"><dt>Returns</dt><dd>Current cycle counter (64 bit). </dd></dl> + +</div> +</div> +<a id="a387aa304770b05594c4acca128a60a75" name="a387aa304770b05594c4acca128a60a75"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a387aa304770b05594c4acca128a60a75">&#9670;&#160;</a></span>neorv32_cpu_get_instret()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_cpu_get_instret </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get retired instructions counter from instret[h].</p> +<dl class="section return"><dt>Returns</dt><dd>Current instructions counter (64 bit). </dd></dl> + +</div> +</div> +<a id="aca49efb45d3808ad76cf65ba291f546d" name="aca49efb45d3808ad76cf65ba291f546d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aca49efb45d3808ad76cf65ba291f546d">&#9670;&#160;</a></span>neorv32_cpu_goto_user_mode()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_goto_user_mode </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Switch from privilege mode MACHINE to privilege mode USER. </p> + +</div> +</div> +<a id="a70f49b80322aa457f29f7671f94a183d" name="a70f49b80322aa457f29f7671f94a183d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a70f49b80322aa457f29f7671f94a183d">&#9670;&#160;</a></span>neorv32_cpu_hpm_get_num_counters()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_hpm_get_num_counters </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Hardware performance monitors (HPM): Get number of available HPM counters.</p> +<dl class="section return"><dt>Returns</dt><dd>Returns number of available HPM counters. </dd></dl> + +</div> +</div> +<a id="adb3ae542bbb0ddf9f562a4e42bc24d10" name="adb3ae542bbb0ddf9f562a4e42bc24d10"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adb3ae542bbb0ddf9f562a4e42bc24d10">&#9670;&#160;</a></span>neorv32_cpu_hpm_get_size()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_hpm_get_size </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Hardware performance monitors (HPM): Get total counter width</p> +<dl class="section warning"><dt>Warning</dt><dd>This function overrides the mhpmcounter3[h] CSRs.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Size of HPM counters (1-64, 0 if not implemented at all). </dd></dl> + +</div> +</div> +<a id="aa458a700619b2f7666cfcffe02ec2e2c" name="aa458a700619b2f7666cfcffe02ec2e2c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa458a700619b2f7666cfcffe02ec2e2c">&#9670;&#160;</a></span>neorv32_cpu_pmp_configure_region()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_cpu_pmp_configure_region </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>index</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>config</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Physical memory protection (PMP): Configure region.</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the PMP CPU extension.</dd></dl> +<dl class="section warning"><dt>Warning</dt><dd>This function expects a WORD address!</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Region number (index, 0..PMP_NUM_REGIONS-1). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Region address (bits [33:2]). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">config</td><td>Region configuration byte (see <a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930ea">NEORV32_PMPCFG_ATTRIBUTES_enum</a>). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Returns 0 on success, !=0 on failure. </dd></dl> + +</div> +</div> +<a id="ad4f8160f4821b6691e9682ef60c7cd7b" name="ad4f8160f4821b6691e9682ef60c7cd7b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4f8160f4821b6691e9682ef60c7cd7b">&#9670;&#160;</a></span>neorv32_cpu_pmp_get_granularity()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_pmp_get_granularity </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Physical memory protection (PMP): Get minimal region size (granularity).</p> +<dl class="section warning"><dt>Warning</dt><dd>This function overrides PMPCFG0[0] and PMPADDR0 CSRs! </dd></dl> +<dl class="section note"><dt>Note</dt><dd>This function requires the PMP CPU extension.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Returns minimal region size in bytes. Returns zero on error. </dd></dl> + +</div> +</div> +<a id="a27dd614bc270dfa30ed73323ebda2d2d" name="a27dd614bc270dfa30ed73323ebda2d2d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a27dd614bc270dfa30ed73323ebda2d2d">&#9670;&#160;</a></span>neorv32_cpu_pmp_get_num_regions()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_pmp_get_num_regions </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Physical memory protection (PMP): Get number of available regions.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function overrides all available PMPCFG* CSRs! </dd></dl> +<dl class="section note"><dt>Note</dt><dd>This function requires the PMP CPU extension.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Returns number of available PMP regions. </dd></dl> + +</div> +</div> +<a id="a232d0290c459dc790d989fcdc4d121bf" name="a232d0290c459dc790d989fcdc4d121bf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a232d0290c459dc790d989fcdc4d121bf">&#9670;&#160;</a></span>neorv32_cpu_set_mcycle()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_set_mcycle </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>value</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set machine cycle counter mcycle[h].</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>New value for mcycle[h] CSR (64-bit). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a5c3cf52498abb3cf3c14a724b287ecf0" name="a5c3cf52498abb3cf3c14a724b287ecf0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5c3cf52498abb3cf3c14a724b287ecf0">&#9670;&#160;</a></span>neorv32_cpu_set_minstret()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_set_minstret </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>value</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set machine retired instructions counter minstret[h].</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>New value for mcycle[h] CSR (64-bit). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cpu_8h.html b/sw/neorv32__cpu_8h.html new file mode 100644 index 0000000000..c58fe0e2b8 --- /dev/null +++ b/sw/neorv32__cpu_8h.html @@ -0,0 +1,894 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_cpu.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>CPU Core Functions HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__cpu_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a173bb06b4ae9c8964469068dafcb7b0e" id="r_a173bb06b4ae9c8964469068dafcb7b0e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a173bb06b4ae9c8964469068dafcb7b0e">neorv32_cpu_store_unsigned_word</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:a173bb06b4ae9c8964469068dafcb7b0e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a31f30f6d6542758cd3073a9939b07653" id="r_a31f30f6d6542758cd3073a9939b07653"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a31f30f6d6542758cd3073a9939b07653">neorv32_cpu_store_unsigned_half</a> (uint32_t addr, uint16_t wdata)</td></tr> +<tr class="separator:a31f30f6d6542758cd3073a9939b07653"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aeec8ad2a82885c40a307346f9003483e" id="r_aeec8ad2a82885c40a307346f9003483e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aeec8ad2a82885c40a307346f9003483e">neorv32_cpu_store_unsigned_byte</a> (uint32_t addr, uint8_t wdata)</td></tr> +<tr class="separator:aeec8ad2a82885c40a307346f9003483e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3b6cf445e2136486564ef3d3473c91dd" id="r_a3b6cf445e2136486564ef3d3473c91dd"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3b6cf445e2136486564ef3d3473c91dd">neorv32_cpu_load_unsigned_word</a> (uint32_t addr)</td></tr> +<tr class="separator:a3b6cf445e2136486564ef3d3473c91dd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a32544cd652debb4affb308806a115d5b" id="r_a32544cd652debb4affb308806a115d5b"><td class="memItemLeft" align="right" valign="top">uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a32544cd652debb4affb308806a115d5b">neorv32_cpu_load_unsigned_half</a> (uint32_t addr)</td></tr> +<tr class="separator:a32544cd652debb4affb308806a115d5b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae9c8b6c681536ddea3aff0e63f30ef70" id="r_ae9c8b6c681536ddea3aff0e63f30ef70"><td class="memItemLeft" align="right" valign="top">int16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae9c8b6c681536ddea3aff0e63f30ef70">neorv32_cpu_load_signed_half</a> (uint32_t addr)</td></tr> +<tr class="separator:ae9c8b6c681536ddea3aff0e63f30ef70"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac54ec9b59e17c7cd9b9907abee82ce95" id="r_ac54ec9b59e17c7cd9b9907abee82ce95"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac54ec9b59e17c7cd9b9907abee82ce95">neorv32_cpu_load_unsigned_byte</a> (uint32_t addr)</td></tr> +<tr class="separator:ac54ec9b59e17c7cd9b9907abee82ce95"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a31f903596ab1bcddea79fdf608eaa666" id="r_a31f903596ab1bcddea79fdf608eaa666"><td class="memItemLeft" align="right" valign="top">int8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a31f903596ab1bcddea79fdf608eaa666">neorv32_cpu_load_signed_byte</a> (uint32_t addr)</td></tr> +<tr class="separator:a31f903596ab1bcddea79fdf608eaa666"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aab7a9f9cf608599f2b124dd499cb8418" id="r_aab7a9f9cf608599f2b124dd499cb8418"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aab7a9f9cf608599f2b124dd499cb8418">neorv32_cpu_csr_read</a> (const int csr_id)</td></tr> +<tr class="separator:aab7a9f9cf608599f2b124dd499cb8418"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afb5ef6e0b1a3e26570edfd8379490455" id="r_afb5ef6e0b1a3e26570edfd8379490455"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afb5ef6e0b1a3e26570edfd8379490455">neorv32_cpu_csr_write</a> (const int csr_id, uint32_t data)</td></tr> +<tr class="separator:afb5ef6e0b1a3e26570edfd8379490455"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a25a09de97229aac839ef6f74da604acf" id="r_a25a09de97229aac839ef6f74da604acf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a25a09de97229aac839ef6f74da604acf">neorv32_cpu_csr_set</a> (const int csr_id, uint32_t mask)</td></tr> +<tr class="separator:a25a09de97229aac839ef6f74da604acf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab8f533ddbc3a3af5e3bca2287ac10122" id="r_ab8f533ddbc3a3af5e3bca2287ac10122"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab8f533ddbc3a3af5e3bca2287ac10122">neorv32_cpu_csr_clr</a> (const int csr_id, uint32_t mask)</td></tr> +<tr class="separator:ab8f533ddbc3a3af5e3bca2287ac10122"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a769ca4556213619f6fea4ff6bfb979dd" id="r_a769ca4556213619f6fea4ff6bfb979dd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a769ca4556213619f6fea4ff6bfb979dd">neorv32_cpu_sleep</a> (void)</td></tr> +<tr class="separator:a769ca4556213619f6fea4ff6bfb979dd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:ac3fd7dc7cd1e0a08225c41820af27f92" id="r_ac3fd7dc7cd1e0a08225c41820af27f92"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac3fd7dc7cd1e0a08225c41820af27f92">neorv32_cpu_get_cycle</a> (void)</td></tr> +<tr class="separator:ac3fd7dc7cd1e0a08225c41820af27f92"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a232d0290c459dc790d989fcdc4d121bf" id="r_a232d0290c459dc790d989fcdc4d121bf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a232d0290c459dc790d989fcdc4d121bf">neorv32_cpu_set_mcycle</a> (uint64_t value)</td></tr> +<tr class="separator:a232d0290c459dc790d989fcdc4d121bf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a387aa304770b05594c4acca128a60a75" id="r_a387aa304770b05594c4acca128a60a75"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a387aa304770b05594c4acca128a60a75">neorv32_cpu_get_instret</a> (void)</td></tr> +<tr class="separator:a387aa304770b05594c4acca128a60a75"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5c3cf52498abb3cf3c14a724b287ecf0" id="r_a5c3cf52498abb3cf3c14a724b287ecf0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5c3cf52498abb3cf3c14a724b287ecf0">neorv32_cpu_set_minstret</a> (uint64_t value)</td></tr> +<tr class="separator:a5c3cf52498abb3cf3c14a724b287ecf0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa9027535b13d9f9325e734997fc4a137" id="r_aa9027535b13d9f9325e734997fc4a137"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa9027535b13d9f9325e734997fc4a137">neorv32_cpu_delay_ms</a> (uint32_t time_ms)</td></tr> +<tr class="separator:aa9027535b13d9f9325e734997fc4a137"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8346fb926f84f3d7bccbb4741105505f" id="r_a8346fb926f84f3d7bccbb4741105505f"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8346fb926f84f3d7bccbb4741105505f">neorv32_cpu_get_clk_from_prsc</a> (int prsc)</td></tr> +<tr class="separator:a8346fb926f84f3d7bccbb4741105505f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a27dd614bc270dfa30ed73323ebda2d2d" id="r_a27dd614bc270dfa30ed73323ebda2d2d"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a27dd614bc270dfa30ed73323ebda2d2d">neorv32_cpu_pmp_get_num_regions</a> (void)</td></tr> +<tr class="separator:a27dd614bc270dfa30ed73323ebda2d2d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad4f8160f4821b6691e9682ef60c7cd7b" id="r_ad4f8160f4821b6691e9682ef60c7cd7b"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4f8160f4821b6691e9682ef60c7cd7b">neorv32_cpu_pmp_get_granularity</a> (void)</td></tr> +<tr class="separator:ad4f8160f4821b6691e9682ef60c7cd7b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa458a700619b2f7666cfcffe02ec2e2c" id="r_aa458a700619b2f7666cfcffe02ec2e2c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa458a700619b2f7666cfcffe02ec2e2c">neorv32_cpu_pmp_configure_region</a> (int index, uint32_t addr, uint8_t config)</td></tr> +<tr class="separator:aa458a700619b2f7666cfcffe02ec2e2c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a70f49b80322aa457f29f7671f94a183d" id="r_a70f49b80322aa457f29f7671f94a183d"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a70f49b80322aa457f29f7671f94a183d">neorv32_cpu_hpm_get_num_counters</a> (void)</td></tr> +<tr class="separator:a70f49b80322aa457f29f7671f94a183d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adb3ae542bbb0ddf9f562a4e42bc24d10" id="r_adb3ae542bbb0ddf9f562a4e42bc24d10"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adb3ae542bbb0ddf9f562a4e42bc24d10">neorv32_cpu_hpm_get_size</a> (void)</td></tr> +<tr class="separator:adb3ae542bbb0ddf9f562a4e42bc24d10"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aca49efb45d3808ad76cf65ba291f546d" id="r_aca49efb45d3808ad76cf65ba291f546d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aca49efb45d3808ad76cf65ba291f546d">neorv32_cpu_goto_user_mode</a> (void)</td></tr> +<tr class="separator:aca49efb45d3808ad76cf65ba291f546d"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>CPU Core Functions HW driver header file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="ab8f533ddbc3a3af5e3bca2287ac10122" name="ab8f533ddbc3a3af5e3bca2287ac10122"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab8f533ddbc3a3af5e3bca2287ac10122">&#9670;&#160;</a></span>neorv32_cpu_csr_clr()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_csr_clr </td> + <td>(</td> + <td class="paramtype">const int</td> <td class="paramname"><span class="paramname"><em>csr_id</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>mask</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Clear bit(s) in CPU control and status register (CSR).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">csr_id</td><td>ID of CSR to write. See <a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49">NEORV32_CSR_enum</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">mask</td><td>Bit mask (high-active) to clear bits (uint32_t). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="aab7a9f9cf608599f2b124dd499cb8418" name="aab7a9f9cf608599f2b124dd499cb8418"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aab7a9f9cf608599f2b124dd499cb8418">&#9670;&#160;</a></span>neorv32_cpu_csr_read()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_csr_read </td> + <td>(</td> + <td class="paramtype">const int</td> <td class="paramname"><span class="paramname"><em>csr_id</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Read data from CPU control and status register (CSR).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">csr_id</td><td>ID of CSR to read. See <a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49">NEORV32_CSR_enum</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Read data (uint32_t). </dd></dl> + +</div> +</div> +<a id="a25a09de97229aac839ef6f74da604acf" name="a25a09de97229aac839ef6f74da604acf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a25a09de97229aac839ef6f74da604acf">&#9670;&#160;</a></span>neorv32_cpu_csr_set()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_csr_set </td> + <td>(</td> + <td class="paramtype">const int</td> <td class="paramname"><span class="paramname"><em>csr_id</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>mask</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Set bit(s) in CPU control and status register (CSR).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">csr_id</td><td>ID of CSR to write. See <a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49">NEORV32_CSR_enum</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">mask</td><td>Bit mask (high-active) to set bits (uint32_t). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="afb5ef6e0b1a3e26570edfd8379490455" name="afb5ef6e0b1a3e26570edfd8379490455"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afb5ef6e0b1a3e26570edfd8379490455">&#9670;&#160;</a></span>neorv32_cpu_csr_write()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_csr_write </td> + <td>(</td> + <td class="paramtype">const int</td> <td class="paramname"><span class="paramname"><em>csr_id</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>data</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Write data to CPU control and status register (CSR).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">csr_id</td><td>ID of CSR to write. See <a class="el" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49">NEORV32_CSR_enum</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Data to write (uint32_t). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="aa9027535b13d9f9325e734997fc4a137" name="aa9027535b13d9f9325e734997fc4a137"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa9027535b13d9f9325e734997fc4a137">&#9670;&#160;</a></span>neorv32_cpu_delay_ms()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_delay_ms </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>time_ms</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Delay function using busy wait.</p> +<dl class="section note"><dt>Note</dt><dd>This function uses the cycle CPU counter if available. Otherwise the CLINT.MTIMER system timer is used if available. A simple loop is used as alternative fall-back (imprecise!).</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">time_ms</td><td>Time in ms to wait (unsigned 32-bit). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a8346fb926f84f3d7bccbb4741105505f" name="a8346fb926f84f3d7bccbb4741105505f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8346fb926f84f3d7bccbb4741105505f">&#9670;&#160;</a></span>neorv32_cpu_get_clk_from_prsc()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_get_clk_from_prsc </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>prsc</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get actual clocking frequency from prescaler select <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a></p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>Prescaler select <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a>. return Actual <em>raw</em> clock frequency in Hz. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac3fd7dc7cd1e0a08225c41820af27f92" name="ac3fd7dc7cd1e0a08225c41820af27f92"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac3fd7dc7cd1e0a08225c41820af27f92">&#9670;&#160;</a></span>neorv32_cpu_get_cycle()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_cpu_get_cycle </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Unavailable extensions warnings. Get cycle counter from cycle[h].</p> +<dl class="section return"><dt>Returns</dt><dd>Current cycle counter (64 bit). </dd></dl> + +</div> +</div> +<a id="a387aa304770b05594c4acca128a60a75" name="a387aa304770b05594c4acca128a60a75"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a387aa304770b05594c4acca128a60a75">&#9670;&#160;</a></span>neorv32_cpu_get_instret()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_cpu_get_instret </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get retired instructions counter from instret[h].</p> +<dl class="section return"><dt>Returns</dt><dd>Current instructions counter (64 bit). </dd></dl> + +</div> +</div> +<a id="aca49efb45d3808ad76cf65ba291f546d" name="aca49efb45d3808ad76cf65ba291f546d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aca49efb45d3808ad76cf65ba291f546d">&#9670;&#160;</a></span>neorv32_cpu_goto_user_mode()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_goto_user_mode </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Switch from privilege mode MACHINE to privilege mode USER. </p> + +</div> +</div> +<a id="a70f49b80322aa457f29f7671f94a183d" name="a70f49b80322aa457f29f7671f94a183d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a70f49b80322aa457f29f7671f94a183d">&#9670;&#160;</a></span>neorv32_cpu_hpm_get_num_counters()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_hpm_get_num_counters </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Hardware performance monitors (HPM): Get number of available HPM counters.</p> +<dl class="section return"><dt>Returns</dt><dd>Returns number of available HPM counters. </dd></dl> + +</div> +</div> +<a id="adb3ae542bbb0ddf9f562a4e42bc24d10" name="adb3ae542bbb0ddf9f562a4e42bc24d10"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adb3ae542bbb0ddf9f562a4e42bc24d10">&#9670;&#160;</a></span>neorv32_cpu_hpm_get_size()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_hpm_get_size </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Hardware performance monitors (HPM): Get total counter width</p> +<dl class="section warning"><dt>Warning</dt><dd>This function overrides the mhpmcounter3[h] CSRs.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Size of HPM counters (1-64, 0 if not implemented at all). </dd></dl> + +</div> +</div> +<a id="a31f903596ab1bcddea79fdf608eaa666" name="a31f903596ab1bcddea79fdf608eaa666"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a31f903596ab1bcddea79fdf608eaa666">&#9670;&#160;</a></span>neorv32_cpu_load_signed_byte()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">int8_t neorv32_cpu_load_signed_byte </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Load signed byte from address space.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Read data byte (8-bit). </dd></dl> + +</div> +</div> +<a id="ae9c8b6c681536ddea3aff0e63f30ef70" name="ae9c8b6c681536ddea3aff0e63f30ef70"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae9c8b6c681536ddea3aff0e63f30ef70">&#9670;&#160;</a></span>neorv32_cpu_load_signed_half()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">int16_t neorv32_cpu_load_signed_half </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Load signed half-word from address space.</p> +<dl class="section note"><dt>Note</dt><dd>An unaligned access address will raise an alignment exception.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Read data half-word (16-bit). </dd></dl> + +</div> +</div> +<a id="ac54ec9b59e17c7cd9b9907abee82ce95" name="ac54ec9b59e17c7cd9b9907abee82ce95"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac54ec9b59e17c7cd9b9907abee82ce95">&#9670;&#160;</a></span>neorv32_cpu_load_unsigned_byte()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_cpu_load_unsigned_byte </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Load unsigned byte from address space.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Read data byte (8-bit). </dd></dl> + +</div> +</div> +<a id="a32544cd652debb4affb308806a115d5b" name="a32544cd652debb4affb308806a115d5b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a32544cd652debb4affb308806a115d5b">&#9670;&#160;</a></span>neorv32_cpu_load_unsigned_half()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint16_t neorv32_cpu_load_unsigned_half </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Load unsigned half-word from address space.</p> +<dl class="section note"><dt>Note</dt><dd>An unaligned access address will raise an alignment exception.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Read data half-word (16-bit). </dd></dl> + +</div> +</div> +<a id="a3b6cf445e2136486564ef3d3473c91dd" name="a3b6cf445e2136486564ef3d3473c91dd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3b6cf445e2136486564ef3d3473c91dd">&#9670;&#160;</a></span>neorv32_cpu_load_unsigned_word()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_load_unsigned_word </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Load unsigned word from address space.</p> +<dl class="section note"><dt>Note</dt><dd>An unaligned access address will raise an alignment exception.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Read data word (32-bit). </dd></dl> + +</div> +</div> +<a id="aa458a700619b2f7666cfcffe02ec2e2c" name="aa458a700619b2f7666cfcffe02ec2e2c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa458a700619b2f7666cfcffe02ec2e2c">&#9670;&#160;</a></span>neorv32_cpu_pmp_configure_region()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_cpu_pmp_configure_region </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>index</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>config</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Physical memory protection (PMP): Configure region.</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the PMP CPU extension.</dd></dl> +<dl class="section warning"><dt>Warning</dt><dd>This function expects a WORD address!</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Region number (index, 0..PMP_NUM_REGIONS-1). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Region address (bits [33:2]). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">config</td><td>Region configuration byte (see <a class="el" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930ea">NEORV32_PMPCFG_ATTRIBUTES_enum</a>). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Returns 0 on success, !=0 on failure. </dd></dl> + +</div> +</div> +<a id="ad4f8160f4821b6691e9682ef60c7cd7b" name="ad4f8160f4821b6691e9682ef60c7cd7b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4f8160f4821b6691e9682ef60c7cd7b">&#9670;&#160;</a></span>neorv32_cpu_pmp_get_granularity()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_pmp_get_granularity </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Physical memory protection (PMP): Get minimal region size (granularity).</p> +<dl class="section warning"><dt>Warning</dt><dd>This function overrides PMPCFG0[0] and PMPADDR0 CSRs! </dd></dl> +<dl class="section note"><dt>Note</dt><dd>This function requires the PMP CPU extension.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Returns minimal region size in bytes. Returns zero on error. </dd></dl> + +</div> +</div> +<a id="a27dd614bc270dfa30ed73323ebda2d2d" name="a27dd614bc270dfa30ed73323ebda2d2d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a27dd614bc270dfa30ed73323ebda2d2d">&#9670;&#160;</a></span>neorv32_cpu_pmp_get_num_regions()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_pmp_get_num_regions </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Physical memory protection (PMP): Get number of available regions.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function overrides all available PMPCFG* CSRs! </dd></dl> +<dl class="section note"><dt>Note</dt><dd>This function requires the PMP CPU extension.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Returns number of available PMP regions. </dd></dl> + +</div> +</div> +<a id="a232d0290c459dc790d989fcdc4d121bf" name="a232d0290c459dc790d989fcdc4d121bf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a232d0290c459dc790d989fcdc4d121bf">&#9670;&#160;</a></span>neorv32_cpu_set_mcycle()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_set_mcycle </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>value</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set machine cycle counter mcycle[h].</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>New value for mcycle[h] CSR (64-bit). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a5c3cf52498abb3cf3c14a724b287ecf0" name="a5c3cf52498abb3cf3c14a724b287ecf0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5c3cf52498abb3cf3c14a724b287ecf0">&#9670;&#160;</a></span>neorv32_cpu_set_minstret()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_set_minstret </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>value</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set machine retired instructions counter minstret[h].</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>New value for mcycle[h] CSR (64-bit). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a769ca4556213619f6fea4ff6bfb979dd" name="a769ca4556213619f6fea4ff6bfb979dd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a769ca4556213619f6fea4ff6bfb979dd">&#9670;&#160;</a></span>neorv32_cpu_sleep()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_sleep </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Put CPU into sleep / power-down mode.</p> +<dl class="section note"><dt>Note</dt><dd>The WFI (wait for interrupt) instruction will make the CPU halt until any enabled interrupt source becomes pending. </dd></dl> + +</div> +</div> +<a id="aeec8ad2a82885c40a307346f9003483e" name="aeec8ad2a82885c40a307346f9003483e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aeec8ad2a82885c40a307346f9003483e">&#9670;&#160;</a></span>neorv32_cpu_store_unsigned_byte()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_store_unsigned_byte </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Store unsigned byte to address space.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Address (32-bit). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data byte (8-bit) to store. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a31f30f6d6542758cd3073a9939b07653" name="a31f30f6d6542758cd3073a9939b07653"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a31f30f6d6542758cd3073a9939b07653">&#9670;&#160;</a></span>neorv32_cpu_store_unsigned_half()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_store_unsigned_half </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint16_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Store unsigned half-word to address space.</p> +<dl class="section note"><dt>Note</dt><dd>An unaligned access address will raise an alignment exception.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Address (32-bit). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data half-word (16-bit) to store. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a173bb06b4ae9c8964469068dafcb7b0e" name="a173bb06b4ae9c8964469068dafcb7b0e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a173bb06b4ae9c8964469068dafcb7b0e">&#9670;&#160;</a></span>neorv32_cpu_store_unsigned_word()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_cpu_store_unsigned_word </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Store unsigned word to address space.</p> +<dl class="section note"><dt>Note</dt><dd>An unaligned access address will raise an alignment exception.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Address (32-bit). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word (32-bit) to store. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cpu_8h_source.html b/sw/neorv32__cpu_8h_source.html new file mode 100644 index 0000000000..45a926c62a --- /dev/null +++ b/sw/neorv32__cpu_8h_source.html @@ -0,0 +1,299 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_cpu.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__cpu_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef neorv32_cpu_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define neorv32_cpu_h</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span>uint64_t <a class="code hl_function" href="neorv32__cpu_8h.html#ac3fd7dc7cd1e0a08225c41820af27f92">neorv32_cpu_get_cycle</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__cpu_8h.html#a232d0290c459dc790d989fcdc4d121bf">neorv32_cpu_set_mcycle</a>(uint64_t value);</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span>uint64_t <a class="code hl_function" href="neorv32__cpu_8h.html#a387aa304770b05594c4acca128a60a75">neorv32_cpu_get_instret</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__cpu_8h.html#a5c3cf52498abb3cf3c14a724b287ecf0">neorv32_cpu_set_minstret</a>(uint64_t value);</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__cpu_8h.html#aa9027535b13d9f9325e734997fc4a137">neorv32_cpu_delay_ms</a>(uint32_t time_ms);</div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span>uint32_t <a class="code hl_function" href="neorv32__cpu_8h.html#a8346fb926f84f3d7bccbb4741105505f">neorv32_cpu_get_clk_from_prsc</a>(<span class="keywordtype">int</span> prsc);</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>uint32_t <a class="code hl_function" href="neorv32__cpu_8h.html#a27dd614bc270dfa30ed73323ebda2d2d">neorv32_cpu_pmp_get_num_regions</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>uint32_t <a class="code hl_function" href="neorv32__cpu_8h.html#ad4f8160f4821b6691e9682ef60c7cd7b">neorv32_cpu_pmp_get_granularity</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__cpu_8h.html#aa458a700619b2f7666cfcffe02ec2e2c">neorv32_cpu_pmp_configure_region</a>(<span class="keywordtype">int</span> index, uint32_t addr, uint8_t config);</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span>uint32_t <a class="code hl_function" href="neorv32__cpu_8h.html#a70f49b80322aa457f29f7671f94a183d">neorv32_cpu_hpm_get_num_counters</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>uint32_t <a class="code hl_function" href="neorv32__cpu_8h.html#adb3ae542bbb0ddf9f562a4e42bc24d10">neorv32_cpu_hpm_get_size</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__cpu_8h.html#aca49efb45d3808ad76cf65ba291f546d">neorv32_cpu_goto_user_mode</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00049" data-start="{" data-end="}"> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__cpu_8h.html#a173bb06b4ae9c8964469068dafcb7b0e"> 49</a></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu_8h.html#a173bb06b4ae9c8964469068dafcb7b0e">neorv32_cpu_store_unsigned_word</a>(uint32_t addr, uint32_t wdata) {</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> uint32_t reg_addr = addr;</div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> uint32_t reg_data = wdata;</div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;sw %[da], 0(%[ad])&quot;</span> : : [da] <span class="stringliteral">&quot;r&quot;</span> (reg_data), [ad] <span class="stringliteral">&quot;r&quot;</span> (reg_addr));</div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>}</div> +</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00065" data-start="{" data-end="}"> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="neorv32__cpu_8h.html#a31f30f6d6542758cd3073a9939b07653"> 65</a></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu_8h.html#a31f30f6d6542758cd3073a9939b07653">neorv32_cpu_store_unsigned_half</a>(uint32_t addr, uint16_t wdata) {</div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> uint32_t reg_addr = addr;</div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> uint32_t reg_data = (uint32_t)wdata;</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;sh %[da], 0(%[ad])&quot;</span> : : [da] <span class="stringliteral">&quot;r&quot;</span> (reg_data), [ad] <span class="stringliteral">&quot;r&quot;</span> (reg_addr));</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>}</div> +</div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00079" data-start="{" data-end="}"> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="neorv32__cpu_8h.html#aeec8ad2a82885c40a307346f9003483e"> 79</a></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu_8h.html#aeec8ad2a82885c40a307346f9003483e">neorv32_cpu_store_unsigned_byte</a>(uint32_t addr, uint8_t wdata) {</div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> uint32_t reg_addr = addr;</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> uint32_t reg_data = (uint32_t)wdata;</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;sb %[da], 0(%[ad])&quot;</span> : : [da] <span class="stringliteral">&quot;r&quot;</span> (reg_data), [ad] <span class="stringliteral">&quot;r&quot;</span> (reg_addr));</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span>}</div> +</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00095" data-start="{" data-end="}"> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"><a class="line" href="neorv32__cpu_8h.html#a3b6cf445e2136486564ef3d3473c91dd"> 95</a></span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu_8h.html#a3b6cf445e2136486564ef3d3473c91dd">neorv32_cpu_load_unsigned_word</a>(uint32_t addr) {</div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> uint32_t reg_addr = addr;</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> uint32_t reg_data;</div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;lw %[da], 0(%[ad])&quot;</span> : [da] <span class="stringliteral">&quot;=r&quot;</span> (reg_data) : [ad] <span class="stringliteral">&quot;r&quot;</span> (reg_addr));</div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> reg_data;</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span>}</div> +</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> </div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00112" data-start="{" data-end="}"> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"><a class="line" href="neorv32__cpu_8h.html#a32544cd652debb4affb308806a115d5b"> 112</a></span><span class="keyword">inline</span> uint16_t __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu_8h.html#a32544cd652debb4affb308806a115d5b">neorv32_cpu_load_unsigned_half</a>(uint32_t addr) {</div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> uint32_t reg_addr = addr;</div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> uint16_t reg_data;</div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;lhu %[da], 0(%[ad])&quot;</span> : [da] <span class="stringliteral">&quot;=r&quot;</span> (reg_data) : [ad] <span class="stringliteral">&quot;r&quot;</span> (reg_addr));</div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> reg_data;</div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>}</div> +</div> +<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00129" data-start="{" data-end="}"> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"><a class="line" href="neorv32__cpu_8h.html#ae9c8b6c681536ddea3aff0e63f30ef70"> 129</a></span><span class="keyword">inline</span> int16_t __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu_8h.html#ae9c8b6c681536ddea3aff0e63f30ef70">neorv32_cpu_load_signed_half</a>(uint32_t addr) {</div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> uint32_t reg_addr = addr;</div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> int16_t reg_data;</div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;lh %[da], 0(%[ad])&quot;</span> : [da] <span class="stringliteral">&quot;=r&quot;</span> (reg_data) : [ad] <span class="stringliteral">&quot;r&quot;</span> (reg_addr));</div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">return</span> reg_data;</div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span>}</div> +</div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00144" data-start="{" data-end="}"> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"><a class="line" href="neorv32__cpu_8h.html#ac54ec9b59e17c7cd9b9907abee82ce95"> 144</a></span><span class="keyword">inline</span> uint8_t __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu_8h.html#ac54ec9b59e17c7cd9b9907abee82ce95">neorv32_cpu_load_unsigned_byte</a>(uint32_t addr) {</div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> uint32_t reg_addr = addr;</div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> uint8_t reg_data;</div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;lbu %[da], 0(%[ad])&quot;</span> : [da] <span class="stringliteral">&quot;=r&quot;</span> (reg_data) : [ad] <span class="stringliteral">&quot;r&quot;</span> (reg_addr));</div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">return</span> reg_data;</div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span>}</div> +</div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00159" data-start="{" data-end="}"> +<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"><a class="line" href="neorv32__cpu_8h.html#a31f903596ab1bcddea79fdf608eaa666"> 159</a></span><span class="keyword">inline</span> int8_t __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu_8h.html#a31f903596ab1bcddea79fdf608eaa666">neorv32_cpu_load_signed_byte</a>(uint32_t addr) {</div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> uint32_t reg_addr = addr;</div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> int8_t reg_data;</div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;lb %[da], 0(%[ad])&quot;</span> : [da] <span class="stringliteral">&quot;=r&quot;</span> (reg_data) : [ad] <span class="stringliteral">&quot;r&quot;</span> (reg_addr));</div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">return</span> reg_data;</div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span>}</div> +</div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div> +<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00174" data-start="{" data-end="}"> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"><a class="line" href="neorv32__cpu_8h.html#aab7a9f9cf608599f2b124dd499cb8418"> 174</a></span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu_8h.html#aab7a9f9cf608599f2b124dd499cb8418">neorv32_cpu_csr_read</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> csr_id) {</div> +<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div> +<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> uint32_t csr_data;</div> +<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;csrr %[result], %[input_i]&quot;</span> : [result] <span class="stringliteral">&quot;=r&quot;</span> (csr_data) : [input_i] <span class="stringliteral">&quot;i&quot;</span> (csr_id));</div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">return</span> csr_data;</div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span>}</div> +</div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00188" data-start="{" data-end="}"> +<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"><a class="line" href="neorv32__cpu_8h.html#afb5ef6e0b1a3e26570edfd8379490455"> 188</a></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu_8h.html#afb5ef6e0b1a3e26570edfd8379490455">neorv32_cpu_csr_write</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> csr_id, uint32_t data) {</div> +<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> </div> +<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> uint32_t csr_data = data;</div> +<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;csrw %[input_i], %[input_j]&quot;</span> : : [input_i] <span class="stringliteral">&quot;i&quot;</span> (csr_id), [input_j] <span class="stringliteral">&quot;r&quot;</span> (csr_data));</div> +<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span>}</div> +</div> +<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00201" data-start="{" data-end="}"> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"><a class="line" href="neorv32__cpu_8h.html#a25a09de97229aac839ef6f74da604acf"> 201</a></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu_8h.html#a25a09de97229aac839ef6f74da604acf">neorv32_cpu_csr_set</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> csr_id, uint32_t mask) {</div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> </div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> uint32_t csr_data = mask;</div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;csrs %[input_i], %[input_j]&quot;</span> : : [input_i] <span class="stringliteral">&quot;i&quot;</span> (csr_id), [input_j] <span class="stringliteral">&quot;r&quot;</span> (csr_data));</div> +<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span>}</div> +</div> +<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> </div> +<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div> +<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00214" data-start="{" data-end="}"> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"><a class="line" href="neorv32__cpu_8h.html#ab8f533ddbc3a3af5e3bca2287ac10122"> 214</a></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu_8h.html#ab8f533ddbc3a3af5e3bca2287ac10122">neorv32_cpu_csr_clr</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> csr_id, uint32_t mask) {</div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> uint32_t csr_data = mask;</div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;csrc %[input_i], %[input_j]&quot;</span> : : [input_i] <span class="stringliteral">&quot;i&quot;</span> (csr_id), [input_j] <span class="stringliteral">&quot;r&quot;</span> (csr_data));</div> +<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span>}</div> +</div> +<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div> +<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div> +<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00227" data-start="{" data-end="}"> +<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"><a class="line" href="neorv32__cpu_8h.html#a769ca4556213619f6fea4ff6bfb979dd"> 227</a></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu_8h.html#a769ca4556213619f6fea4ff6bfb979dd">neorv32_cpu_sleep</a>(<span class="keywordtype">void</span>) {</div> +<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div> +<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;wfi&quot;</span>);</div> +<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span>}</div> +</div> +<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div> +<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> </div> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_cpu_h</span></div> +<div class="ttc" id="aneorv32__cpu_8h_html_a173bb06b4ae9c8964469068dafcb7b0e"><div class="ttname"><a href="neorv32__cpu_8h.html#a173bb06b4ae9c8964469068dafcb7b0e">neorv32_cpu_store_unsigned_word</a></div><div class="ttdeci">void neorv32_cpu_store_unsigned_word(uint32_t addr, uint32_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:49</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_a232d0290c459dc790d989fcdc4d121bf"><div class="ttname"><a href="neorv32__cpu_8h.html#a232d0290c459dc790d989fcdc4d121bf">neorv32_cpu_set_mcycle</a></div><div class="ttdeci">void neorv32_cpu_set_mcycle(uint64_t value)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.c:72</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_a25a09de97229aac839ef6f74da604acf"><div class="ttname"><a href="neorv32__cpu_8h.html#a25a09de97229aac839ef6f74da604acf">neorv32_cpu_csr_set</a></div><div class="ttdeci">void neorv32_cpu_csr_set(const int csr_id, uint32_t mask)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:201</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_a27dd614bc270dfa30ed73323ebda2d2d"><div class="ttname"><a href="neorv32__cpu_8h.html#a27dd614bc270dfa30ed73323ebda2d2d">neorv32_cpu_pmp_get_num_regions</a></div><div class="ttdeci">uint32_t neorv32_cpu_pmp_get_num_regions(void)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.c:221</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_a31f30f6d6542758cd3073a9939b07653"><div class="ttname"><a href="neorv32__cpu_8h.html#a31f30f6d6542758cd3073a9939b07653">neorv32_cpu_store_unsigned_half</a></div><div class="ttdeci">void neorv32_cpu_store_unsigned_half(uint32_t addr, uint16_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:65</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_a31f903596ab1bcddea79fdf608eaa666"><div class="ttname"><a href="neorv32__cpu_8h.html#a31f903596ab1bcddea79fdf608eaa666">neorv32_cpu_load_signed_byte</a></div><div class="ttdeci">int8_t neorv32_cpu_load_signed_byte(uint32_t addr)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:159</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_a32544cd652debb4affb308806a115d5b"><div class="ttname"><a href="neorv32__cpu_8h.html#a32544cd652debb4affb308806a115d5b">neorv32_cpu_load_unsigned_half</a></div><div class="ttdeci">uint16_t neorv32_cpu_load_unsigned_half(uint32_t addr)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:112</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_a387aa304770b05594c4acca128a60a75"><div class="ttname"><a href="neorv32__cpu_8h.html#a387aa304770b05594c4acca128a60a75">neorv32_cpu_get_instret</a></div><div class="ttdeci">uint64_t neorv32_cpu_get_instret(void)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.c:90</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_a3b6cf445e2136486564ef3d3473c91dd"><div class="ttname"><a href="neorv32__cpu_8h.html#a3b6cf445e2136486564ef3d3473c91dd">neorv32_cpu_load_unsigned_word</a></div><div class="ttdeci">uint32_t neorv32_cpu_load_unsigned_word(uint32_t addr)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:95</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_a5c3cf52498abb3cf3c14a724b287ecf0"><div class="ttname"><a href="neorv32__cpu_8h.html#a5c3cf52498abb3cf3c14a724b287ecf0">neorv32_cpu_set_minstret</a></div><div class="ttdeci">void neorv32_cpu_set_minstret(uint64_t value)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.c:116</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_a70f49b80322aa457f29f7671f94a183d"><div class="ttname"><a href="neorv32__cpu_8h.html#a70f49b80322aa457f29f7671f94a183d">neorv32_cpu_hpm_get_num_counters</a></div><div class="ttdeci">uint32_t neorv32_cpu_hpm_get_num_counters(void)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.c:374</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_a769ca4556213619f6fea4ff6bfb979dd"><div class="ttname"><a href="neorv32__cpu_8h.html#a769ca4556213619f6fea4ff6bfb979dd">neorv32_cpu_sleep</a></div><div class="ttdeci">void neorv32_cpu_sleep(void)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:227</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_a8346fb926f84f3d7bccbb4741105505f"><div class="ttname"><a href="neorv32__cpu_8h.html#a8346fb926f84f3d7bccbb4741105505f">neorv32_cpu_get_clk_from_prsc</a></div><div class="ttdeci">uint32_t neorv32_cpu_get_clk_from_prsc(int prsc)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.c:188</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_aa458a700619b2f7666cfcffe02ec2e2c"><div class="ttname"><a href="neorv32__cpu_8h.html#aa458a700619b2f7666cfcffe02ec2e2c">neorv32_cpu_pmp_configure_region</a></div><div class="ttdeci">int neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.c:308</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_aa9027535b13d9f9325e734997fc4a137"><div class="ttname"><a href="neorv32__cpu_8h.html#aa9027535b13d9f9325e734997fc4a137">neorv32_cpu_delay_ms</a></div><div class="ttdeci">void neorv32_cpu_delay_ms(uint32_t time_ms)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.c:138</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_aab7a9f9cf608599f2b124dd499cb8418"><div class="ttname"><a href="neorv32__cpu_8h.html#aab7a9f9cf608599f2b124dd499cb8418">neorv32_cpu_csr_read</a></div><div class="ttdeci">uint32_t neorv32_cpu_csr_read(const int csr_id)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:174</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_ab8f533ddbc3a3af5e3bca2287ac10122"><div class="ttname"><a href="neorv32__cpu_8h.html#ab8f533ddbc3a3af5e3bca2287ac10122">neorv32_cpu_csr_clr</a></div><div class="ttdeci">void neorv32_cpu_csr_clr(const int csr_id, uint32_t mask)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:214</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_ac3fd7dc7cd1e0a08225c41820af27f92"><div class="ttname"><a href="neorv32__cpu_8h.html#ac3fd7dc7cd1e0a08225c41820af27f92">neorv32_cpu_get_cycle</a></div><div class="ttdeci">uint64_t neorv32_cpu_get_cycle(void)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.c:46</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_ac54ec9b59e17c7cd9b9907abee82ce95"><div class="ttname"><a href="neorv32__cpu_8h.html#ac54ec9b59e17c7cd9b9907abee82ce95">neorv32_cpu_load_unsigned_byte</a></div><div class="ttdeci">uint8_t neorv32_cpu_load_unsigned_byte(uint32_t addr)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:144</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_aca49efb45d3808ad76cf65ba291f546d"><div class="ttname"><a href="neorv32__cpu_8h.html#aca49efb45d3808ad76cf65ba291f546d">neorv32_cpu_goto_user_mode</a></div><div class="ttdeci">void neorv32_cpu_goto_user_mode(void)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.c:447</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_ad4f8160f4821b6691e9682ef60c7cd7b"><div class="ttname"><a href="neorv32__cpu_8h.html#ad4f8160f4821b6691e9682ef60c7cd7b">neorv32_cpu_pmp_get_granularity</a></div><div class="ttdeci">uint32_t neorv32_cpu_pmp_get_granularity(void)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.c:266</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_adb3ae542bbb0ddf9f562a4e42bc24d10"><div class="ttname"><a href="neorv32__cpu_8h.html#adb3ae542bbb0ddf9f562a4e42bc24d10">neorv32_cpu_hpm_get_size</a></div><div class="ttdeci">uint32_t neorv32_cpu_hpm_get_size(void)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.c:409</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_ae9c8b6c681536ddea3aff0e63f30ef70"><div class="ttname"><a href="neorv32__cpu_8h.html#ae9c8b6c681536ddea3aff0e63f30ef70">neorv32_cpu_load_signed_half</a></div><div class="ttdeci">int16_t neorv32_cpu_load_signed_half(uint32_t addr)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:129</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_aeec8ad2a82885c40a307346f9003483e"><div class="ttname"><a href="neorv32__cpu_8h.html#aeec8ad2a82885c40a307346f9003483e">neorv32_cpu_store_unsigned_byte</a></div><div class="ttdeci">void neorv32_cpu_store_unsigned_byte(uint32_t addr, uint8_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:79</div></div> +<div class="ttc" id="aneorv32__cpu_8h_html_afb5ef6e0b1a3e26570edfd8379490455"><div class="ttname"><a href="neorv32__cpu_8h.html#afb5ef6e0b1a3e26570edfd8379490455">neorv32_cpu_csr_write</a></div><div class="ttdeci">void neorv32_cpu_csr_write(const int csr_id, uint32_t data)</div><div class="ttdef"><b>Definition</b> neorv32_cpu.h:188</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cpu__amo_8c.html b/sw/neorv32__cpu__amo_8c.html new file mode 100644 index 0000000000..714614c8f1 --- /dev/null +++ b/sw/neorv32__cpu__amo_8c.html @@ -0,0 +1,414 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_cpu_amo.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_cpu_amo.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:aad0d96e61bacc3af13ff471dd44ca8e9" id="r_aad0d96e61bacc3af13ff471dd44ca8e9"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aad0d96e61bacc3af13ff471dd44ca8e9">neorv32_cpu_amoswapw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:aad0d96e61bacc3af13ff471dd44ca8e9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ada27ec89b2530f7b7f14de947cc82bf9" id="r_ada27ec89b2530f7b7f14de947cc82bf9"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ada27ec89b2530f7b7f14de947cc82bf9">neorv32_cpu_amoaddw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:ada27ec89b2530f7b7f14de947cc82bf9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9b4540dadbfd5da907117570d8006e36" id="r_a9b4540dadbfd5da907117570d8006e36"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9b4540dadbfd5da907117570d8006e36">neorv32_cpu_amoandw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:a9b4540dadbfd5da907117570d8006e36"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adc80b1f2b3a4e70fee44c0edb08fc402" id="r_adc80b1f2b3a4e70fee44c0edb08fc402"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adc80b1f2b3a4e70fee44c0edb08fc402">neorv32_cpu_amoorw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:adc80b1f2b3a4e70fee44c0edb08fc402"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a65b67f48356fa9b30596485473311377" id="r_a65b67f48356fa9b30596485473311377"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a65b67f48356fa9b30596485473311377">neorv32_cpu_amoxorw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:a65b67f48356fa9b30596485473311377"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a62cf36637d7a04079228acecfe8a5cf3" id="r_a62cf36637d7a04079228acecfe8a5cf3"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a62cf36637d7a04079228acecfe8a5cf3">neorv32_cpu_amomaxw</a> (uint32_t addr, int32_t wdata)</td></tr> +<tr class="separator:a62cf36637d7a04079228acecfe8a5cf3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a31a6a3b5a33655f4a7b27d4c85b75f07" id="r_a31a6a3b5a33655f4a7b27d4c85b75f07"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a31a6a3b5a33655f4a7b27d4c85b75f07">neorv32_cpu_amomaxuw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:a31a6a3b5a33655f4a7b27d4c85b75f07"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8e383fb8825538b5579d5ce075830697" id="r_a8e383fb8825538b5579d5ce075830697"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8e383fb8825538b5579d5ce075830697">neorv32_cpu_amominw</a> (uint32_t addr, int32_t wdata)</td></tr> +<tr class="separator:a8e383fb8825538b5579d5ce075830697"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1281e18b95cd525073e1123c5d04e9e2" id="r_a1281e18b95cd525073e1123c5d04e9e2"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1281e18b95cd525073e1123c5d04e9e2">neorv32_cpu_amominuw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:a1281e18b95cd525073e1123c5d04e9e2"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - source file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="ada27ec89b2530f7b7f14de947cc82bf9" name="ada27ec89b2530f7b7f14de947cc82bf9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ada27ec89b2530f7b7f14de947cc82bf9">&#9670;&#160;</a></span>neorv32_cpu_amoaddw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amoaddw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic ADD (AMOADD.W). return &lt;= MEM[addr]; MEM[addr] &lt;= MEM[addr] + wdata</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically added to original data at address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (32-bit) </dd></dl> + +</div> +</div> +<a id="a9b4540dadbfd5da907117570d8006e36" name="a9b4540dadbfd5da907117570d8006e36"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9b4540dadbfd5da907117570d8006e36">&#9670;&#160;</a></span>neorv32_cpu_amoandw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amoandw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic AND (AMOAND.W). return &lt;= MEM[addr]; MEM[addr] &lt;= MEM[addr] and wdata</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically AND-ed with original data at address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (32-bit) </dd></dl> + +</div> +</div> +<a id="a31a6a3b5a33655f4a7b27d4c85b75f07" name="a31a6a3b5a33655f4a7b27d4c85b75f07"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a31a6a3b5a33655f4a7b27d4c85b75f07">&#9670;&#160;</a></span>neorv32_cpu_amomaxuw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amomaxuw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic unsigned MAX (AMOMAXU.W). return &lt;= MEM[addr]; MEM[addr] &lt;= maximum_unsigned(MEM[addr], wdata)</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically MAX-ed with original data at address (unsigned 32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (unsigned 32-bit) </dd></dl> + +</div> +</div> +<a id="a62cf36637d7a04079228acecfe8a5cf3" name="a62cf36637d7a04079228acecfe8a5cf3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a62cf36637d7a04079228acecfe8a5cf3">&#9670;&#160;</a></span>neorv32_cpu_amomaxw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int32_t neorv32_cpu_amomaxw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic signed MAX (AMOMAX.W). return &lt;= MEM[addr]; MEM[addr] &lt;= maximum_signed(MEM[addr], wdata)</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically MAX-ed with original data at address (signed 32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (signed 32-bit) </dd></dl> + +</div> +</div> +<a id="a1281e18b95cd525073e1123c5d04e9e2" name="a1281e18b95cd525073e1123c5d04e9e2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1281e18b95cd525073e1123c5d04e9e2">&#9670;&#160;</a></span>neorv32_cpu_amominuw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amominuw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic unsigned MIN (AMOMINU.W). return &lt;= MEM[addr]; MEM[addr] &lt;= minimum_unsigned(MEM[addr], wdata)</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically MIN-ed with original data at address (unsigned 32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (unsigned 32-bit) </dd></dl> + +</div> +</div> +<a id="a8e383fb8825538b5579d5ce075830697" name="a8e383fb8825538b5579d5ce075830697"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8e383fb8825538b5579d5ce075830697">&#9670;&#160;</a></span>neorv32_cpu_amominw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int32_t neorv32_cpu_amominw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic signed MIN (AMOMIN.W). return &lt;= MEM[addr]; MEM[addr] &lt;= minimum_signed(MEM[addr], wdata)</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically MIN-ed with original data at address (signed 32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (signed 32-bit) </dd></dl> + +</div> +</div> +<a id="adc80b1f2b3a4e70fee44c0edb08fc402" name="adc80b1f2b3a4e70fee44c0edb08fc402"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adc80b1f2b3a4e70fee44c0edb08fc402">&#9670;&#160;</a></span>neorv32_cpu_amoorw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amoorw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic OR (AMOOR.W). return &lt;= MEM[addr]; MEM[addr] &lt;= MEM[addr] or wdata</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically OR-ed with original data at address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (32-bit) </dd></dl> + +</div> +</div> +<a id="aad0d96e61bacc3af13ff471dd44ca8e9" name="aad0d96e61bacc3af13ff471dd44ca8e9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aad0d96e61bacc3af13ff471dd44ca8e9">&#9670;&#160;</a></span>neorv32_cpu_amoswapw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amoswapw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic SWAP (AMOSWAP.W). return &lt;= MEM[addr]; MEM[addr] &lt;= wdata</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically stored to address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (32-bit) </dd></dl> + +</div> +</div> +<a id="a65b67f48356fa9b30596485473311377" name="a65b67f48356fa9b30596485473311377"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a65b67f48356fa9b30596485473311377">&#9670;&#160;</a></span>neorv32_cpu_amoxorw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amoxorw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic XOR (AMOXOR.W). return &lt;= MEM[addr]; MEM[addr] &lt;= MEM[addr] xor wdata</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically XOR-ed with original data at address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (32-bit) </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cpu__amo_8h.html b/sw/neorv32__cpu__amo_8h.html new file mode 100644 index 0000000000..9c82f65ebd --- /dev/null +++ b/sw/neorv32__cpu__amo_8h.html @@ -0,0 +1,496 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu_amo.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_cpu_amo.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__cpu__amo_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ad4437bbc61a4e40d7d01dfe9459f6639" id="r_ad4437bbc61a4e40d7d01dfe9459f6639"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4437bbc61a4e40d7d01dfe9459f6639">neorv32_cpu_amolr</a> (uint32_t addr)</td></tr> +<tr class="separator:ad4437bbc61a4e40d7d01dfe9459f6639"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5e73eaa273c41a06972e862976fda53c" id="r_a5e73eaa273c41a06972e862976fda53c"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5e73eaa273c41a06972e862976fda53c">neorv32_cpu_amosc</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:a5e73eaa273c41a06972e862976fda53c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:aad0d96e61bacc3af13ff471dd44ca8e9" id="r_aad0d96e61bacc3af13ff471dd44ca8e9"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aad0d96e61bacc3af13ff471dd44ca8e9">neorv32_cpu_amoswapw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:aad0d96e61bacc3af13ff471dd44ca8e9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ada27ec89b2530f7b7f14de947cc82bf9" id="r_ada27ec89b2530f7b7f14de947cc82bf9"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ada27ec89b2530f7b7f14de947cc82bf9">neorv32_cpu_amoaddw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:ada27ec89b2530f7b7f14de947cc82bf9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9b4540dadbfd5da907117570d8006e36" id="r_a9b4540dadbfd5da907117570d8006e36"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9b4540dadbfd5da907117570d8006e36">neorv32_cpu_amoandw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:a9b4540dadbfd5da907117570d8006e36"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adc80b1f2b3a4e70fee44c0edb08fc402" id="r_adc80b1f2b3a4e70fee44c0edb08fc402"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adc80b1f2b3a4e70fee44c0edb08fc402">neorv32_cpu_amoorw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:adc80b1f2b3a4e70fee44c0edb08fc402"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a65b67f48356fa9b30596485473311377" id="r_a65b67f48356fa9b30596485473311377"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a65b67f48356fa9b30596485473311377">neorv32_cpu_amoxorw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:a65b67f48356fa9b30596485473311377"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a62cf36637d7a04079228acecfe8a5cf3" id="r_a62cf36637d7a04079228acecfe8a5cf3"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a62cf36637d7a04079228acecfe8a5cf3">neorv32_cpu_amomaxw</a> (uint32_t addr, int32_t wdata)</td></tr> +<tr class="separator:a62cf36637d7a04079228acecfe8a5cf3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a31a6a3b5a33655f4a7b27d4c85b75f07" id="r_a31a6a3b5a33655f4a7b27d4c85b75f07"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a31a6a3b5a33655f4a7b27d4c85b75f07">neorv32_cpu_amomaxuw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:a31a6a3b5a33655f4a7b27d4c85b75f07"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8e383fb8825538b5579d5ce075830697" id="r_a8e383fb8825538b5579d5ce075830697"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8e383fb8825538b5579d5ce075830697">neorv32_cpu_amominw</a> (uint32_t addr, int32_t wdata)</td></tr> +<tr class="separator:a8e383fb8825538b5579d5ce075830697"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1281e18b95cd525073e1123c5d04e9e2" id="r_a1281e18b95cd525073e1123c5d04e9e2"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1281e18b95cd525073e1123c5d04e9e2">neorv32_cpu_amominuw</a> (uint32_t addr, uint32_t wdata)</td></tr> +<tr class="separator:a1281e18b95cd525073e1123c5d04e9e2"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - header file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="ada27ec89b2530f7b7f14de947cc82bf9" name="ada27ec89b2530f7b7f14de947cc82bf9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ada27ec89b2530f7b7f14de947cc82bf9">&#9670;&#160;</a></span>neorv32_cpu_amoaddw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amoaddw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic ADD (AMOADD.W). return &lt;= MEM[addr]; MEM[addr] &lt;= MEM[addr] + wdata</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically added to original data at address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (32-bit) </dd></dl> + +</div> +</div> +<a id="a9b4540dadbfd5da907117570d8006e36" name="a9b4540dadbfd5da907117570d8006e36"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9b4540dadbfd5da907117570d8006e36">&#9670;&#160;</a></span>neorv32_cpu_amoandw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amoandw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic AND (AMOAND.W). return &lt;= MEM[addr]; MEM[addr] &lt;= MEM[addr] and wdata</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically AND-ed with original data at address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (32-bit) </dd></dl> + +</div> +</div> +<a id="ad4437bbc61a4e40d7d01dfe9459f6639" name="ad4437bbc61a4e40d7d01dfe9459f6639"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4437bbc61a4e40d7d01dfe9459f6639">&#9670;&#160;</a></span>neorv32_cpu_amolr()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amolr </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Atomic memory access: load-reservate word.</p> +<dl class="section note"><dt>Note</dt><dd>The address has to be word-aligned - otherwise an alignment exception will be raised. </dd></dl> +<dl class="section warning"><dt>Warning</dt><dd>This function requires the A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Read data word (32-bit). </dd></dl> + +</div> +</div> +<a id="a31a6a3b5a33655f4a7b27d4c85b75f07" name="a31a6a3b5a33655f4a7b27d4c85b75f07"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a31a6a3b5a33655f4a7b27d4c85b75f07">&#9670;&#160;</a></span>neorv32_cpu_amomaxuw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amomaxuw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic unsigned MAX (AMOMAXU.W). return &lt;= MEM[addr]; MEM[addr] &lt;= maximum_unsigned(MEM[addr], wdata)</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically MAX-ed with original data at address (unsigned 32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (unsigned 32-bit) </dd></dl> + +</div> +</div> +<a id="a62cf36637d7a04079228acecfe8a5cf3" name="a62cf36637d7a04079228acecfe8a5cf3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a62cf36637d7a04079228acecfe8a5cf3">&#9670;&#160;</a></span>neorv32_cpu_amomaxw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int32_t neorv32_cpu_amomaxw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic signed MAX (AMOMAX.W). return &lt;= MEM[addr]; MEM[addr] &lt;= maximum_signed(MEM[addr], wdata)</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically MAX-ed with original data at address (signed 32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (signed 32-bit) </dd></dl> + +</div> +</div> +<a id="a1281e18b95cd525073e1123c5d04e9e2" name="a1281e18b95cd525073e1123c5d04e9e2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1281e18b95cd525073e1123c5d04e9e2">&#9670;&#160;</a></span>neorv32_cpu_amominuw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amominuw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic unsigned MIN (AMOMINU.W). return &lt;= MEM[addr]; MEM[addr] &lt;= minimum_unsigned(MEM[addr], wdata)</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically MIN-ed with original data at address (unsigned 32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (unsigned 32-bit) </dd></dl> + +</div> +</div> +<a id="a8e383fb8825538b5579d5ce075830697" name="a8e383fb8825538b5579d5ce075830697"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8e383fb8825538b5579d5ce075830697">&#9670;&#160;</a></span>neorv32_cpu_amominw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int32_t neorv32_cpu_amominw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic signed MIN (AMOMIN.W). return &lt;= MEM[addr]; MEM[addr] &lt;= minimum_signed(MEM[addr], wdata)</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically MIN-ed with original data at address (signed 32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (signed 32-bit) </dd></dl> + +</div> +</div> +<a id="adc80b1f2b3a4e70fee44c0edb08fc402" name="adc80b1f2b3a4e70fee44c0edb08fc402"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adc80b1f2b3a4e70fee44c0edb08fc402">&#9670;&#160;</a></span>neorv32_cpu_amoorw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amoorw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic OR (AMOOR.W). return &lt;= MEM[addr]; MEM[addr] &lt;= MEM[addr] or wdata</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically OR-ed with original data at address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (32-bit) </dd></dl> + +</div> +</div> +<a id="a5e73eaa273c41a06972e862976fda53c" name="a5e73eaa273c41a06972e862976fda53c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5e73eaa273c41a06972e862976fda53c">&#9670;&#160;</a></span>neorv32_cpu_amosc()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amosc </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Atomic memory access: store-conditional word.</p> +<dl class="section note"><dt>Note</dt><dd>The address has to be word-aligned - otherwise an alignment exception will be raised. </dd></dl> +<dl class="section warning"><dt>Warning</dt><dd>This function requires the A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>Address (32-bit). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to-be-written conditionally (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Status: 0 = ok, 1 = failed (32-bit). </dd></dl> + +</div> +</div> +<a id="aad0d96e61bacc3af13ff471dd44ca8e9" name="aad0d96e61bacc3af13ff471dd44ca8e9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aad0d96e61bacc3af13ff471dd44ca8e9">&#9670;&#160;</a></span>neorv32_cpu_amoswapw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amoswapw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic SWAP (AMOSWAP.W). return &lt;= MEM[addr]; MEM[addr] &lt;= wdata</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically stored to address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (32-bit) </dd></dl> + +</div> +</div> +<a id="a65b67f48356fa9b30596485473311377" name="a65b67f48356fa9b30596485473311377"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a65b67f48356fa9b30596485473311377">&#9670;&#160;</a></span>neorv32_cpu_amoxorw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cpu_amoxorw </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Atomic XOR (AMOXOR.W). return &lt;= MEM[addr]; MEM[addr] &lt;= MEM[addr] xor wdata</p> +<dl class="section note"><dt>Note</dt><dd>This function requires the CPU A ISA extension.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>32-bit memory address, word-aligned. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">wdata</td><td>Data word to be atomically XOR-ed with original data at address (32-bit). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Pre-operation data loaded from address (32-bit) </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cpu__amo_8h_source.html b/sw/neorv32__cpu__amo_8h_source.html new file mode 100644 index 0000000000..043a5ffa3d --- /dev/null +++ b/sw/neorv32__cpu__amo_8h_source.html @@ -0,0 +1,181 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu_amo.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_cpu_amo.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__cpu__amo_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef neorv32_cpu_amo_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define neorv32_cpu_amo_h</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00031" data-start="{" data-end="}"> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="neorv32__cpu__amo_8h.html#ad4437bbc61a4e40d7d01dfe9459f6639"> 31</a></span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu__amo_8h.html#ad4437bbc61a4e40d7d01dfe9459f6639">neorv32_cpu_amolr</a>(uint32_t addr) {</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#if defined __riscv_atomic</span></div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> uint32_t amo_addr = addr;</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> uint32_t amo_rdata;</div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;lr.w %[dst], 0(%[addr])&quot;</span> : [dst] <span class="stringliteral">&quot;=r&quot;</span> (amo_rdata) : [addr] <span class="stringliteral">&quot;r&quot;</span> (amo_addr));</div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">return</span> amo_rdata;</div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#else</span></div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> (void)addr;</div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span>}</div> +</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00058" data-start="{" data-end="}"> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="neorv32__cpu__amo_8h.html#a5e73eaa273c41a06972e862976fda53c"> 58</a></span><span class="keyword">inline</span> uint32_t __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__cpu__amo_8h.html#a5e73eaa273c41a06972e862976fda53c">neorv32_cpu_amosc</a>(uint32_t addr, uint32_t wdata) {</div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="preprocessor">#if defined __riscv_atomic</span></div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> uint32_t amo_addr = addr;</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> uint32_t amo_wdata = wdata;</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> uint32_t amo_status;</div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">&quot;sc.w %[dst], %[src], (%[addr])&quot;</span> : [dst] <span class="stringliteral">&quot;=r&quot;</span> (amo_status) : [src] <span class="stringliteral">&quot;r&quot;</span> (amo_wdata), [addr] <span class="stringliteral">&quot;r&quot;</span> (amo_addr));</div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">return</span> amo_status;</div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="preprocessor">#else</span></div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> (void)addr;</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> (void)wdata;</div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">return</span> 1; <span class="comment">// always fail</span></div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span>}</div> +</div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span>uint32_t <a class="code hl_function" href="neorv32__cpu__amo_8h.html#aad0d96e61bacc3af13ff471dd44ca8e9">neorv32_cpu_amoswapw</a>(uint32_t addr, uint32_t wdata);</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span>uint32_t <a class="code hl_function" href="neorv32__cpu__amo_8h.html#ada27ec89b2530f7b7f14de947cc82bf9">neorv32_cpu_amoaddw</a>(uint32_t addr, uint32_t wdata);</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span>uint32_t <a class="code hl_function" href="neorv32__cpu__amo_8h.html#a9b4540dadbfd5da907117570d8006e36">neorv32_cpu_amoandw</a>(uint32_t addr, uint32_t wdata);</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span>uint32_t <a class="code hl_function" href="neorv32__cpu__amo_8h.html#adc80b1f2b3a4e70fee44c0edb08fc402">neorv32_cpu_amoorw</a>(uint32_t addr, uint32_t wdata);</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span>uint32_t <a class="code hl_function" href="neorv32__cpu__amo_8h.html#a65b67f48356fa9b30596485473311377">neorv32_cpu_amoxorw</a>(uint32_t addr, uint32_t wdata);</div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span>int32_t <a class="code hl_function" href="neorv32__cpu__amo_8h.html#a62cf36637d7a04079228acecfe8a5cf3">neorv32_cpu_amomaxw</a>(uint32_t addr, int32_t wdata);</div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span>uint32_t <a class="code hl_function" href="neorv32__cpu__amo_8h.html#a31a6a3b5a33655f4a7b27d4c85b75f07">neorv32_cpu_amomaxuw</a>(uint32_t addr, uint32_t wdata);</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span>int32_t <a class="code hl_function" href="neorv32__cpu__amo_8h.html#a8e383fb8825538b5579d5ce075830697">neorv32_cpu_amominw</a>(uint32_t addr, int32_t wdata);</div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span>uint32_t <a class="code hl_function" href="neorv32__cpu__amo_8h.html#a1281e18b95cd525073e1123c5d04e9e2">neorv32_cpu_amominuw</a>(uint32_t addr, uint32_t wdata);</div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_cpu_amo_h</span></div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html_a1281e18b95cd525073e1123c5d04e9e2"><div class="ttname"><a href="neorv32__cpu__amo_8h.html#a1281e18b95cd525073e1123c5d04e9e2">neorv32_cpu_amominuw</a></div><div class="ttdeci">uint32_t neorv32_cpu_amominuw(uint32_t addr, uint32_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_amo.c:315</div></div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html_a31a6a3b5a33655f4a7b27d4c85b75f07"><div class="ttname"><a href="neorv32__cpu__amo_8h.html#a31a6a3b5a33655f4a7b27d4c85b75f07">neorv32_cpu_amomaxuw</a></div><div class="ttdeci">uint32_t neorv32_cpu_amomaxuw(uint32_t addr, uint32_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_amo.c:243</div></div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html_a5e73eaa273c41a06972e862976fda53c"><div class="ttname"><a href="neorv32__cpu__amo_8h.html#a5e73eaa273c41a06972e862976fda53c">neorv32_cpu_amosc</a></div><div class="ttdeci">uint32_t neorv32_cpu_amosc(uint32_t addr, uint32_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_amo.h:58</div></div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html_a62cf36637d7a04079228acecfe8a5cf3"><div class="ttname"><a href="neorv32__cpu__amo_8h.html#a62cf36637d7a04079228acecfe8a5cf3">neorv32_cpu_amomaxw</a></div><div class="ttdeci">int32_t neorv32_cpu_amomaxw(uint32_t addr, int32_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_amo.c:207</div></div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html_a65b67f48356fa9b30596485473311377"><div class="ttname"><a href="neorv32__cpu__amo_8h.html#a65b67f48356fa9b30596485473311377">neorv32_cpu_amoxorw</a></div><div class="ttdeci">uint32_t neorv32_cpu_amoxorw(uint32_t addr, uint32_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_amo.c:171</div></div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html_a8e383fb8825538b5579d5ce075830697"><div class="ttname"><a href="neorv32__cpu__amo_8h.html#a8e383fb8825538b5579d5ce075830697">neorv32_cpu_amominw</a></div><div class="ttdeci">int32_t neorv32_cpu_amominw(uint32_t addr, int32_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_amo.c:279</div></div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html_a9b4540dadbfd5da907117570d8006e36"><div class="ttname"><a href="neorv32__cpu__amo_8h.html#a9b4540dadbfd5da907117570d8006e36">neorv32_cpu_amoandw</a></div><div class="ttdeci">uint32_t neorv32_cpu_amoandw(uint32_t addr, uint32_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_amo.c:99</div></div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html_aad0d96e61bacc3af13ff471dd44ca8e9"><div class="ttname"><a href="neorv32__cpu__amo_8h.html#aad0d96e61bacc3af13ff471dd44ca8e9">neorv32_cpu_amoswapw</a></div><div class="ttdeci">uint32_t neorv32_cpu_amoswapw(uint32_t addr, uint32_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_amo.c:29</div></div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html_ad4437bbc61a4e40d7d01dfe9459f6639"><div class="ttname"><a href="neorv32__cpu__amo_8h.html#ad4437bbc61a4e40d7d01dfe9459f6639">neorv32_cpu_amolr</a></div><div class="ttdeci">uint32_t neorv32_cpu_amolr(uint32_t addr)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_amo.h:31</div></div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html_ada27ec89b2530f7b7f14de947cc82bf9"><div class="ttname"><a href="neorv32__cpu__amo_8h.html#ada27ec89b2530f7b7f14de947cc82bf9">neorv32_cpu_amoaddw</a></div><div class="ttdeci">uint32_t neorv32_cpu_amoaddw(uint32_t addr, uint32_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_amo.c:63</div></div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html_adc80b1f2b3a4e70fee44c0edb08fc402"><div class="ttname"><a href="neorv32__cpu__amo_8h.html#adc80b1f2b3a4e70fee44c0edb08fc402">neorv32_cpu_amoorw</a></div><div class="ttdeci">uint32_t neorv32_cpu_amoorw(uint32_t addr, uint32_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_amo.c:135</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cpu__cfu_8c.html b/sw/neorv32__cpu__cfu_8c.html new file mode 100644 index 0000000000..b3c9116070 --- /dev/null +++ b/sw/neorv32__cpu__cfu_8c.html @@ -0,0 +1,138 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_cpu_cfu.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_cpu_cfu.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>CPU Core custom functions unit HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a13019b8afa1a80c0e5c24eb4d72e75c1" id="r_a13019b8afa1a80c0e5c24eb4d72e75c1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a13019b8afa1a80c0e5c24eb4d72e75c1">neorv32_cpu_cfu_available</a> (void)</td></tr> +<tr class="separator:a13019b8afa1a80c0e5c24eb4d72e75c1"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>CPU Core custom functions unit HW driver source file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a13019b8afa1a80c0e5c24eb4d72e75c1" name="a13019b8afa1a80c0e5c24eb4d72e75c1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a13019b8afa1a80c0e5c24eb4d72e75c1">&#9670;&#160;</a></span>neorv32_cpu_cfu_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_cpu_cfu_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if custom functions unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if CFU was not synthesized, 1 if CFU is available. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cpu__cfu_8h.html b/sw/neorv32__cpu__cfu_8h.html new file mode 100644 index 0000000000..12e5a15148 --- /dev/null +++ b/sw/neorv32__cpu__cfu_8h.html @@ -0,0 +1,216 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu_cfu.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_cpu_cfu.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>CPU Core custom functions unit HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__cpu__cfu_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Low-level CFU custom instruction prototypes ("intrinsics").</div></td></tr> +<tr><td colspan="2"><div class="groupText"><p>Note that each instruction provides a uint32_t return value. </p> +</div></td></tr> +<tr class="memitem:a69d60ccd0cee950b08ce585c3f13b85c" id="r_a69d60ccd0cee950b08ce585c3f13b85c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a69d60ccd0cee950b08ce585c3f13b85c">neorv32_cfu_r3_instr</a>(funct7, funct3, rs1, rs2)</td></tr> +<tr class="separator:a69d60ccd0cee950b08ce585c3f13b85c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a046a640f7f4a7b1b99a824fb325e2079" id="r_a046a640f7f4a7b1b99a824fb325e2079"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a046a640f7f4a7b1b99a824fb325e2079">neorv32_cfu_r4_instr</a>(funct3, rs1, rs2, rs3)</td></tr> +<tr class="separator:a046a640f7f4a7b1b99a824fb325e2079"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:a13019b8afa1a80c0e5c24eb4d72e75c1" id="r_a13019b8afa1a80c0e5c24eb4d72e75c1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a13019b8afa1a80c0e5c24eb4d72e75c1">neorv32_cpu_cfu_available</a> (void)</td></tr> +<tr class="separator:a13019b8afa1a80c0e5c24eb4d72e75c1"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>CPU Core custom functions unit HW driver header file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a69d60ccd0cee950b08ce585c3f13b85c" name="a69d60ccd0cee950b08ce585c3f13b85c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a69d60ccd0cee950b08ce585c3f13b85c">&#9670;&#160;</a></span>neorv32_cfu_r3_instr</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_cfu_r3_instr</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>funct7</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>funct3</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs2</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line">CUSTOM_INSTR_R3_TYPE(funct7, rs2, rs1, funct3, 0b0001011)</div> +</div><!-- fragment --><p>R3-type CFU custom instruction (CUSTOM-0 opcode) </p> + +</div> +</div> +<a id="a046a640f7f4a7b1b99a824fb325e2079" name="a046a640f7f4a7b1b99a824fb325e2079"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a046a640f7f4a7b1b99a824fb325e2079">&#9670;&#160;</a></span>neorv32_cfu_r4_instr</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_cfu_r4_instr</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>funct3</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs2</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs3</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line">CUSTOM_INSTR_R4_TYPE(rs3, rs2, rs1, funct3, 0b0101011)</div> +</div><!-- fragment --><p>R4-type CFU custom instruction (CUSTOM-1 opcode) </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a13019b8afa1a80c0e5c24eb4d72e75c1" name="a13019b8afa1a80c0e5c24eb4d72e75c1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a13019b8afa1a80c0e5c24eb4d72e75c1">&#9670;&#160;</a></span>neorv32_cpu_cfu_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_cpu_cfu_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if custom functions unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if CFU was not synthesized, 1 if CFU is available. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cpu__cfu_8h_source.html b/sw/neorv32__cpu__cfu_8h_source.html new file mode 100644 index 0000000000..5314bba352 --- /dev/null +++ b/sw/neorv32__cpu__cfu_8h_source.html @@ -0,0 +1,126 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu_cfu.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_cpu_cfu.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__cpu__cfu_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef neorv32_cpu_cfu_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define neorv32_cpu_cfu_h</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__cpu__cfu_8h.html#a13019b8afa1a80c0e5c24eb4d72e75c1">neorv32_cpu_cfu_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c"> 34</a></span><span class="preprocessor">#define neorv32_cfu_r3_instr(funct7, funct3, rs1, rs2) CUSTOM_INSTR_R3_TYPE(funct7, rs2, rs1, funct3, 0b0001011)</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="neorv32__cpu__cfu_8h.html#a046a640f7f4a7b1b99a824fb325e2079"> 36</a></span><span class="preprocessor">#define neorv32_cfu_r4_instr(funct3, rs1, rs2, rs3) CUSTOM_INSTR_R4_TYPE(rs3, rs2, rs1, funct3, 0b0101011)</span></div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_cpu_cfu_h</span></div> +<div class="ttc" id="aneorv32__cpu__cfu_8h_html_a13019b8afa1a80c0e5c24eb4d72e75c1"><div class="ttname"><a href="neorv32__cpu__cfu_8h.html#a13019b8afa1a80c0e5c24eb4d72e75c1">neorv32_cpu_cfu_available</a></div><div class="ttdeci">int neorv32_cpu_cfu_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_cfu.c:24</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cpu__csr_8h.html b/sw/neorv32__cpu__csr_8h.html new file mode 100644 index 0000000000..4b9e81de7e --- /dev/null +++ b/sw/neorv32__cpu__csr_8h.html @@ -0,0 +1,1274 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu_csr.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#enum-members">Enumerations</a> </div> + <div class="headertitle"><div class="title">neorv32_cpu_csr.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Control and Status Registers (CSR) definitions. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__cpu__csr_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a> +Enumerations</h2></td></tr> +<tr class="memitem:ac065a8cc32eed9a69ea1798492a69f49" id="r_ac065a8cc32eed9a69ea1798492a69f49"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49">NEORV32_CSR_enum</a> { <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a">CSR_FFLAGS</a> = 0x001 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812">CSR_FRM</a> = 0x002 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6">CSR_FCSR</a> = 0x003 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450">CSR_MSTATUS</a> = 0x300 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c">CSR_MISA</a> = 0x301 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610">CSR_MIE</a> = 0x304 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21">CSR_MTVEC</a> = 0x305 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78">CSR_MCOUNTEREN</a> = 0x306 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067">CSR_MSTATUSH</a> = 0x310 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6">CSR_MCOUNTINHIBIT</a> = 0x320 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98">CSR_MENVCFG</a> = 0x30a +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8">CSR_MENVCFGH</a> = 0x31a +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6">CSR_MHPMEVENT3</a> = 0x323 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459">CSR_MHPMEVENT4</a> = 0x324 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d">CSR_MHPMEVENT5</a> = 0x325 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd">CSR_MHPMEVENT6</a> = 0x326 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59">CSR_MHPMEVENT7</a> = 0x327 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79">CSR_MHPMEVENT8</a> = 0x328 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632">CSR_MHPMEVENT9</a> = 0x329 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512">CSR_MHPMEVENT10</a> = 0x32a +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf">CSR_MHPMEVENT11</a> = 0x32b +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f">CSR_MHPMEVENT12</a> = 0x32c +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6">CSR_MHPMEVENT13</a> = 0x32d +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4">CSR_MHPMEVENT14</a> = 0x32e +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54">CSR_MHPMEVENT15</a> = 0x32f +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004">CSR_MSCRATCH</a> = 0x340 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153">CSR_MEPC</a> = 0x341 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b">CSR_MCAUSE</a> = 0x342 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e">CSR_MTVAL</a> = 0x343 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c">CSR_MIP</a> = 0x344 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8">CSR_MTINST</a> = 0x34a +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f">CSR_PMPCFG0</a> = 0x3a0 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16">CSR_PMPCFG1</a> = 0x3a1 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446">CSR_PMPCFG2</a> = 0x3a2 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850">CSR_PMPCFG3</a> = 0x3a3 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f">CSR_PMPADDR0</a> = 0x3b0 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41">CSR_PMPADDR1</a> = 0x3b1 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50">CSR_PMPADDR2</a> = 0x3b2 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9">CSR_PMPADDR3</a> = 0x3b3 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507">CSR_PMPADDR4</a> = 0x3b4 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c">CSR_PMPADDR5</a> = 0x3b5 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444">CSR_PMPADDR6</a> = 0x3b6 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346">CSR_PMPADDR7</a> = 0x3b7 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b">CSR_PMPADDR8</a> = 0x3b8 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77">CSR_PMPADDR9</a> = 0x3b9 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60">CSR_PMPADDR10</a> = 0x3ba +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383">CSR_PMPADDR11</a> = 0x3bb +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b">CSR_PMPADDR12</a> = 0x3bc +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc">CSR_PMPADDR13</a> = 0x3bd +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8">CSR_PMPADDR14</a> = 0x3be +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2">CSR_PMPADDR15</a> = 0x3bf +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d">CSR_TSELECT</a> = 0x7a0 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57">CSR_TDATA1</a> = 0x7a1 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc">CSR_TDATA2</a> = 0x7a2 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b">CSR_TINFO</a> = 0x7a4 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9">CSR_DCSR</a> = 0x7b0 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b">CSR_DPC</a> = 0x7b1 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7">CSR_DSCRATCH0</a> = 0x7b2 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f">CSR_CFUREG0</a> = 0x800 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8">CSR_CFUREG1</a> = 0x801 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68">CSR_CFUREG2</a> = 0x802 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf">CSR_CFUREG3</a> = 0x803 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77">CSR_MCYCLE</a> = 0xb00 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb">CSR_MINSTRET</a> = 0xb02 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc">CSR_MHPMCOUNTER3</a> = 0xb03 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9">CSR_MHPMCOUNTER4</a> = 0xb04 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394">CSR_MHPMCOUNTER5</a> = 0xb05 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d">CSR_MHPMCOUNTER6</a> = 0xb06 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444">CSR_MHPMCOUNTER7</a> = 0xb07 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79">CSR_MHPMCOUNTER8</a> = 0xb08 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb">CSR_MHPMCOUNTER9</a> = 0xb09 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f">CSR_MHPMCOUNTER10</a> = 0xb0a +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5">CSR_MHPMCOUNTER11</a> = 0xb0b +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e">CSR_MHPMCOUNTER12</a> = 0xb0c +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0">CSR_MHPMCOUNTER13</a> = 0xb0d +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229">CSR_MHPMCOUNTER14</a> = 0xb0e +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff">CSR_MHPMCOUNTER15</a> = 0xb0f +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b">CSR_MCYCLEH</a> = 0xb80 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988">CSR_MINSTRETH</a> = 0xb82 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25">CSR_MHPMCOUNTER3H</a> = 0xb83 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85">CSR_MHPMCOUNTER4H</a> = 0xb84 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599">CSR_MHPMCOUNTER5H</a> = 0xb85 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77">CSR_MHPMCOUNTER6H</a> = 0xb86 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a">CSR_MHPMCOUNTER7H</a> = 0xb87 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc">CSR_MHPMCOUNTER8H</a> = 0xb88 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8">CSR_MHPMCOUNTER9H</a> = 0xb89 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd">CSR_MHPMCOUNTER10H</a> = 0xb8a +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071">CSR_MHPMCOUNTER11H</a> = 0xb8b +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2">CSR_MHPMCOUNTER12H</a> = 0xb8c +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d">CSR_MHPMCOUNTER13H</a> = 0xb8d +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa">CSR_MHPMCOUNTER14H</a> = 0xb8e +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46">CSR_MHPMCOUNTER15H</a> = 0xb8f +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e">CSR_CYCLE</a> = 0xc00 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66">CSR_INSTRET</a> = 0xc02 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db">CSR_CYCLEH</a> = 0xc80 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153">CSR_INSTRETH</a> = 0xc82 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b">CSR_MVENDORID</a> = 0xf11 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4">CSR_MARCHID</a> = 0xf12 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd">CSR_MIMPID</a> = 0xf13 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790">CSR_MHARTID</a> = 0xf14 +, <br /> +&#160;&#160;<a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9">CSR_MCONFIGPTR</a> = 0xf15 +, <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2">CSR_MXISA</a> = 0xfc0 +<br /> + }</td></tr> +<tr class="separator:ac065a8cc32eed9a69ea1798492a69f49"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afde0761e3150d82511136f56179c204b" id="r_afde0761e3150d82511136f56179c204b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afde0761e3150d82511136f56179c204b">NEORV32_CSR_FFLAGS_enum</a> { <br /> +&#160;&#160;<a class="el" href="#afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6">CSR_FFLAGS_NX</a> = 0 +, <a class="el" href="#afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819">CSR_FFLAGS_UF</a> = 1 +, <a class="el" href="#afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e">CSR_FFLAGS_OF</a> = 2 +, <a class="el" href="#afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b">CSR_FFLAGS_DZ</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165">CSR_FFLAGS_NV</a> = 4 +<br /> + }</td></tr> +<tr class="separator:afde0761e3150d82511136f56179c204b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6d3c6aaee79b679e954c54563d7ee500" id="r_a6d3c6aaee79b679e954c54563d7ee500"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6d3c6aaee79b679e954c54563d7ee500">NEORV32_CSR_MCOUNTEREN_enum</a> { <a class="el" href="#a6d3c6aaee79b679e954c54563d7ee500a3d0c8ff6ba2c557cb5b5d353bdb95790">CSR_MCOUNTEREN_CY</a> = 0 +, <a class="el" href="#a6d3c6aaee79b679e954c54563d7ee500a97e36c94b71fa2f9a805bbe47b0bc1b5">CSR_MCOUNTEREN_IR</a> = 2 + }</td></tr> +<tr class="separator:a6d3c6aaee79b679e954c54563d7ee500"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a76b70a2334131e7589d84c1ee96de485" id="r_a76b70a2334131e7589d84c1ee96de485"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a76b70a2334131e7589d84c1ee96de485">NEORV32_CSR_MSTATUS_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56">CSR_MSTATUS_MIE</a> = 3 +, <a class="el" href="#a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34">CSR_MSTATUS_MPIE</a> = 7 +, <a class="el" href="#a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97">CSR_MSTATUS_MPP_L</a> = 11 +, <a class="el" href="#a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0">CSR_MSTATUS_MPP_H</a> = 12 +, <br /> +&#160;&#160;<a class="el" href="#a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44">CSR_MSTATUS_MPRV</a> = 17 +, <a class="el" href="#a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d">CSR_MSTATUS_TW</a> = 21 +<br /> + }</td></tr> +<tr class="separator:a76b70a2334131e7589d84c1ee96de485"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab6886ca6858d57854495986ef9b5cbfe" id="r_ab6886ca6858d57854495986ef9b5cbfe"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab6886ca6858d57854495986ef9b5cbfe">NEORV32_CSR_MCOUNTINHIBIT_enum</a> { <br /> +&#160;&#160;<a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3">CSR_MCOUNTINHIBIT_CY</a> = 0 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa">CSR_MCOUNTINHIBIT_IR</a> = 2 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752">CSR_MCOUNTINHIBIT_HPM3</a> = 3 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d">CSR_MCOUNTINHIBIT_HPM4</a> = 4 +, <br /> +&#160;&#160;<a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6">CSR_MCOUNTINHIBIT_HPM5</a> = 5 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db">CSR_MCOUNTINHIBIT_HPM6</a> = 6 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab">CSR_MCOUNTINHIBIT_HPM7</a> = 7 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a">CSR_MCOUNTINHIBIT_HPM8</a> = 8 +, <br /> +&#160;&#160;<a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a">CSR_MCOUNTINHIBIT_HPM9</a> = 9 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e">CSR_MCOUNTINHIBIT_HPM10</a> = 10 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806">CSR_MCOUNTINHIBIT_HPM11</a> = 11 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486">CSR_MCOUNTINHIBIT_HPM12</a> = 12 +, <br /> +&#160;&#160;<a class="el" href="#ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed">CSR_MCOUNTINHIBIT_HPM13</a> = 13 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987">CSR_MCOUNTINHIBIT_HPM14</a> = 14 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085">CSR_MCOUNTINHIBIT_HPM15</a> = 15 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4">CSR_MCOUNTINHIBIT_HPM16</a> = 16 +, <br /> +&#160;&#160;<a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3">CSR_MCOUNTINHIBIT_HPM17</a> = 17 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0">CSR_MCOUNTINHIBIT_HPM18</a> = 18 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc">CSR_MCOUNTINHIBIT_HPM19</a> = 19 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca">CSR_MCOUNTINHIBIT_HPM20</a> = 20 +, <br /> +&#160;&#160;<a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38">CSR_MCOUNTINHIBIT_HPM21</a> = 21 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e">CSR_MCOUNTINHIBIT_HPM22</a> = 22 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904">CSR_MCOUNTINHIBIT_HPM23</a> = 23 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1">CSR_MCOUNTINHIBIT_HPM24</a> = 24 +, <br /> +&#160;&#160;<a class="el" href="#ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46">CSR_MCOUNTINHIBIT_HPM25</a> = 25 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74">CSR_MCOUNTINHIBIT_HPM26</a> = 26 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db">CSR_MCOUNTINHIBIT_HPM27</a> = 27 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32">CSR_MCOUNTINHIBIT_HPM28</a> = 28 +, <br /> +&#160;&#160;<a class="el" href="#ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382">CSR_MCOUNTINHIBIT_HPM29</a> = 29 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7">CSR_MCOUNTINHIBIT_HPM30</a> = 30 +, <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05">CSR_MCOUNTINHIBIT_HPM31</a> = 31 +<br /> + }</td></tr> +<tr class="separator:ab6886ca6858d57854495986ef9b5cbfe"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0e9714690687badee43180c3cb62be33" id="r_a0e9714690687badee43180c3cb62be33"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a">CSR_MIE_MSIE</a> = 3 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083">CSR_MIE_MTIE</a> = 7 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324">CSR_MIE_MEIE</a> = 11 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d">CSR_MIE_FIRQ0E</a> = 16 +, <br /> +&#160;&#160;<a class="el" href="#a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb">CSR_MIE_FIRQ1E</a> = 17 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7">CSR_MIE_FIRQ2E</a> = 18 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db">CSR_MIE_FIRQ3E</a> = 19 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc">CSR_MIE_FIRQ4E</a> = 20 +, <br /> +&#160;&#160;<a class="el" href="#a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698">CSR_MIE_FIRQ5E</a> = 21 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a">CSR_MIE_FIRQ6E</a> = 22 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8">CSR_MIE_FIRQ7E</a> = 23 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e">CSR_MIE_FIRQ8E</a> = 24 +, <br /> +&#160;&#160;<a class="el" href="#a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19">CSR_MIE_FIRQ9E</a> = 25 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a">CSR_MIE_FIRQ10E</a> = 26 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd">CSR_MIE_FIRQ11E</a> = 27 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943">CSR_MIE_FIRQ12E</a> = 28 +, <br /> +&#160;&#160;<a class="el" href="#a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f">CSR_MIE_FIRQ13E</a> = 29 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b">CSR_MIE_FIRQ14E</a> = 30 +, <a class="el" href="#a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1">CSR_MIE_FIRQ15E</a> = 31 +<br /> + }</td></tr> +<tr class="separator:a0e9714690687badee43180c3cb62be33"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6301c554bf831b97fc28f9984a1ec21b" id="r_a6301c554bf831b97fc28f9984a1ec21b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159">CSR_MIP_MSIP</a> = 3 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4">CSR_MIP_MTIP</a> = 7 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872">CSR_MIP_MEIP</a> = 11 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00">CSR_MIP_FIRQ0P</a> = 16 +, <br /> +&#160;&#160;<a class="el" href="#a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52">CSR_MIP_FIRQ1P</a> = 17 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e">CSR_MIP_FIRQ2P</a> = 18 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155">CSR_MIP_FIRQ3P</a> = 19 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8">CSR_MIP_FIRQ4P</a> = 20 +, <br /> +&#160;&#160;<a class="el" href="#a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677">CSR_MIP_FIRQ5P</a> = 21 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e">CSR_MIP_FIRQ6P</a> = 22 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a">CSR_MIP_FIRQ7P</a> = 23 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580">CSR_MIP_FIRQ8P</a> = 24 +, <br /> +&#160;&#160;<a class="el" href="#a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e">CSR_MIP_FIRQ9P</a> = 25 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba">CSR_MIP_FIRQ10P</a> = 26 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544">CSR_MIP_FIRQ11P</a> = 27 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792">CSR_MIP_FIRQ12P</a> = 28 +, <br /> +&#160;&#160;<a class="el" href="#a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570">CSR_MIP_FIRQ13P</a> = 29 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d">CSR_MIP_FIRQ14P</a> = 30 +, <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d">CSR_MIP_FIRQ15P</a> = 31 +<br /> + }</td></tr> +<tr class="separator:a6301c554bf831b97fc28f9984a1ec21b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afed7f00bbb39468f038d9ca6fbac830c" id="r_afed7f00bbb39468f038d9ca6fbac830c"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afed7f00bbb39468f038d9ca6fbac830c">NEORV32_CSR_MISA_enum</a> { <br /> +&#160;&#160;<a class="el" href="#afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad">CSR_MISA_B</a> = 1 +, <a class="el" href="#afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa">CSR_MISA_C</a> = 2 +, <a class="el" href="#afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec">CSR_MISA_E</a> = 4 +, <a class="el" href="#afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca">CSR_MISA_I</a> = 8 +, <br /> +&#160;&#160;<a class="el" href="#afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b">CSR_MISA_M</a> = 12 +, <a class="el" href="#afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb">CSR_MISA_U</a> = 20 +, <a class="el" href="#afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193">CSR_MISA_X</a> = 23 +, <a class="el" href="#afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138">CSR_MISA_MXL_LO</a> = 30 +, <br /> +&#160;&#160;<a class="el" href="#afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc">CSR_MISA_MXL_HI</a> = 31 +<br /> + }</td></tr> +<tr class="separator:afed7f00bbb39468f038d9ca6fbac830c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af05490a8af176ab4ba945d327d448387" id="r_af05490a8af176ab4ba945d327d448387"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af05490a8af176ab4ba945d327d448387">NEORV32_CSR_XISA_enum</a> { <br /> +&#160;&#160;<a class="el" href="#af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c">CSR_MXISA_ZICSR</a> = 0 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e">CSR_MXISA_ZIFENCEI</a> = 1 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f">CSR_MXISA_ZMMUL</a> = 2 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0">CSR_MXISA_ZXCFU</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#af05490a8af176ab4ba945d327d448387a31788af612f04bc6b2a2bd15c1fb63c1">CSR_MXISA_ZKT</a> = 4 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1">CSR_MXISA_ZFINX</a> = 5 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e">CSR_MXISA_ZICOND</a> = 6 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe">CSR_MXISA_ZICNTR</a> = 7 +, <br /> +&#160;&#160;<a class="el" href="#af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3">CSR_MXISA_SMPMP</a> = 8 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34">CSR_MXISA_ZIHPM</a> = 9 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5">CSR_MXISA_SDEXT</a> = 10 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b">CSR_MXISA_SDTRIG</a> = 11 +, <br /> +&#160;&#160;<a class="el" href="#af05490a8af176ab4ba945d327d448387a34519a66e749d63dc5bc7c145c297b64">CSR_MXISA_ZBKX</a> = 12 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a48f1de7f79a0633644ae02c463d49375">CSR_MXISA_ZKND</a> = 13 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a216ec44d5be3b158acb7e033e352bad1">CSR_MXISA_ZKNE</a> = 14 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a5fe8e591901e0fd7ba6706c70e9c76ec">CSR_MXISA_ZKNH</a> = 15 +, <br /> +&#160;&#160;<a class="el" href="#af05490a8af176ab4ba945d327d448387adb26c1e5bf6ae112625621dddd331735">CSR_MXISA_ZBKB</a> = 16 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387ac9e87153c096d656b40cb7abdf3afd55">CSR_MXISA_ZBKC</a> = 17 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387ad7e7454a30c82c3d91acbc8c259e8c25">CSR_MXISA_ZKN</a> = 18 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a5e4bf05830b66410bbf2ef2c68e5fd18">CSR_MXISA_ZKSH</a> = 19 +, <br /> +&#160;&#160;<a class="el" href="#af05490a8af176ab4ba945d327d448387a43213190abb77304a78c15196c90a044">CSR_MXISA_ZKSED</a> = 20 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a2649bee3397c74ada7b72677308f38c0">CSR_MXISA_ZKS</a> = 21 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387adfc9122d93a71bf6df178022a52d22c4">CSR_MXISA_ZBA</a> = 22 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a815cbe0149cba2a69025f6bec9946a85">CSR_MXISA_ZBB</a> = 23 +, <br /> +&#160;&#160;<a class="el" href="#af05490a8af176ab4ba945d327d448387a469e8e449f0e442df531c8cf2c4f35c5">CSR_MXISA_ZBS</a> = 24 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387adf45adc0bcbec0c1ffa944099257a947">CSR_MXISA_ZALRSC</a> = 25 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a35543f2ac5cde6e142bca6791b7b36b1">CSR_MXISA_CLKGATE</a> = 27 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d">CSR_MXISA_RFHWRST</a> = 28 +, <br /> +&#160;&#160;<a class="el" href="#af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64">CSR_MXISA_FASTMUL</a> = 29 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868">CSR_MXISA_FASTSHIFT</a> = 30 +, <a class="el" href="#af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a">CSR_MXISA_IS_SIM</a> = 31 +<br /> + }</td></tr> +<tr class="separator:af05490a8af176ab4ba945d327d448387"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5cb925a3e41efd5e767bb39b3ee60cfe" id="r_a5cb925a3e41efd5e767bb39b3ee60cfe"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914">HPMCNT_EVENT_CY</a> = 0 +, <a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640">HPMCNT_EVENT_TM</a> = 1 +, <a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4">HPMCNT_EVENT_IR</a> = 2 +, <a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd">HPMCNT_EVENT_COMPR</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27">HPMCNT_EVENT_WAIT_DIS</a> = 4 +, <a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b">HPMCNT_EVENT_WAIT_ALU</a> = 5 +, <a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6">HPMCNT_EVENT_BRANCH</a> = 6 +, <a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5">HPMCNT_EVENT_BRANCHED</a> = 7 +, <br /> +&#160;&#160;<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91">HPMCNT_EVENT_LOAD</a> = 8 +, <a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2">HPMCNT_EVENT_STORE</a> = 9 +, <a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b">HPMCNT_EVENT_WAIT_LSU</a> = 10 +, <a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5">HPMCNT_EVENT_TRAP</a> = 11 +<br /> + }</td></tr> +<tr class="separator:a5cb925a3e41efd5e767bb39b3ee60cfe"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abc0e8daad1e9beda4d9950452cc930ea" id="r_abc0e8daad1e9beda4d9950452cc930ea"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abc0e8daad1e9beda4d9950452cc930ea">NEORV32_PMPCFG_ATTRIBUTES_enum</a> { <br /> +&#160;&#160;<a class="el" href="#abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6">PMPCFG_R</a> = 0 +, <a class="el" href="#abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f">PMPCFG_W</a> = 1 +, <a class="el" href="#abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d">PMPCFG_X</a> = 2 +, <a class="el" href="#abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1">PMPCFG_A_LSB</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4">PMPCFG_A_MSB</a> = 4 +, <a class="el" href="#abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14">PMPCFG_L</a> = 7 +<br /> + }</td></tr> +<tr class="separator:abc0e8daad1e9beda4d9950452cc930ea"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8f2418fb5e2175f35ee2362469ce01f5" id="r_a8f2418fb5e2175f35ee2362469ce01f5"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8f2418fb5e2175f35ee2362469ce01f5">NEORV32_PMP_MODES_enum</a> { <a class="el" href="#a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4">PMP_OFF</a> = 0 +, <a class="el" href="#a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1">PMP_TOR</a> = 1 +, <a class="el" href="#a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892">PMP_NA4</a> = 2 +, <a class="el" href="#a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820">PMP_NAPOT</a> = 3 + }</td></tr> +<tr class="separator:a8f2418fb5e2175f35ee2362469ce01f5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acb0fcbc551fec4c45676ff1317be24e1" id="r_acb0fcbc551fec4c45676ff1317be24e1"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a> { <br /> +&#160;&#160;<a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee">TRAP_CODE_I_MISALIGNED</a> = 0x00000000U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1">TRAP_CODE_I_ACCESS</a> = 0x00000001U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173">TRAP_CODE_I_ILLEGAL</a> = 0x00000002U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e">TRAP_CODE_BREAKPOINT</a> = 0x00000003U +, <br /> +&#160;&#160;<a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9">TRAP_CODE_L_MISALIGNED</a> = 0x00000004U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea">TRAP_CODE_L_ACCESS</a> = 0x00000005U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d">TRAP_CODE_S_MISALIGNED</a> = 0x00000006U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887">TRAP_CODE_S_ACCESS</a> = 0x00000007U +, <br /> +&#160;&#160;<a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02">TRAP_CODE_UENV_CALL</a> = 0x00000008U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac">TRAP_CODE_MENV_CALL</a> = 0x0000000bU +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0">TRAP_CODE_MSI</a> = 0x80000003U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7">TRAP_CODE_MTI</a> = 0x80000007U +, <br /> +&#160;&#160;<a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0">TRAP_CODE_MEI</a> = 0x8000000bU +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1">TRAP_CODE_FIRQ_0</a> = 0x80000010U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7">TRAP_CODE_FIRQ_1</a> = 0x80000011U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7">TRAP_CODE_FIRQ_2</a> = 0x80000012U +, <br /> +&#160;&#160;<a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0">TRAP_CODE_FIRQ_3</a> = 0x80000013U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547">TRAP_CODE_FIRQ_4</a> = 0x80000014U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757">TRAP_CODE_FIRQ_5</a> = 0x80000015U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473">TRAP_CODE_FIRQ_6</a> = 0x80000016U +, <br /> +&#160;&#160;<a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26">TRAP_CODE_FIRQ_7</a> = 0x80000017U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916">TRAP_CODE_FIRQ_8</a> = 0x80000018U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4">TRAP_CODE_FIRQ_9</a> = 0x80000019U +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42">TRAP_CODE_FIRQ_10</a> = 0x8000001aU +, <br /> +&#160;&#160;<a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334">TRAP_CODE_FIRQ_11</a> = 0x8000001bU +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c">TRAP_CODE_FIRQ_12</a> = 0x8000001cU +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9">TRAP_CODE_FIRQ_13</a> = 0x8000001dU +, <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e">TRAP_CODE_FIRQ_14</a> = 0x8000001eU +, <br /> +&#160;&#160;<a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110">TRAP_CODE_FIRQ_15</a> = 0x8000001fU +<br /> + }</td></tr> +<tr class="separator:acb0fcbc551fec4c45676ff1317be24e1"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Control and Status Registers (CSR) definitions. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="ac065a8cc32eed9a69ea1798492a69f49" name="ac065a8cc32eed9a69ea1798492a69f49"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac065a8cc32eed9a69ea1798492a69f49">&#9670;&#160;</a></span>NEORV32_CSR_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#ac065a8cc32eed9a69ea1798492a69f49">NEORV32_CSR_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Available CPU Control and Status Registers (CSRs) </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a" name="ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a"></a>CSR_FFLAGS&#160;</td><td class="fielddoc"><p>0x001 - fflags: Floating-point accrued exception flags (<a class="el" href="#afde0761e3150d82511136f56179c204b">NEORV32_CSR_FFLAGS_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812" name="ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812"></a>CSR_FRM&#160;</td><td class="fielddoc"><p>0x002 - frm: Floating-point dynamic rounding mode </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6" name="ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6"></a>CSR_FCSR&#160;</td><td class="fielddoc"><p>0x003 - fcsr: Floating-point control/status register (frm + fflags) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450" name="ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450"></a>CSR_MSTATUS&#160;</td><td class="fielddoc"><p>0x300 - mstatus: Machine status register (<a class="el" href="#a76b70a2334131e7589d84c1ee96de485">NEORV32_CSR_MSTATUS_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c" name="ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c"></a>CSR_MISA&#160;</td><td class="fielddoc"><p>0x301 - misa: Machine ISA and extensions (<a class="el" href="#afed7f00bbb39468f038d9ca6fbac830c">NEORV32_CSR_MISA_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610" name="ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610"></a>CSR_MIE&#160;</td><td class="fielddoc"><p>0x304 - mie: Machine interrupt-enable register (<a class="el" href="#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21" name="ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21"></a>CSR_MTVEC&#160;</td><td class="fielddoc"><p>0x305 - mtvec: Machine trap-handler base address </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78" name="ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78"></a>CSR_MCOUNTEREN&#160;</td><td class="fielddoc"><p>0x305 - mcounteren: Machine counter enable register (<a class="el" href="#a6d3c6aaee79b679e954c54563d7ee500">NEORV32_CSR_MCOUNTEREN_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067" name="ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067"></a>CSR_MSTATUSH&#160;</td><td class="fielddoc"><p>0x310 - mstatush: Machine status register - high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6" name="ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6"></a>CSR_MCOUNTINHIBIT&#160;</td><td class="fielddoc"><p>0x320 - mcountinhibit: Machine counter-inhibit register (<a class="el" href="#ab6886ca6858d57854495986ef9b5cbfe">NEORV32_CSR_MCOUNTINHIBIT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98" name="ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98"></a>CSR_MENVCFG&#160;</td><td class="fielddoc"><p>0x30a - menvcfg: Machine environment configuration register - low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8" name="ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8"></a>CSR_MENVCFGH&#160;</td><td class="fielddoc"><p>0x31a - menvcfgh: Machine environment configuration register - high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6" name="ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6"></a>CSR_MHPMEVENT3&#160;</td><td class="fielddoc"><p>0x323 - mhpmevent3: Machine hardware performance monitor event selector 3 (<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459" name="ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459"></a>CSR_MHPMEVENT4&#160;</td><td class="fielddoc"><p>0x324 - mhpmevent4: Machine hardware performance monitor event selector 4 (<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d" name="ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d"></a>CSR_MHPMEVENT5&#160;</td><td class="fielddoc"><p>0x325 - mhpmevent5: Machine hardware performance monitor event selector 5 (<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd" name="ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd"></a>CSR_MHPMEVENT6&#160;</td><td class="fielddoc"><p>0x326 - mhpmevent6: Machine hardware performance monitor event selector 6 (<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59" name="ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59"></a>CSR_MHPMEVENT7&#160;</td><td class="fielddoc"><p>0x327 - mhpmevent7: Machine hardware performance monitor event selector 7 (<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79" name="ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79"></a>CSR_MHPMEVENT8&#160;</td><td class="fielddoc"><p>0x328 - mhpmevent8: Machine hardware performance monitor event selector 8 (<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632" name="ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632"></a>CSR_MHPMEVENT9&#160;</td><td class="fielddoc"><p>0x329 - mhpmevent9: Machine hardware performance monitor event selector 9 (<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512" name="ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512"></a>CSR_MHPMEVENT10&#160;</td><td class="fielddoc"><p>0x32a - mhpmevent10: Machine hardware performance monitor event selector 10 (<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf" name="ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf"></a>CSR_MHPMEVENT11&#160;</td><td class="fielddoc"><p>0x32b - mhpmevent11: Machine hardware performance monitor event selector 11 (<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f" name="ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f"></a>CSR_MHPMEVENT12&#160;</td><td class="fielddoc"><p>0x32c - mhpmevent12: Machine hardware performance monitor event selector 12 (<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6" name="ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6"></a>CSR_MHPMEVENT13&#160;</td><td class="fielddoc"><p>0x32d - mhpmevent13: Machine hardware performance monitor event selector 13 (<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4" name="ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4"></a>CSR_MHPMEVENT14&#160;</td><td class="fielddoc"><p>0x32e - mhpmevent14: Machine hardware performance monitor event selector 14 (<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54" name="ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54"></a>CSR_MHPMEVENT15&#160;</td><td class="fielddoc"><p>0x32f - mhpmevent15: Machine hardware performance monitor event selector 15 (<a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004" name="ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004"></a>CSR_MSCRATCH&#160;</td><td class="fielddoc"><p>0x340 - mscratch: Machine scratch register </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153" name="ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153"></a>CSR_MEPC&#160;</td><td class="fielddoc"><p>0x341 - mepc: Machine exception program counter </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b" name="ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b"></a>CSR_MCAUSE&#160;</td><td class="fielddoc"><p>0x342 - mcause: Machine trap cause (<a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e" name="ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e"></a>CSR_MTVAL&#160;</td><td class="fielddoc"><p>0x343 - mtval: Machine trap value </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c" name="ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c"></a>CSR_MIP&#160;</td><td class="fielddoc"><p>0x344 - mip: Machine interrupt pending register (<a class="el" href="#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8" name="ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8"></a>CSR_MTINST&#160;</td><td class="fielddoc"><p>0x34a - mtinst: Machine trap instruction </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f" name="ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f"></a>CSR_PMPCFG0&#160;</td><td class="fielddoc"><p>0x3a0 - pmpcfg0: Physical memory protection configuration register 0: regions 0..3 (<a class="el" href="#abc0e8daad1e9beda4d9950452cc930ea">NEORV32_PMPCFG_ATTRIBUTES_enum</a>, <a class="el" href="#a8f2418fb5e2175f35ee2362469ce01f5">NEORV32_PMP_MODES_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16" name="ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16"></a>CSR_PMPCFG1&#160;</td><td class="fielddoc"><p>0x3a1 - pmpcfg1: Physical memory protection configuration register 1: regions 4..7 (<a class="el" href="#abc0e8daad1e9beda4d9950452cc930ea">NEORV32_PMPCFG_ATTRIBUTES_enum</a>, <a class="el" href="#a8f2418fb5e2175f35ee2362469ce01f5">NEORV32_PMP_MODES_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446" name="ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446"></a>CSR_PMPCFG2&#160;</td><td class="fielddoc"><p>0x3a2 - pmpcfg2: Physical memory protection configuration register 2: regions 8..11 (<a class="el" href="#abc0e8daad1e9beda4d9950452cc930ea">NEORV32_PMPCFG_ATTRIBUTES_enum</a>, <a class="el" href="#a8f2418fb5e2175f35ee2362469ce01f5">NEORV32_PMP_MODES_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850" name="ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850"></a>CSR_PMPCFG3&#160;</td><td class="fielddoc"><p>0x3a3 - pmpcfg3: Physical memory protection configuration register 3: regions 12..15 (<a class="el" href="#abc0e8daad1e9beda4d9950452cc930ea">NEORV32_PMPCFG_ATTRIBUTES_enum</a>, <a class="el" href="#a8f2418fb5e2175f35ee2362469ce01f5">NEORV32_PMP_MODES_enum</a>) </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f" name="ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f"></a>CSR_PMPADDR0&#160;</td><td class="fielddoc"><p>0x3b0 - pmpaddr0: Physical memory protection address register 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41" name="ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41"></a>CSR_PMPADDR1&#160;</td><td class="fielddoc"><p>0x3b1 - pmpaddr1: Physical memory protection address register 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50" name="ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50"></a>CSR_PMPADDR2&#160;</td><td class="fielddoc"><p>0x3b2 - pmpaddr2: Physical memory protection address register 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9" name="ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9"></a>CSR_PMPADDR3&#160;</td><td class="fielddoc"><p>0x3b3 - pmpaddr3: Physical memory protection address register 3 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507" name="ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507"></a>CSR_PMPADDR4&#160;</td><td class="fielddoc"><p>0x3b4 - pmpaddr4: Physical memory protection address register 4 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c" name="ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c"></a>CSR_PMPADDR5&#160;</td><td class="fielddoc"><p>0x3b5 - pmpaddr5: Physical memory protection address register 5 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444" name="ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444"></a>CSR_PMPADDR6&#160;</td><td class="fielddoc"><p>0x3b6 - pmpaddr6: Physical memory protection address register 6 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346" name="ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346"></a>CSR_PMPADDR7&#160;</td><td class="fielddoc"><p>0x3b7 - pmpaddr7: Physical memory protection address register 7 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b" name="ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b"></a>CSR_PMPADDR8&#160;</td><td class="fielddoc"><p>0x3b8 - pmpaddr8: Physical memory protection address register 8 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77" name="ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77"></a>CSR_PMPADDR9&#160;</td><td class="fielddoc"><p>0x3b9 - pmpaddr9: Physical memory protection address register 9 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60" name="ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60"></a>CSR_PMPADDR10&#160;</td><td class="fielddoc"><p>0x3ba - pmpaddr10: Physical memory protection address register 10 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383" name="ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383"></a>CSR_PMPADDR11&#160;</td><td class="fielddoc"><p>0x3bb - pmpaddr11: Physical memory protection address register 11 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b" name="ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b"></a>CSR_PMPADDR12&#160;</td><td class="fielddoc"><p>0x3bc - pmpaddr12: Physical memory protection address register 12 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc" name="ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc"></a>CSR_PMPADDR13&#160;</td><td class="fielddoc"><p>0x3bd - pmpaddr13: Physical memory protection address register 13 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8" name="ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8"></a>CSR_PMPADDR14&#160;</td><td class="fielddoc"><p>0x3be - pmpaddr14: Physical memory protection address register 14 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2" name="ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2"></a>CSR_PMPADDR15&#160;</td><td class="fielddoc"><p>0x3bf - pmpaddr15: Physical memory protection address register 15 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d" name="ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d"></a>CSR_TSELECT&#160;</td><td class="fielddoc"><p>0x7a0 - tselect: Trigger select </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57" name="ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57"></a>CSR_TDATA1&#160;</td><td class="fielddoc"><p>0x7a1 - tdata1: Trigger data register 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc" name="ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc"></a>CSR_TDATA2&#160;</td><td class="fielddoc"><p>0x7a2 - tdata2: Trigger data register 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b" name="ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b"></a>CSR_TINFO&#160;</td><td class="fielddoc"><p>0x7a4 - tinfo: Trigger info </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9" name="ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9"></a>CSR_DCSR&#160;</td><td class="fielddoc"><p>0x7b0 - dcsr: Debug status and control register </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b" name="ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b"></a>CSR_DPC&#160;</td><td class="fielddoc"><p>0x7b1 - dpc: Debug program counter </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7" name="ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7"></a>CSR_DSCRATCH0&#160;</td><td class="fielddoc"><p>0x7b2 - dscratch0: Debug scratch register </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f" name="ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f"></a>CSR_CFUREG0&#160;</td><td class="fielddoc"><p>0x800 - cfureg0: custom CFU CSR 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8" name="ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8"></a>CSR_CFUREG1&#160;</td><td class="fielddoc"><p>0x801 - cfureg1: custom CFU CSR 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68" name="ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68"></a>CSR_CFUREG2&#160;</td><td class="fielddoc"><p>0x802 - cfureg2: custom CFU CSR 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf" name="ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf"></a>CSR_CFUREG3&#160;</td><td class="fielddoc"><p>0x803 - cfureg3: custom CFU CSR 3 </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77" name="ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77"></a>CSR_MCYCLE&#160;</td><td class="fielddoc"><p>0xb00 - mcycle: Machine cycle counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb" name="ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb"></a>CSR_MINSTRET&#160;</td><td class="fielddoc"><p>0xb02 - minstret: Machine instructions-retired counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc" name="ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc"></a>CSR_MHPMCOUNTER3&#160;</td><td class="fielddoc"><p>0xb03 - mhpmcounter3: Machine hardware performance monitor 3 counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9" name="ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9"></a>CSR_MHPMCOUNTER4&#160;</td><td class="fielddoc"><p>0xb04 - mhpmcounter4: Machine hardware performance monitor 4 counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394" name="ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394"></a>CSR_MHPMCOUNTER5&#160;</td><td class="fielddoc"><p>0xb05 - mhpmcounter5: Machine hardware performance monitor 5 counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d" name="ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d"></a>CSR_MHPMCOUNTER6&#160;</td><td class="fielddoc"><p>0xb06 - mhpmcounter6: Machine hardware performance monitor 6 counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444" name="ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444"></a>CSR_MHPMCOUNTER7&#160;</td><td class="fielddoc"><p>0xb07 - mhpmcounter7: Machine hardware performance monitor 7 counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79" name="ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79"></a>CSR_MHPMCOUNTER8&#160;</td><td class="fielddoc"><p>0xb08 - mhpmcounter8: Machine hardware performance monitor 8 counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb" name="ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb"></a>CSR_MHPMCOUNTER9&#160;</td><td class="fielddoc"><p>0xb09 - mhpmcounter9: Machine hardware performance monitor 9 counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f" name="ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f"></a>CSR_MHPMCOUNTER10&#160;</td><td class="fielddoc"><p>0xb0a - mhpmcounter10: Machine hardware performance monitor 10 counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5" name="ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5"></a>CSR_MHPMCOUNTER11&#160;</td><td class="fielddoc"><p>0xb0b - mhpmcounter11: Machine hardware performance monitor 11 counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e" name="ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e"></a>CSR_MHPMCOUNTER12&#160;</td><td class="fielddoc"><p>0xb0c - mhpmcounter12: Machine hardware performance monitor 12 counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0" name="ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0"></a>CSR_MHPMCOUNTER13&#160;</td><td class="fielddoc"><p>0xb0d - mhpmcounter13: Machine hardware performance monitor 13 counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229" name="ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229"></a>CSR_MHPMCOUNTER14&#160;</td><td class="fielddoc"><p>0xb0e - mhpmcounter14: Machine hardware performance monitor 14 counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff" name="ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff"></a>CSR_MHPMCOUNTER15&#160;</td><td class="fielddoc"><p>0xb0f - mhpmcounter15: Machine hardware performance monitor 15 counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b" name="ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b"></a>CSR_MCYCLEH&#160;</td><td class="fielddoc"><p>0xb80 - mcycleh: Machine cycle counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988" name="ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988"></a>CSR_MINSTRETH&#160;</td><td class="fielddoc"><p>0xb82 - minstreth: Machine instructions-retired counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25" name="ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25"></a>CSR_MHPMCOUNTER3H&#160;</td><td class="fielddoc"><p>0xb83 - mhpmcounter3 : Machine hardware performance monitor 3 counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85" name="ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85"></a>CSR_MHPMCOUNTER4H&#160;</td><td class="fielddoc"><p>0xb84 - mhpmcounter4h: Machine hardware performance monitor 4 counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599" name="ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599"></a>CSR_MHPMCOUNTER5H&#160;</td><td class="fielddoc"><p>0xb85 - mhpmcounter5h: Machine hardware performance monitor 5 counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77" name="ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77"></a>CSR_MHPMCOUNTER6H&#160;</td><td class="fielddoc"><p>0xb86 - mhpmcounter6h: Machine hardware performance monitor 6 counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a" name="ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a"></a>CSR_MHPMCOUNTER7H&#160;</td><td class="fielddoc"><p>0xb87 - mhpmcounter7h: Machine hardware performance monitor 7 counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc" name="ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc"></a>CSR_MHPMCOUNTER8H&#160;</td><td class="fielddoc"><p>0xb88 - mhpmcounter8h: Machine hardware performance monitor 8 counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8" name="ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8"></a>CSR_MHPMCOUNTER9H&#160;</td><td class="fielddoc"><p>0xb89 - mhpmcounter9h: Machine hardware performance monitor 9 counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd" name="ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd"></a>CSR_MHPMCOUNTER10H&#160;</td><td class="fielddoc"><p>0xb8a - mhpmcounter10h: Machine hardware performance monitor 10 counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071" name="ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071"></a>CSR_MHPMCOUNTER11H&#160;</td><td class="fielddoc"><p>0xb8b - mhpmcounter11h: Machine hardware performance monitor 11 counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2" name="ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2"></a>CSR_MHPMCOUNTER12H&#160;</td><td class="fielddoc"><p>0xb8c - mhpmcounter12h: Machine hardware performance monitor 12 counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d" name="ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d"></a>CSR_MHPMCOUNTER13H&#160;</td><td class="fielddoc"><p>0xb8d - mhpmcounter13h: Machine hardware performance monitor 13 counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa" name="ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa"></a>CSR_MHPMCOUNTER14H&#160;</td><td class="fielddoc"><p>0xb8e - mhpmcounter14h: Machine hardware performance monitor 14 counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46" name="ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46"></a>CSR_MHPMCOUNTER15H&#160;</td><td class="fielddoc"><p>0xb8f - mhpmcounter15h: Machine hardware performance monitor 15 counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e" name="ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e"></a>CSR_CYCLE&#160;</td><td class="fielddoc"><p>0xc00 - cycle: User cycle counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66" name="ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66"></a>CSR_INSTRET&#160;</td><td class="fielddoc"><p>0xc02 - instret: User instructions-retired counter low word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db" name="ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db"></a>CSR_CYCLEH&#160;</td><td class="fielddoc"><p>0xc80 - cycleh: User cycle counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153" name="ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153"></a>CSR_INSTRETH&#160;</td><td class="fielddoc"><p>0xc82 - instreth: User instructions-retired counter high word </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b" name="ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b"></a>CSR_MVENDORID&#160;</td><td class="fielddoc"><p>0xf11 - mvendorid: Machine vendor ID </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4" name="ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4"></a>CSR_MARCHID&#160;</td><td class="fielddoc"><p>0xf12 - marchid: Machine architecture ID </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd" name="ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd"></a>CSR_MIMPID&#160;</td><td class="fielddoc"><p>0xf13 - mimpid: Machine implementation ID </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790" name="ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790"></a>CSR_MHARTID&#160;</td><td class="fielddoc"><p>0xf14 - mhartid: Machine hardware thread ID </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9" name="ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9"></a>CSR_MCONFIGPTR&#160;</td><td class="fielddoc"><p>0xf15 - mconfigptr: Machine configuration pointer register </p> +</td></tr> +<tr><td class="fieldname"><a id="ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2" name="ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2"></a>CSR_MXISA&#160;</td><td class="fielddoc"><p>0xfc0 - mxisa: Machine extended ISA and extensions (<a class="el" href="#af05490a8af176ab4ba945d327d448387">NEORV32_CSR_XISA_enum</a>) </p> +</td></tr> +</table> + +</div> +</div> +<a id="afde0761e3150d82511136f56179c204b" name="afde0761e3150d82511136f56179c204b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afde0761e3150d82511136f56179c204b">&#9670;&#160;</a></span>NEORV32_CSR_FFLAGS_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#afde0761e3150d82511136f56179c204b">NEORV32_CSR_FFLAGS_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>CPU fflags (fcsr) CSR (r/w): FPU accrued exception flags </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6" name="afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6"></a>CSR_FFLAGS_NX&#160;</td><td class="fielddoc"><p>CPU fflags CSR (0): NX - inexact (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819" name="afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819"></a>CSR_FFLAGS_UF&#160;</td><td class="fielddoc"><p>CPU fflags CSR (1): UF - underflow (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e" name="afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e"></a>CSR_FFLAGS_OF&#160;</td><td class="fielddoc"><p>CPU fflags CSR (2): OF - overflow (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b" name="afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b"></a>CSR_FFLAGS_DZ&#160;</td><td class="fielddoc"><p>CPU fflags CSR (3): DZ - divide by zero (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165" name="afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165"></a>CSR_FFLAGS_NV&#160;</td><td class="fielddoc"><p>CPU fflags CSR (4): NV - invalid operation (r/w) </p> +</td></tr> +</table> + +</div> +</div> +<a id="a6d3c6aaee79b679e954c54563d7ee500" name="a6d3c6aaee79b679e954c54563d7ee500"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6d3c6aaee79b679e954c54563d7ee500">&#9670;&#160;</a></span>NEORV32_CSR_MCOUNTEREN_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a6d3c6aaee79b679e954c54563d7ee500">NEORV32_CSR_MCOUNTEREN_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>CPU mcountern CSR (r/w): Machine counter-enable register </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a6d3c6aaee79b679e954c54563d7ee500a3d0c8ff6ba2c557cb5b5d353bdb95790" name="a6d3c6aaee79b679e954c54563d7ee500a3d0c8ff6ba2c557cb5b5d353bdb95790"></a>CSR_MCOUNTEREN_CY&#160;</td><td class="fielddoc"><p>CPU mcountern CSR (0): CY - cycle counter (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6d3c6aaee79b679e954c54563d7ee500a97e36c94b71fa2f9a805bbe47b0bc1b5" name="a6d3c6aaee79b679e954c54563d7ee500a97e36c94b71fa2f9a805bbe47b0bc1b5"></a>CSR_MCOUNTEREN_IR&#160;</td><td class="fielddoc"><p>CPU mcountern CSR (2): IR instruction-retired counter (r/w) </p> +</td></tr> +</table> + +</div> +</div> +<a id="ab6886ca6858d57854495986ef9b5cbfe" name="ab6886ca6858d57854495986ef9b5cbfe"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab6886ca6858d57854495986ef9b5cbfe">&#9670;&#160;</a></span>NEORV32_CSR_MCOUNTINHIBIT_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#ab6886ca6858d57854495986ef9b5cbfe">NEORV32_CSR_MCOUNTINHIBIT_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>CPU mcountinhibitCSR (r/w): Machine counter-inhibit </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3" name="ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3"></a>CSR_MCOUNTINHIBIT_CY&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (0): CY - Enable auto-increment of [m]cycle[h] CSR when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa" name="ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa"></a>CSR_MCOUNTINHIBIT_IR&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (2): IR - Enable auto-increment of [m]instret[h] CSR when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752" name="ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752"></a>CSR_MCOUNTINHIBIT_HPM3&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (3): HPM3 - Enable auto-increment of hpmcnt3[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d" name="ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d"></a>CSR_MCOUNTINHIBIT_HPM4&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (4): HPM4 - Enable auto-increment of hpmcnt4[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6" name="ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6"></a>CSR_MCOUNTINHIBIT_HPM5&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (5): HPM5 - Enable auto-increment of hpmcnt5[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db" name="ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db"></a>CSR_MCOUNTINHIBIT_HPM6&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (6): HPM6 - Enable auto-increment of hpmcnt6[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab" name="ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab"></a>CSR_MCOUNTINHIBIT_HPM7&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (7): HPM7 - Enable auto-increment of hpmcnt7[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a" name="ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a"></a>CSR_MCOUNTINHIBIT_HPM8&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (8): HPM8 - Enable auto-increment of hpmcnt8[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a" name="ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a"></a>CSR_MCOUNTINHIBIT_HPM9&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (9): HPM9 - Enable auto-increment of hpmcnt9[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e" name="ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e"></a>CSR_MCOUNTINHIBIT_HPM10&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (10): HPM10 - Enable auto-increment of hpmcnt10[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806" name="ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806"></a>CSR_MCOUNTINHIBIT_HPM11&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (11): HPM11 - Enable auto-increment of hpmcnt11[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486" name="ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486"></a>CSR_MCOUNTINHIBIT_HPM12&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (12): HPM12 - Enable auto-increment of hpmcnt12[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed" name="ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed"></a>CSR_MCOUNTINHIBIT_HPM13&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (13): HPM13 - Enable auto-increment of hpmcnt13[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987" name="ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987"></a>CSR_MCOUNTINHIBIT_HPM14&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (14): HPM14 - Enable auto-increment of hpmcnt14[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085" name="ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085"></a>CSR_MCOUNTINHIBIT_HPM15&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (15): HPM15 - Enable auto-increment of hpmcnt15[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4" name="ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4"></a>CSR_MCOUNTINHIBIT_HPM16&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (16): HPM16 - Enable auto-increment of hpmcnt16[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3" name="ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3"></a>CSR_MCOUNTINHIBIT_HPM17&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (17): HPM17 - Enable auto-increment of hpmcnt17[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0" name="ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0"></a>CSR_MCOUNTINHIBIT_HPM18&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (18): HPM18 - Enable auto-increment of hpmcnt18[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc" name="ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc"></a>CSR_MCOUNTINHIBIT_HPM19&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (19): HPM19 - Enable auto-increment of hpmcnt19[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca" name="ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca"></a>CSR_MCOUNTINHIBIT_HPM20&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (20): HPM20 - Enable auto-increment of hpmcnt20[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38" name="ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38"></a>CSR_MCOUNTINHIBIT_HPM21&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (21): HPM21 - Enable auto-increment of hpmcnt21[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e" name="ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e"></a>CSR_MCOUNTINHIBIT_HPM22&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (22): HPM22 - Enable auto-increment of hpmcnt22[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904" name="ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904"></a>CSR_MCOUNTINHIBIT_HPM23&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (23): HPM23 - Enable auto-increment of hpmcnt23[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1" name="ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1"></a>CSR_MCOUNTINHIBIT_HPM24&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (24): HPM24 - Enable auto-increment of hpmcnt24[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46" name="ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46"></a>CSR_MCOUNTINHIBIT_HPM25&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (25): HPM25 - Enable auto-increment of hpmcnt25[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74" name="ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74"></a>CSR_MCOUNTINHIBIT_HPM26&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (26): HPM26 - Enable auto-increment of hpmcnt26[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db" name="ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db"></a>CSR_MCOUNTINHIBIT_HPM27&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (27): HPM27 - Enable auto-increment of hpmcnt27[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32" name="ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32"></a>CSR_MCOUNTINHIBIT_HPM28&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (28): HPM28 - Enable auto-increment of hpmcnt28[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382" name="ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382"></a>CSR_MCOUNTINHIBIT_HPM29&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (29): HPM29 - Enable auto-increment of hpmcnt29[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7" name="ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7"></a>CSR_MCOUNTINHIBIT_HPM30&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (30): HPM30 - Enable auto-increment of hpmcnt30[h] when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05" name="ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05"></a>CSR_MCOUNTINHIBIT_HPM31&#160;</td><td class="fielddoc"><p>CPU mcountinhibit CSR (31): HPM31 - Enable auto-increment of hpmcnt31[h] when set (r/w) </p> +</td></tr> +</table> + +</div> +</div> +<a id="a0e9714690687badee43180c3cb62be33" name="a0e9714690687badee43180c3cb62be33"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0e9714690687badee43180c3cb62be33">&#9670;&#160;</a></span>NEORV32_CSR_MIE_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>CPU mie CSR (r/w): Machine interrupt enable </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a" name="a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a"></a>CSR_MIE_MSIE&#160;</td><td class="fielddoc"><p>CPU mie CSR (3): MSIE - Machine software interrupt enable (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083" name="a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083"></a>CSR_MIE_MTIE&#160;</td><td class="fielddoc"><p>CPU mie CSR (7): MTIE - Machine timer interrupt enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324" name="a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324"></a>CSR_MIE_MEIE&#160;</td><td class="fielddoc"><p>CPU mie CSR (11): MEIE - Machine external interrupt enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d" name="a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d"></a>CSR_MIE_FIRQ0E&#160;</td><td class="fielddoc"><p>CPU mie CSR (16): FIRQ0E - Fast interrupt channel 0 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb" name="a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb"></a>CSR_MIE_FIRQ1E&#160;</td><td class="fielddoc"><p>CPU mie CSR (17): FIRQ1E - Fast interrupt channel 1 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7" name="a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7"></a>CSR_MIE_FIRQ2E&#160;</td><td class="fielddoc"><p>CPU mie CSR (18): FIRQ2E - Fast interrupt channel 2 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db" name="a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db"></a>CSR_MIE_FIRQ3E&#160;</td><td class="fielddoc"><p>CPU mie CSR (19): FIRQ3E - Fast interrupt channel 3 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc" name="a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc"></a>CSR_MIE_FIRQ4E&#160;</td><td class="fielddoc"><p>CPU mie CSR (20): FIRQ4E - Fast interrupt channel 4 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698" name="a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698"></a>CSR_MIE_FIRQ5E&#160;</td><td class="fielddoc"><p>CPU mie CSR (21): FIRQ5E - Fast interrupt channel 5 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a" name="a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a"></a>CSR_MIE_FIRQ6E&#160;</td><td class="fielddoc"><p>CPU mie CSR (22): FIRQ6E - Fast interrupt channel 6 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8" name="a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8"></a>CSR_MIE_FIRQ7E&#160;</td><td class="fielddoc"><p>CPU mie CSR (23): FIRQ7E - Fast interrupt channel 7 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e" name="a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e"></a>CSR_MIE_FIRQ8E&#160;</td><td class="fielddoc"><p>CPU mie CSR (24): FIRQ8E - Fast interrupt channel 8 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19" name="a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19"></a>CSR_MIE_FIRQ9E&#160;</td><td class="fielddoc"><p>CPU mie CSR (25): FIRQ9E - Fast interrupt channel 9 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a" name="a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a"></a>CSR_MIE_FIRQ10E&#160;</td><td class="fielddoc"><p>CPU mie CSR (26): FIRQ10E - Fast interrupt channel 10 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd" name="a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd"></a>CSR_MIE_FIRQ11E&#160;</td><td class="fielddoc"><p>CPU mie CSR (27): FIRQ11E - Fast interrupt channel 11 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943" name="a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943"></a>CSR_MIE_FIRQ12E&#160;</td><td class="fielddoc"><p>CPU mie CSR (28): FIRQ12E - Fast interrupt channel 12 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f" name="a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f"></a>CSR_MIE_FIRQ13E&#160;</td><td class="fielddoc"><p>CPU mie CSR (29): FIRQ13E - Fast interrupt channel 13 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b" name="a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b"></a>CSR_MIE_FIRQ14E&#160;</td><td class="fielddoc"><p>CPU mie CSR (30): FIRQ14E - Fast interrupt channel 14 enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1" name="a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1"></a>CSR_MIE_FIRQ15E&#160;</td><td class="fielddoc"><p>CPU mie CSR (31): FIRQ15E - Fast interrupt channel 15 enable bit (r/w) </p> +</td></tr> +</table> + +</div> +</div> +<a id="a6301c554bf831b97fc28f9984a1ec21b" name="a6301c554bf831b97fc28f9984a1ec21b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6301c554bf831b97fc28f9984a1ec21b">&#9670;&#160;</a></span>NEORV32_CSR_MIP_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>CPU mip CSR (r/-): Machine interrupt pending </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159" name="a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159"></a>CSR_MIP_MSIP&#160;</td><td class="fielddoc"><p>CPU mip CSR (3): MSIP - Machine software interrupt pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4" name="a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4"></a>CSR_MIP_MTIP&#160;</td><td class="fielddoc"><p>CPU mip CSR (7): MTIP - Machine timer interrupt pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872" name="a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872"></a>CSR_MIP_MEIP&#160;</td><td class="fielddoc"><p>CPU mip CSR (11): MEIP - Machine external interrupt pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00" name="a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00"></a>CSR_MIP_FIRQ0P&#160;</td><td class="fielddoc"><p>CPU mip CSR (16): FIRQ0P - Fast interrupt channel 0 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52" name="a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52"></a>CSR_MIP_FIRQ1P&#160;</td><td class="fielddoc"><p>CPU mip CSR (17): FIRQ1P - Fast interrupt channel 1 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e" name="a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e"></a>CSR_MIP_FIRQ2P&#160;</td><td class="fielddoc"><p>CPU mip CSR (18): FIRQ2P - Fast interrupt channel 2 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155" name="a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155"></a>CSR_MIP_FIRQ3P&#160;</td><td class="fielddoc"><p>CPU mip CSR (19): FIRQ3P - Fast interrupt channel 3 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8" name="a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8"></a>CSR_MIP_FIRQ4P&#160;</td><td class="fielddoc"><p>CPU mip CSR (20): FIRQ4P - Fast interrupt channel 4 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677" name="a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677"></a>CSR_MIP_FIRQ5P&#160;</td><td class="fielddoc"><p>CPU mip CSR (21): FIRQ5P - Fast interrupt channel 5 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e" name="a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e"></a>CSR_MIP_FIRQ6P&#160;</td><td class="fielddoc"><p>CPU mip CSR (22): FIRQ6P - Fast interrupt channel 6 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a" name="a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a"></a>CSR_MIP_FIRQ7P&#160;</td><td class="fielddoc"><p>CPU mip CSR (23): FIRQ7P - Fast interrupt channel 7 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580" name="a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580"></a>CSR_MIP_FIRQ8P&#160;</td><td class="fielddoc"><p>CPU mip CSR (24): FIRQ8P - Fast interrupt channel 8 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e" name="a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e"></a>CSR_MIP_FIRQ9P&#160;</td><td class="fielddoc"><p>CPU mip CSR (25): FIRQ9P - Fast interrupt channel 9 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba" name="a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba"></a>CSR_MIP_FIRQ10P&#160;</td><td class="fielddoc"><p>CPU mip CSR (26): FIRQ10P - Fast interrupt channel 10 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544" name="a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544"></a>CSR_MIP_FIRQ11P&#160;</td><td class="fielddoc"><p>CPU mip CSR (27): FIRQ11P - Fast interrupt channel 11 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792" name="a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792"></a>CSR_MIP_FIRQ12P&#160;</td><td class="fielddoc"><p>CPU mip CSR (28): FIRQ12P - Fast interrupt channel 12 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570" name="a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570"></a>CSR_MIP_FIRQ13P&#160;</td><td class="fielddoc"><p>CPU mip CSR (29): FIRQ13P - Fast interrupt channel 13 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d" name="a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d"></a>CSR_MIP_FIRQ14P&#160;</td><td class="fielddoc"><p>CPU mip CSR (30): FIRQ14P - Fast interrupt channel 14 pending (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d" name="a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d"></a>CSR_MIP_FIRQ15P&#160;</td><td class="fielddoc"><p>CPU mip CSR (31): FIRQ15P - Fast interrupt channel 15 pending (r/-) </p> +</td></tr> +</table> + +</div> +</div> +<a id="afed7f00bbb39468f038d9ca6fbac830c" name="afed7f00bbb39468f038d9ca6fbac830c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afed7f00bbb39468f038d9ca6fbac830c">&#9670;&#160;</a></span>NEORV32_CSR_MISA_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#afed7f00bbb39468f038d9ca6fbac830c">NEORV32_CSR_MISA_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>CPU misa CSR (r/-): Machine instruction set extensions </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad" name="afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad"></a>CSR_MISA_B&#160;</td><td class="fielddoc"><p>CPU misa CSR (1): B: Bit manipulation CPU extension available (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa" name="afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa"></a>CSR_MISA_C&#160;</td><td class="fielddoc"><p>CPU misa CSR (2): C: Compressed instructions CPU extension available (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec" name="afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec"></a>CSR_MISA_E&#160;</td><td class="fielddoc"><p>CPU misa CSR (4): E: Embedded CPU extension available (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca" name="afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca"></a>CSR_MISA_I&#160;</td><td class="fielddoc"><p>CPU misa CSR (8): I: Base integer ISA CPU extension available (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b" name="afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b"></a>CSR_MISA_M&#160;</td><td class="fielddoc"><p>CPU misa CSR (12): M: Multiplier/divider CPU extension available (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb" name="afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb"></a>CSR_MISA_U&#160;</td><td class="fielddoc"><p>CPU misa CSR (20): U: User mode CPU extension available (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193" name="afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193"></a>CSR_MISA_X&#160;</td><td class="fielddoc"><p>CPU misa CSR (23): X: Non-standard CPU extension available (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138" name="afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138"></a>CSR_MISA_MXL_LO&#160;</td><td class="fielddoc"><p>CPU misa CSR (30): MXL.lo: CPU data width (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc" name="afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc"></a>CSR_MISA_MXL_HI&#160;</td><td class="fielddoc"><p>CPU misa CSR (31): MXL.Hi: CPU data width (r/-) </p> +</td></tr> +</table> + +</div> +</div> +<a id="a76b70a2334131e7589d84c1ee96de485" name="a76b70a2334131e7589d84c1ee96de485"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a76b70a2334131e7589d84c1ee96de485">&#9670;&#160;</a></span>NEORV32_CSR_MSTATUS_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a76b70a2334131e7589d84c1ee96de485">NEORV32_CSR_MSTATUS_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>CPU mstatus CSR (r/w): Machine status </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56" name="a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56"></a>CSR_MSTATUS_MIE&#160;</td><td class="fielddoc"><p>CPU mstatus CSR (3): MIE - Machine interrupt enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34" name="a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34"></a>CSR_MSTATUS_MPIE&#160;</td><td class="fielddoc"><p>CPU mstatus CSR (7): MPIE - Machine previous interrupt enable bit (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97" name="a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97"></a>CSR_MSTATUS_MPP_L&#160;</td><td class="fielddoc"><p>CPU mstatus CSR (11): MPP_L - Machine previous privilege mode bit low (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0" name="a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0"></a>CSR_MSTATUS_MPP_H&#160;</td><td class="fielddoc"><p>CPU mstatus CSR (12): MPP_H - Machine previous privilege mode bit high (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44" name="a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44"></a>CSR_MSTATUS_MPRV&#160;</td><td class="fielddoc"><p>CPU mstatus CSR (17): MPRV - Use MPP as effective privilege for M-mode load/stores when set (r/w) </p> +</td></tr> +<tr><td class="fieldname"><a id="a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d" name="a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d"></a>CSR_MSTATUS_TW&#160;</td><td class="fielddoc"><p>CPU mstatus CSR (21): TW - Disallow execution of wfi instruction in user mode when set (r/w) </p> +</td></tr> +</table> + +</div> +</div> +<a id="af05490a8af176ab4ba945d327d448387" name="af05490a8af176ab4ba945d327d448387"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af05490a8af176ab4ba945d327d448387">&#9670;&#160;</a></span>NEORV32_CSR_XISA_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#af05490a8af176ab4ba945d327d448387">NEORV32_CSR_XISA_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>CPU mxisa CSR (r/-): Machine extended instruction set extensions (NEORV32-specific) </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c" name="af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c"></a>CSR_MXISA_ZICSR&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (0): privileged architecture (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e" name="af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e"></a>CSR_MXISA_ZIFENCEI&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (1): instruction stream sync (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f" name="af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f"></a>CSR_MXISA_ZMMUL&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (2): hardware mul/div (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0" name="af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0"></a>CSR_MXISA_ZXCFU&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (3): custom RISC-V instructions (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a31788af612f04bc6b2a2bd15c1fb63c1" name="af05490a8af176ab4ba945d327d448387a31788af612f04bc6b2a2bd15c1fb63c1"></a>CSR_MXISA_ZKT&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (4): data independent execution time (of cryptographic operations) (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1" name="af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1"></a>CSR_MXISA_ZFINX&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (5): FPU using x registers (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e" name="af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e"></a>CSR_MXISA_ZICOND&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (6): integer conditional operations (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe" name="af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe"></a>CSR_MXISA_ZICNTR&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (7): standard instruction, cycle and time counter CSRs (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3" name="af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3"></a>CSR_MXISA_SMPMP&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (8): physical memory protection (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34" name="af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34"></a>CSR_MXISA_ZIHPM&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (9): hardware performance monitors (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5" name="af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5"></a>CSR_MXISA_SDEXT&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (10): RISC-V debug mode (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b" name="af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b"></a>CSR_MXISA_SDTRIG&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (11): RISC-V trigger module (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a34519a66e749d63dc5bc7c145c297b64" name="af05490a8af176ab4ba945d327d448387a34519a66e749d63dc5bc7c145c297b64"></a>CSR_MXISA_ZBKX&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (12): scalar cryptography - crossbar permutation (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a48f1de7f79a0633644ae02c463d49375" name="af05490a8af176ab4ba945d327d448387a48f1de7f79a0633644ae02c463d49375"></a>CSR_MXISA_ZKND&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (13): scalar cryptography - NIST AES decryption (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a216ec44d5be3b158acb7e033e352bad1" name="af05490a8af176ab4ba945d327d448387a216ec44d5be3b158acb7e033e352bad1"></a>CSR_MXISA_ZKNE&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (14): scalar cryptography - NIST AES encryption (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a5fe8e591901e0fd7ba6706c70e9c76ec" name="af05490a8af176ab4ba945d327d448387a5fe8e591901e0fd7ba6706c70e9c76ec"></a>CSR_MXISA_ZKNH&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (15): scalar cryptography - NIST hash functions (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387adb26c1e5bf6ae112625621dddd331735" name="af05490a8af176ab4ba945d327d448387adb26c1e5bf6ae112625621dddd331735"></a>CSR_MXISA_ZBKB&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (16): scalar cryptography - bit manipulation instructions (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387ac9e87153c096d656b40cb7abdf3afd55" name="af05490a8af176ab4ba945d327d448387ac9e87153c096d656b40cb7abdf3afd55"></a>CSR_MXISA_ZBKC&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (17): scalar cryptography - carry-less multiplication instructions (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387ad7e7454a30c82c3d91acbc8c259e8c25" name="af05490a8af176ab4ba945d327d448387ad7e7454a30c82c3d91acbc8c259e8c25"></a>CSR_MXISA_ZKN&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (18): scalar cryptography - NIST algorithm suite (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a5e4bf05830b66410bbf2ef2c68e5fd18" name="af05490a8af176ab4ba945d327d448387a5e4bf05830b66410bbf2ef2c68e5fd18"></a>CSR_MXISA_ZKSH&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (19): scalar cryptography - ShangMi hash functions (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a43213190abb77304a78c15196c90a044" name="af05490a8af176ab4ba945d327d448387a43213190abb77304a78c15196c90a044"></a>CSR_MXISA_ZKSED&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (20): scalar cryptography - ShangMi block cyphers (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a2649bee3397c74ada7b72677308f38c0" name="af05490a8af176ab4ba945d327d448387a2649bee3397c74ada7b72677308f38c0"></a>CSR_MXISA_ZKS&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (21): scalar cryptography - ShangMi algorithm suite (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387adfc9122d93a71bf6df178022a52d22c4" name="af05490a8af176ab4ba945d327d448387adfc9122d93a71bf6df178022a52d22c4"></a>CSR_MXISA_ZBA&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (22): shifted-add bit-manipulation operations (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a815cbe0149cba2a69025f6bec9946a85" name="af05490a8af176ab4ba945d327d448387a815cbe0149cba2a69025f6bec9946a85"></a>CSR_MXISA_ZBB&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (23): basic bit-manipulation operations (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a469e8e449f0e442df531c8cf2c4f35c5" name="af05490a8af176ab4ba945d327d448387a469e8e449f0e442df531c8cf2c4f35c5"></a>CSR_MXISA_ZBS&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (24): single-bit bit-manipulation operations (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387adf45adc0bcbec0c1ffa944099257a947" name="af05490a8af176ab4ba945d327d448387adf45adc0bcbec0c1ffa944099257a947"></a>CSR_MXISA_ZALRSC&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (25): atomic reservation-set operations (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a35543f2ac5cde6e142bca6791b7b36b1" name="af05490a8af176ab4ba945d327d448387a35543f2ac5cde6e142bca6791b7b36b1"></a>CSR_MXISA_CLKGATE&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (27): clock gating enabled (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d" name="af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d"></a>CSR_MXISA_RFHWRST&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (28): register file has full hardware reset (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64" name="af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64"></a>CSR_MXISA_FASTMUL&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (29): DSP-based multiplication (M extensions only) (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868" name="af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868"></a>CSR_MXISA_FASTSHIFT&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (30): parallel logic for shifts (barrel shifters) (r/-) </p> +</td></tr> +<tr><td class="fieldname"><a id="af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a" name="af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a"></a>CSR_MXISA_IS_SIM&#160;</td><td class="fielddoc"><p>CPU mxisa CSR (31): this might be a simulation when set (r/-) </p> +</td></tr> +</table> + +</div> +</div> +<a id="acb0fcbc551fec4c45676ff1317be24e1" name="acb0fcbc551fec4c45676ff1317be24e1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acb0fcbc551fec4c45676ff1317be24e1">&#9670;&#160;</a></span>NEORV32_EXCEPTION_CODES_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Trap codes from mcause CSR. </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee" name="acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee"></a>TRAP_CODE_I_MISALIGNED&#160;</td><td class="fielddoc"><p>0.0: Instruction address misaligned </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1" name="acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1"></a>TRAP_CODE_I_ACCESS&#160;</td><td class="fielddoc"><p>0.1: Instruction (bus) access fault </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173" name="acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173"></a>TRAP_CODE_I_ILLEGAL&#160;</td><td class="fielddoc"><p>0.2: Illegal instruction </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e" name="acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e"></a>TRAP_CODE_BREAKPOINT&#160;</td><td class="fielddoc"><p>0.3: Breakpoint (EBREAK instruction) </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9" name="acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9"></a>TRAP_CODE_L_MISALIGNED&#160;</td><td class="fielddoc"><p>0.4: Load address misaligned </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea" name="acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea"></a>TRAP_CODE_L_ACCESS&#160;</td><td class="fielddoc"><p>0.5: Load (bus) access fault </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d" name="acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d"></a>TRAP_CODE_S_MISALIGNED&#160;</td><td class="fielddoc"><p>0.6: Store address misaligned </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887" name="acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887"></a>TRAP_CODE_S_ACCESS&#160;</td><td class="fielddoc"><p>0.7: Store (bus) access fault </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02" name="acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02"></a>TRAP_CODE_UENV_CALL&#160;</td><td class="fielddoc"><p>0.8: Environment call from user mode (ECALL instruction) </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac" name="acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac"></a>TRAP_CODE_MENV_CALL&#160;</td><td class="fielddoc"><p>0.11: Environment call from machine mode (ECALL instruction) </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0" name="acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0"></a>TRAP_CODE_MSI&#160;</td><td class="fielddoc"><p>1.3: Machine software interrupt </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7" name="acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7"></a>TRAP_CODE_MTI&#160;</td><td class="fielddoc"><p>1.7: Machine timer interrupt </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0" name="acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0"></a>TRAP_CODE_MEI&#160;</td><td class="fielddoc"><p>1.11: Machine external interrupt </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1" name="acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1"></a>TRAP_CODE_FIRQ_0&#160;</td><td class="fielddoc"><p>1.16: Fast interrupt channel 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7" name="acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7"></a>TRAP_CODE_FIRQ_1&#160;</td><td class="fielddoc"><p>1.17: Fast interrupt channel 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7" name="acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7"></a>TRAP_CODE_FIRQ_2&#160;</td><td class="fielddoc"><p>1.18: Fast interrupt channel 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0" name="acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0"></a>TRAP_CODE_FIRQ_3&#160;</td><td class="fielddoc"><p>1.19: Fast interrupt channel 3 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547" name="acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547"></a>TRAP_CODE_FIRQ_4&#160;</td><td class="fielddoc"><p>1.20: Fast interrupt channel 4 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757" name="acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757"></a>TRAP_CODE_FIRQ_5&#160;</td><td class="fielddoc"><p>1.21: Fast interrupt channel 5 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473" name="acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473"></a>TRAP_CODE_FIRQ_6&#160;</td><td class="fielddoc"><p>1.22: Fast interrupt channel 6 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26" name="acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26"></a>TRAP_CODE_FIRQ_7&#160;</td><td class="fielddoc"><p>1.23: Fast interrupt channel 7 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916" name="acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916"></a>TRAP_CODE_FIRQ_8&#160;</td><td class="fielddoc"><p>1.24: Fast interrupt channel 8 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4" name="acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4"></a>TRAP_CODE_FIRQ_9&#160;</td><td class="fielddoc"><p>1.25: Fast interrupt channel 9 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42" name="acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42"></a>TRAP_CODE_FIRQ_10&#160;</td><td class="fielddoc"><p>1.26: Fast interrupt channel 10 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334" name="acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334"></a>TRAP_CODE_FIRQ_11&#160;</td><td class="fielddoc"><p>1.27: Fast interrupt channel 11 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c" name="acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c"></a>TRAP_CODE_FIRQ_12&#160;</td><td class="fielddoc"><p>1.28: Fast interrupt channel 12 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9" name="acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9"></a>TRAP_CODE_FIRQ_13&#160;</td><td class="fielddoc"><p>1.29: Fast interrupt channel 13 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e" name="acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e"></a>TRAP_CODE_FIRQ_14&#160;</td><td class="fielddoc"><p>1.30: Fast interrupt channel 14 </p> +</td></tr> +<tr><td class="fieldname"><a id="acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110" name="acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110"></a>TRAP_CODE_FIRQ_15&#160;</td><td class="fielddoc"><p>1.31: Fast interrupt channel 15 </p> +</td></tr> +</table> + +</div> +</div> +<a id="a5cb925a3e41efd5e767bb39b3ee60cfe" name="a5cb925a3e41efd5e767bb39b3ee60cfe"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5cb925a3e41efd5e767bb39b3ee60cfe">&#9670;&#160;</a></span>NEORV32_HPMCNT_EVENT_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>CPU mhpmevent hardware performance monitor events </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914" name="a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914"></a>HPMCNT_EVENT_CY&#160;</td><td class="fielddoc"><p>CPU mhpmevent CSR (0): Active cycle </p> +</td></tr> +<tr><td class="fieldname"><a id="a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640" name="a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640"></a>HPMCNT_EVENT_TM&#160;</td><td class="fielddoc"><p>CPU mhpmevent CSR (1): Reserved </p> +</td></tr> +<tr><td class="fieldname"><a id="a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4" name="a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4"></a>HPMCNT_EVENT_IR&#160;</td><td class="fielddoc"><p>CPU mhpmevent CSR (2): Retired instruction </p> +</td></tr> +<tr><td class="fieldname"><a id="a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd" name="a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd"></a>HPMCNT_EVENT_COMPR&#160;</td><td class="fielddoc"><p>CPU mhpmevent CSR (3): Executed compressed instruction </p> +</td></tr> +<tr><td class="fieldname"><a id="a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27" name="a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27"></a>HPMCNT_EVENT_WAIT_DIS&#160;</td><td class="fielddoc"><p>CPU mhpmevent CSR (4): Instruction dispatch wait cycle </p> +</td></tr> +<tr><td class="fieldname"><a id="a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b" name="a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b"></a>HPMCNT_EVENT_WAIT_ALU&#160;</td><td class="fielddoc"><p>CPU mhpmevent CSR (5): Multi-cycle ALU co-processor wait cycle </p> +</td></tr> +<tr><td class="fieldname"><a id="a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6" name="a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6"></a>HPMCNT_EVENT_BRANCH&#160;</td><td class="fielddoc"><p>CPU mhpmevent CSR (6): Executed branch instruction </p> +</td></tr> +<tr><td class="fieldname"><a id="a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5" name="a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5"></a>HPMCNT_EVENT_BRANCHED&#160;</td><td class="fielddoc"><p>CPU mhpmevent CSR (7): Control flow transfer </p> +</td></tr> +<tr><td class="fieldname"><a id="a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91" name="a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91"></a>HPMCNT_EVENT_LOAD&#160;</td><td class="fielddoc"><p>CPU mhpmevent CSR (8): Executed load operation </p> +</td></tr> +<tr><td class="fieldname"><a id="a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2" name="a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2"></a>HPMCNT_EVENT_STORE&#160;</td><td class="fielddoc"><p>CPU mhpmevent CSR (9): Executed store operation </p> +</td></tr> +<tr><td class="fieldname"><a id="a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b" name="a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b"></a>HPMCNT_EVENT_WAIT_LSU&#160;</td><td class="fielddoc"><p>CPU mhpmevent CSR (10): Load-store unit memory wait cycle </p> +</td></tr> +<tr><td class="fieldname"><a id="a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5" name="a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5"></a>HPMCNT_EVENT_TRAP&#160;</td><td class="fielddoc"><p>CPU mhpmevent CSR (11): Entered trap </p> +</td></tr> +</table> + +</div> +</div> +<a id="a8f2418fb5e2175f35ee2362469ce01f5" name="a8f2418fb5e2175f35ee2362469ce01f5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8f2418fb5e2175f35ee2362469ce01f5">&#9670;&#160;</a></span>NEORV32_PMP_MODES_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a8f2418fb5e2175f35ee2362469ce01f5">NEORV32_PMP_MODES_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>PMP modes </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4" name="a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4"></a>PMP_OFF&#160;</td><td class="fielddoc"><p>'00': entry disabled </p> +</td></tr> +<tr><td class="fieldname"><a id="a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1" name="a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1"></a>PMP_TOR&#160;</td><td class="fielddoc"><p>'01': TOR mode (top of region) </p> +</td></tr> +<tr><td class="fieldname"><a id="a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892" name="a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892"></a>PMP_NA4&#160;</td><td class="fielddoc"><p>'10': Naturally-aligned power of two region (4 bytes) </p> +</td></tr> +<tr><td class="fieldname"><a id="a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820" name="a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820"></a>PMP_NAPOT&#160;</td><td class="fielddoc"><p>'11': Naturally-aligned power of two region (greater than 4 bytes ) </p> +</td></tr> +</table> + +</div> +</div> +<a id="abc0e8daad1e9beda4d9950452cc930ea" name="abc0e8daad1e9beda4d9950452cc930ea"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abc0e8daad1e9beda4d9950452cc930ea">&#9670;&#160;</a></span>NEORV32_PMPCFG_ATTRIBUTES_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#abc0e8daad1e9beda4d9950452cc930ea">NEORV32_PMPCFG_ATTRIBUTES_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>CPU pmpcfg PMP configuration attributes </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6" name="abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6"></a>PMPCFG_R&#160;</td><td class="fielddoc"><p>CPU pmpcfg attribute (0): Read </p> +</td></tr> +<tr><td class="fieldname"><a id="abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f" name="abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f"></a>PMPCFG_W&#160;</td><td class="fielddoc"><p>CPU pmpcfg attribute (1): Write </p> +</td></tr> +<tr><td class="fieldname"><a id="abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d" name="abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d"></a>PMPCFG_X&#160;</td><td class="fielddoc"><p>CPU pmpcfg attribute (2): Execute </p> +</td></tr> +<tr><td class="fieldname"><a id="abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1" name="abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1"></a>PMPCFG_A_LSB&#160;</td><td class="fielddoc"><p>CPU pmpcfg attribute (3): Mode LSB <a class="el" href="#a8f2418fb5e2175f35ee2362469ce01f5">NEORV32_PMP_MODES_enum</a> </p> +</td></tr> +<tr><td class="fieldname"><a id="abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4" name="abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4"></a>PMPCFG_A_MSB&#160;</td><td class="fielddoc"><p>CPU pmpcfg attribute (4): Mode MSB <a class="el" href="#a8f2418fb5e2175f35ee2362469ce01f5">NEORV32_PMP_MODES_enum</a> </p> +</td></tr> +<tr><td class="fieldname"><a id="abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14" name="abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14"></a>PMPCFG_L&#160;</td><td class="fielddoc"><p>CPU pmpcfg attribute (7): Locked </p> +</td></tr> +</table> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__cpu__csr_8h_source.html b/sw/neorv32__cpu__csr_8h_source.html new file mode 100644 index 0000000000..1f9f63416b --- /dev/null +++ b/sw/neorv32__cpu__csr_8h_source.html @@ -0,0 +1,788 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu_csr.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_cpu_csr.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__cpu__csr_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef neorv32_cpu_csr_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define neorv32_cpu_csr_h</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00025" data-start="{" data-end="};"> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49"> 25</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49">NEORV32_CSR_enum</a> {</div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="comment">/* floating-point unit control and status */</span></div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a"> 27</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a">CSR_FFLAGS</a> = 0x001, </div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812"> 28</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812">CSR_FRM</a> = 0x002, </div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6"> 29</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6">CSR_FCSR</a> = 0x003, </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="comment">/* machine control and status */</span></div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450"> 32</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450">CSR_MSTATUS</a> = 0x300, </div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c"> 33</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c">CSR_MISA</a> = 0x301, </div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610"> 34</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610">CSR_MIE</a> = 0x304, </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21"> 35</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21">CSR_MTVEC</a> = 0x305, </div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78"> 36</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78">CSR_MCOUNTEREN</a> = 0x306, </div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067"> 37</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067">CSR_MSTATUSH</a> = 0x310, </div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6"> 38</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6">CSR_MCOUNTINHIBIT</a> = 0x320, </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="comment">/* machine configuration */</span></div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98">CSR_MENVCFG</a> = 0x30a, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8">CSR_MENVCFGH</a> = 0x31a, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="comment">/* hardware performance monitors - event configuration */</span></div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6"> 45</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6">CSR_MHPMEVENT3</a> = 0x323, </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459"> 46</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459">CSR_MHPMEVENT4</a> = 0x324, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d">CSR_MHPMEVENT5</a> = 0x325, </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd"> 48</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd">CSR_MHPMEVENT6</a> = 0x326, </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59"> 49</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59">CSR_MHPMEVENT7</a> = 0x327, </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79"> 50</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79">CSR_MHPMEVENT8</a> = 0x328, </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632"> 51</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632">CSR_MHPMEVENT9</a> = 0x329, </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512"> 52</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512">CSR_MHPMEVENT10</a> = 0x32a, </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf"> 53</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf">CSR_MHPMEVENT11</a> = 0x32b, </div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f"> 54</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f">CSR_MHPMEVENT12</a> = 0x32c, </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6"> 55</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6">CSR_MHPMEVENT13</a> = 0x32d, </div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4"> 56</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4">CSR_MHPMEVENT14</a> = 0x32e, </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54"> 57</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54">CSR_MHPMEVENT15</a> = 0x32f, </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="comment">/* machine trap control */</span></div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004"> 60</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004">CSR_MSCRATCH</a> = 0x340, </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153"> 61</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153">CSR_MEPC</a> = 0x341, </div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b"> 62</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b">CSR_MCAUSE</a> = 0x342, </div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e"> 63</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e">CSR_MTVAL</a> = 0x343, </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c"> 64</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c">CSR_MIP</a> = 0x344, </div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8"> 65</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8">CSR_MTINST</a> = 0x34a, </div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="comment">/* physical memory protection */</span></div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f"> 68</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f">CSR_PMPCFG0</a> = 0x3a0, </div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16"> 69</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16">CSR_PMPCFG1</a> = 0x3a1, </div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446"> 70</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446">CSR_PMPCFG2</a> = 0x3a2, </div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850"> 71</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850">CSR_PMPCFG3</a> = 0x3a3, </div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f"> 73</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f">CSR_PMPADDR0</a> = 0x3b0, </div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41"> 74</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41">CSR_PMPADDR1</a> = 0x3b1, </div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50"> 75</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50">CSR_PMPADDR2</a> = 0x3b2, </div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9"> 76</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9">CSR_PMPADDR3</a> = 0x3b3, </div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507"> 77</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507">CSR_PMPADDR4</a> = 0x3b4, </div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c"> 78</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c">CSR_PMPADDR5</a> = 0x3b5, </div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444"> 79</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444">CSR_PMPADDR6</a> = 0x3b6, </div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346"> 80</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346">CSR_PMPADDR7</a> = 0x3b7, </div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b"> 81</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b">CSR_PMPADDR8</a> = 0x3b8, </div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77"> 82</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77">CSR_PMPADDR9</a> = 0x3b9, </div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60"> 83</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60">CSR_PMPADDR10</a> = 0x3ba, </div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383"> 84</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383">CSR_PMPADDR11</a> = 0x3bb, </div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b"> 85</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b">CSR_PMPADDR12</a> = 0x3bc, </div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc"> 86</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc">CSR_PMPADDR13</a> = 0x3bd, </div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8"> 87</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8">CSR_PMPADDR14</a> = 0x3be, </div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2"> 88</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2">CSR_PMPADDR15</a> = 0x3bf, </div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="comment">/* on-chip debugger - hardware trigger module */</span></div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d"> 91</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d">CSR_TSELECT</a> = 0x7a0, </div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57"> 92</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57">CSR_TDATA1</a> = 0x7a1, </div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc"> 93</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc">CSR_TDATA2</a> = 0x7a2, </div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b"> 94</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b">CSR_TINFO</a> = 0x7a4, </div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="comment">/* CPU debug mode CSRs - not accessible by software running outside of debug mode */</span></div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9"> 97</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9">CSR_DCSR</a> = 0x7b0, </div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b"> 98</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b">CSR_DPC</a> = 0x7b1, </div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7"> 99</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7">CSR_DSCRATCH0</a> = 0x7b2, </div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="comment">/* custom functions unit (CFU) registers */</span></div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f"> 102</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f">CSR_CFUREG0</a> = 0x800, </div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8"> 103</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8">CSR_CFUREG1</a> = 0x801, </div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68"> 104</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68">CSR_CFUREG2</a> = 0x802, </div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf"> 105</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf">CSR_CFUREG3</a> = 0x803, </div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="comment">/* machine counters and timers */</span></div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77"> 108</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77">CSR_MCYCLE</a> = 0xb00, </div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb"> 109</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb">CSR_MINSTRET</a> = 0xb02, </div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc"> 110</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc">CSR_MHPMCOUNTER3</a> = 0xb03, </div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9"> 111</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9">CSR_MHPMCOUNTER4</a> = 0xb04, </div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394"> 112</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394">CSR_MHPMCOUNTER5</a> = 0xb05, </div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d"> 113</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d">CSR_MHPMCOUNTER6</a> = 0xb06, </div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444"> 114</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444">CSR_MHPMCOUNTER7</a> = 0xb07, </div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79"> 115</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79">CSR_MHPMCOUNTER8</a> = 0xb08, </div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb"> 116</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb">CSR_MHPMCOUNTER9</a> = 0xb09, </div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f"> 117</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f">CSR_MHPMCOUNTER10</a> = 0xb0a, </div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5"> 118</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5">CSR_MHPMCOUNTER11</a> = 0xb0b, </div> +<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e"> 119</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e">CSR_MHPMCOUNTER12</a> = 0xb0c, </div> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0"> 120</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0">CSR_MHPMCOUNTER13</a> = 0xb0d, </div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229"> 121</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229">CSR_MHPMCOUNTER14</a> = 0xb0e, </div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff"> 122</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff">CSR_MHPMCOUNTER15</a> = 0xb0f, </div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b"> 124</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b">CSR_MCYCLEH</a> = 0xb80, </div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988"> 125</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988">CSR_MINSTRETH</a> = 0xb82, </div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25"> 126</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25">CSR_MHPMCOUNTER3H</a> = 0xb83, </div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85"> 127</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85">CSR_MHPMCOUNTER4H</a> = 0xb84, </div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599"> 128</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599">CSR_MHPMCOUNTER5H</a> = 0xb85, </div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77"> 129</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77">CSR_MHPMCOUNTER6H</a> = 0xb86, </div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a"> 130</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a">CSR_MHPMCOUNTER7H</a> = 0xb87, </div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc"> 131</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc">CSR_MHPMCOUNTER8H</a> = 0xb88, </div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8"> 132</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8">CSR_MHPMCOUNTER9H</a> = 0xb89, </div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd"> 133</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd">CSR_MHPMCOUNTER10H</a> = 0xb8a, </div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071"> 134</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071">CSR_MHPMCOUNTER11H</a> = 0xb8b, </div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2"> 135</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2">CSR_MHPMCOUNTER12H</a> = 0xb8c, </div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d"> 136</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d">CSR_MHPMCOUNTER13H</a> = 0xb8d, </div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa"> 137</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa">CSR_MHPMCOUNTER14H</a> = 0xb8e, </div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46"> 138</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46">CSR_MHPMCOUNTER15H</a> = 0xb8f, </div> +<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="comment">/* user counters and timers */</span></div> +<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e"> 141</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e">CSR_CYCLE</a> = 0xc00, </div> +<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66"> 142</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66">CSR_INSTRET</a> = 0xc02, </div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db"> 144</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db">CSR_CYCLEH</a> = 0xc80, </div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153"> 145</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153">CSR_INSTRETH</a> = 0xc82, </div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="comment">/* machine information registers */</span></div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b"> 148</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b">CSR_MVENDORID</a> = 0xf11, </div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4"> 149</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4">CSR_MARCHID</a> = 0xf12, </div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd"> 150</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd">CSR_MIMPID</a> = 0xf13, </div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790"> 151</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790">CSR_MHARTID</a> = 0xf14, </div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9"> 152</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9">CSR_MCONFIGPTR</a> = 0xf15, </div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2">CSR_MXISA</a> = 0xfc0 </div> +<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2"> 154</a></span>};</div> +</div> +<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div> +<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00160" data-start="{" data-end="};"> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204b"> 160</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204b">NEORV32_CSR_FFLAGS_enum</a> {</div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6"> 161</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6">CSR_FFLAGS_NX</a> = 0, </div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819"> 162</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819">CSR_FFLAGS_UF</a> = 1, </div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e"> 163</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e">CSR_FFLAGS_OF</a> = 2, </div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b"> 164</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b">CSR_FFLAGS_DZ</a> = 3, </div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165">CSR_FFLAGS_NV</a> = 4 </div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165"> 166</a></span>};</div> +</div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div> +<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div> +<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00172" data-start="{" data-end="};"> +<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500"> 172</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500">NEORV32_CSR_MCOUNTEREN_enum</a> {</div> +<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a3d0c8ff6ba2c557cb5b5d353bdb95790"> 173</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a3d0c8ff6ba2c557cb5b5d353bdb95790">CSR_MCOUNTEREN_CY</a> = 0, </div> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a97e36c94b71fa2f9a805bbe47b0bc1b5">CSR_MCOUNTEREN_IR</a> = 2 </div> +<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a97e36c94b71fa2f9a805bbe47b0bc1b5"> 175</a></span>};</div> +</div> +<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div> +<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00181" data-start="{" data-end="};"> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485"> 181</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485">NEORV32_CSR_MSTATUS_enum</a> {</div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56"> 182</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56">CSR_MSTATUS_MIE</a> = 3, </div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34"> 183</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34">CSR_MSTATUS_MPIE</a> = 7, </div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97"> 184</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97">CSR_MSTATUS_MPP_L</a> = 11, </div> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0"> 185</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0">CSR_MSTATUS_MPP_H</a> = 12, </div> +<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44"> 186</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44">CSR_MSTATUS_MPRV</a> = 17, </div> +<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d">CSR_MSTATUS_TW</a> = 21 </div> +<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d"> 188</a></span>};</div> +</div> +<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> </div> +<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> </div> +<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00194" data-start="{" data-end="};"> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfe"> 194</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfe">NEORV32_CSR_MCOUNTINHIBIT_enum</a> {</div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3"> 195</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3">CSR_MCOUNTINHIBIT_CY</a> = 0, </div> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa"> 196</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa">CSR_MCOUNTINHIBIT_IR</a> = 2, </div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752"> 198</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752">CSR_MCOUNTINHIBIT_HPM3</a> = 3, </div> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d"> 199</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d">CSR_MCOUNTINHIBIT_HPM4</a> = 4, </div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6"> 200</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6">CSR_MCOUNTINHIBIT_HPM5</a> = 5, </div> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db"> 201</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db">CSR_MCOUNTINHIBIT_HPM6</a> = 6, </div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab"> 202</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab">CSR_MCOUNTINHIBIT_HPM7</a> = 7, </div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a"> 203</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a">CSR_MCOUNTINHIBIT_HPM8</a> = 8, </div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a"> 204</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a">CSR_MCOUNTINHIBIT_HPM9</a> = 9, </div> +<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e"> 205</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e">CSR_MCOUNTINHIBIT_HPM10</a> = 10, </div> +<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806"> 206</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806">CSR_MCOUNTINHIBIT_HPM11</a> = 11, </div> +<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486"> 207</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486">CSR_MCOUNTINHIBIT_HPM12</a> = 12, </div> +<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed"> 208</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed">CSR_MCOUNTINHIBIT_HPM13</a> = 13, </div> +<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987"> 209</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987">CSR_MCOUNTINHIBIT_HPM14</a> = 14, </div> +<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085"> 210</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085">CSR_MCOUNTINHIBIT_HPM15</a> = 15, </div> +<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4"> 211</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4">CSR_MCOUNTINHIBIT_HPM16</a> = 16, </div> +<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3"> 212</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3">CSR_MCOUNTINHIBIT_HPM17</a> = 17, </div> +<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0"> 213</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0">CSR_MCOUNTINHIBIT_HPM18</a> = 18, </div> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc"> 214</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc">CSR_MCOUNTINHIBIT_HPM19</a> = 19, </div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca"> 215</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca">CSR_MCOUNTINHIBIT_HPM20</a> = 20, </div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38"> 216</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38">CSR_MCOUNTINHIBIT_HPM21</a> = 21, </div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e"> 217</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e">CSR_MCOUNTINHIBIT_HPM22</a> = 22, </div> +<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904"> 218</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904">CSR_MCOUNTINHIBIT_HPM23</a> = 23, </div> +<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1"> 219</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1">CSR_MCOUNTINHIBIT_HPM24</a> = 24, </div> +<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46"> 220</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46">CSR_MCOUNTINHIBIT_HPM25</a> = 25, </div> +<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74"> 221</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74">CSR_MCOUNTINHIBIT_HPM26</a> = 26, </div> +<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db"> 222</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db">CSR_MCOUNTINHIBIT_HPM27</a> = 27, </div> +<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32"> 223</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32">CSR_MCOUNTINHIBIT_HPM28</a> = 28, </div> +<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382"> 224</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382">CSR_MCOUNTINHIBIT_HPM29</a> = 29, </div> +<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7"> 225</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7">CSR_MCOUNTINHIBIT_HPM30</a> = 30, </div> +<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05">CSR_MCOUNTINHIBIT_HPM31</a> = 31 </div> +<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05"> 227</a></span>};</div> +</div> +<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div> +<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> </div> +<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00233" data-start="{" data-end="};"> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33"> 233</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a> {</div> +<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a"> 234</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a">CSR_MIE_MSIE</a> = 3, </div> +<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083"> 235</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083">CSR_MIE_MTIE</a> = 7, </div> +<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324"> 236</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324">CSR_MIE_MEIE</a> = 11, </div> +<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="comment">/* NEORV32-specific extension: Fast Interrupt Requests (FIRQ) */</span></div> +<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d"> 239</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d">CSR_MIE_FIRQ0E</a> = 16, </div> +<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb"> 240</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb">CSR_MIE_FIRQ1E</a> = 17, </div> +<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7"> 241</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7">CSR_MIE_FIRQ2E</a> = 18, </div> +<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db"> 242</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db">CSR_MIE_FIRQ3E</a> = 19, </div> +<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc"> 243</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc">CSR_MIE_FIRQ4E</a> = 20, </div> +<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698"> 244</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698">CSR_MIE_FIRQ5E</a> = 21, </div> +<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a"> 245</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a">CSR_MIE_FIRQ6E</a> = 22, </div> +<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8"> 246</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8">CSR_MIE_FIRQ7E</a> = 23, </div> +<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e"> 247</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e">CSR_MIE_FIRQ8E</a> = 24, </div> +<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19"> 248</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19">CSR_MIE_FIRQ9E</a> = 25, </div> +<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a"> 249</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a">CSR_MIE_FIRQ10E</a> = 26, </div> +<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd"> 250</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd">CSR_MIE_FIRQ11E</a> = 27, </div> +<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943"> 251</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943">CSR_MIE_FIRQ12E</a> = 28, </div> +<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f"> 252</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f">CSR_MIE_FIRQ13E</a> = 29, </div> +<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b"> 253</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b">CSR_MIE_FIRQ14E</a> = 30, </div> +<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1">CSR_MIE_FIRQ15E</a> = 31 </div> +<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1"> 255</a></span>};</div> +</div> +<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> </div> +<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div> +<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00261" data-start="{" data-end="};"> +<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b"> 261</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a> {</div> +<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159"> 262</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159">CSR_MIP_MSIP</a> = 3, </div> +<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4"> 263</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4">CSR_MIP_MTIP</a> = 7, </div> +<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872"> 264</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872">CSR_MIP_MEIP</a> = 11, </div> +<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="comment">/* NEORV32-specific extension: Fast Interrupt Requests (FIRQ) */</span></div> +<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00"> 267</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00">CSR_MIP_FIRQ0P</a> = 16, </div> +<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52"> 268</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52">CSR_MIP_FIRQ1P</a> = 17, </div> +<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e"> 269</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e">CSR_MIP_FIRQ2P</a> = 18, </div> +<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155"> 270</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155">CSR_MIP_FIRQ3P</a> = 19, </div> +<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8"> 271</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8">CSR_MIP_FIRQ4P</a> = 20, </div> +<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677"> 272</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677">CSR_MIP_FIRQ5P</a> = 21, </div> +<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e"> 273</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e">CSR_MIP_FIRQ6P</a> = 22, </div> +<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a"> 274</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a">CSR_MIP_FIRQ7P</a> = 23, </div> +<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580"> 275</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580">CSR_MIP_FIRQ8P</a> = 24, </div> +<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e"> 276</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e">CSR_MIP_FIRQ9P</a> = 25, </div> +<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba"> 277</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba">CSR_MIP_FIRQ10P</a> = 26, </div> +<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544"> 278</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544">CSR_MIP_FIRQ11P</a> = 27, </div> +<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792"> 279</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792">CSR_MIP_FIRQ12P</a> = 28, </div> +<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570"> 280</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570">CSR_MIP_FIRQ13P</a> = 29, </div> +<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d"> 281</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d">CSR_MIP_FIRQ14P</a> = 30, </div> +<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d">CSR_MIP_FIRQ15P</a> = 31 </div> +<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d"> 283</a></span>};</div> +</div> +<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> </div> +<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> </div> +<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00289" data-start="{" data-end="};"> +<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830c"> 289</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830c">NEORV32_CSR_MISA_enum</a> {</div> +<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad"> 290</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad">CSR_MISA_B</a> = 1, </div> +<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa"> 291</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa">CSR_MISA_C</a> = 2, </div> +<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec"> 292</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec">CSR_MISA_E</a> = 4, </div> +<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca"> 293</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca">CSR_MISA_I</a> = 8, </div> +<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b"> 294</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b">CSR_MISA_M</a> = 12, </div> +<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb"> 295</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb">CSR_MISA_U</a> = 20, </div> +<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193"> 296</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193">CSR_MISA_X</a> = 23, </div> +<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138"> 297</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138">CSR_MISA_MXL_LO</a> = 30, </div> +<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc">CSR_MISA_MXL_HI</a> = 31 </div> +<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc"> 299</a></span>};</div> +</div> +<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div> +<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> </div> +<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00305" data-start="{" data-end="};"> +<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387"> 305</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387">NEORV32_CSR_XISA_enum</a> {</div> +<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <span class="comment">// ISA (sub-)extensions</span></div> +<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c"> 307</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c">CSR_MXISA_ZICSR</a> = 0, </div> +<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e"> 308</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e">CSR_MXISA_ZIFENCEI</a> = 1, </div> +<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f"> 309</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f">CSR_MXISA_ZMMUL</a> = 2, </div> +<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0"> 310</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0">CSR_MXISA_ZXCFU</a> = 3, </div> +<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a31788af612f04bc6b2a2bd15c1fb63c1"> 311</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a31788af612f04bc6b2a2bd15c1fb63c1">CSR_MXISA_ZKT</a> = 4, </div> +<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1"> 312</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1">CSR_MXISA_ZFINX</a> = 5, </div> +<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e"> 313</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e">CSR_MXISA_ZICOND</a> = 6, </div> +<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe"> 314</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe">CSR_MXISA_ZICNTR</a> = 7, </div> +<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3"> 315</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3">CSR_MXISA_SMPMP</a> = 8, </div> +<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34"> 316</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34">CSR_MXISA_ZIHPM</a> = 9, </div> +<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5"> 317</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5">CSR_MXISA_SDEXT</a> = 10, </div> +<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b"> 318</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b">CSR_MXISA_SDTRIG</a> = 11, </div> +<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a34519a66e749d63dc5bc7c145c297b64"> 319</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a34519a66e749d63dc5bc7c145c297b64">CSR_MXISA_ZBKX</a> = 12, </div> +<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48f1de7f79a0633644ae02c463d49375"> 320</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48f1de7f79a0633644ae02c463d49375">CSR_MXISA_ZKND</a> = 13, </div> +<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a216ec44d5be3b158acb7e033e352bad1"> 321</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a216ec44d5be3b158acb7e033e352bad1">CSR_MXISA_ZKNE</a> = 14, </div> +<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5fe8e591901e0fd7ba6706c70e9c76ec"> 322</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5fe8e591901e0fd7ba6706c70e9c76ec">CSR_MXISA_ZKNH</a> = 15, </div> +<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adb26c1e5bf6ae112625621dddd331735"> 323</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adb26c1e5bf6ae112625621dddd331735">CSR_MXISA_ZBKB</a> = 16, </div> +<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac9e87153c096d656b40cb7abdf3afd55"> 324</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac9e87153c096d656b40cb7abdf3afd55">CSR_MXISA_ZBKC</a> = 17, </div> +<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad7e7454a30c82c3d91acbc8c259e8c25"> 325</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad7e7454a30c82c3d91acbc8c259e8c25">CSR_MXISA_ZKN</a> = 18, </div> +<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5e4bf05830b66410bbf2ef2c68e5fd18"> 326</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5e4bf05830b66410bbf2ef2c68e5fd18">CSR_MXISA_ZKSH</a> = 19, </div> +<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a43213190abb77304a78c15196c90a044"> 327</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a43213190abb77304a78c15196c90a044">CSR_MXISA_ZKSED</a> = 20, </div> +<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a2649bee3397c74ada7b72677308f38c0"> 328</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a2649bee3397c74ada7b72677308f38c0">CSR_MXISA_ZKS</a> = 21, </div> +<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adfc9122d93a71bf6df178022a52d22c4"> 329</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adfc9122d93a71bf6df178022a52d22c4">CSR_MXISA_ZBA</a> = 22, </div> +<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a815cbe0149cba2a69025f6bec9946a85"> 330</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a815cbe0149cba2a69025f6bec9946a85">CSR_MXISA_ZBB</a> = 23, </div> +<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a469e8e449f0e442df531c8cf2c4f35c5"> 331</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a469e8e449f0e442df531c8cf2c4f35c5">CSR_MXISA_ZBS</a> = 24, </div> +<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adf45adc0bcbec0c1ffa944099257a947"> 332</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adf45adc0bcbec0c1ffa944099257a947">CSR_MXISA_ZALRSC</a> = 25, </div> +<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="comment">// Tuning options</span></div> +<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a35543f2ac5cde6e142bca6791b7b36b1"> 334</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a35543f2ac5cde6e142bca6791b7b36b1">CSR_MXISA_CLKGATE</a> = 27, </div> +<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d"> 335</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d">CSR_MXISA_RFHWRST</a> = 28, </div> +<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64"> 336</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64">CSR_MXISA_FASTMUL</a> = 29, </div> +<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868"> 337</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868">CSR_MXISA_FASTSHIFT</a> = 30, </div> +<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="comment">// Misc</span></div> +<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a">CSR_MXISA_IS_SIM</a> = 31 </div> +<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a"> 340</a></span>};</div> +</div> +<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> </div> +<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> </div> +<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00346" data-start="{" data-end="};"> +<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfe"> 346</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a> {</div> +<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914"> 347</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914">HPMCNT_EVENT_CY</a> = 0, </div> +<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640"> 348</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640">HPMCNT_EVENT_TM</a> = 1, </div> +<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4"> 349</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4">HPMCNT_EVENT_IR</a> = 2, </div> +<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd"> 350</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd">HPMCNT_EVENT_COMPR</a> = 3, </div> +<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27"> 351</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27">HPMCNT_EVENT_WAIT_DIS</a> = 4, </div> +<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b"> 352</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b">HPMCNT_EVENT_WAIT_ALU</a> = 5, </div> +<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6"> 353</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6">HPMCNT_EVENT_BRANCH</a> = 6, </div> +<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5"> 354</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5">HPMCNT_EVENT_BRANCHED</a> = 7, </div> +<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91"> 355</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91">HPMCNT_EVENT_LOAD</a> = 8, </div> +<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2"> 356</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2">HPMCNT_EVENT_STORE</a> = 9, </div> +<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b"> 357</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b">HPMCNT_EVENT_WAIT_LSU</a> = 10, </div> +<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5">HPMCNT_EVENT_TRAP</a> = 11 </div> +<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5"> 359</a></span>};</div> +</div> +<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> </div> +<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> </div> +<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00365" data-start="{" data-end="};"> +<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930ea"> 365</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930ea">NEORV32_PMPCFG_ATTRIBUTES_enum</a> {</div> +<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6"> 366</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6">PMPCFG_R</a> = 0, </div> +<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f"> 367</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f">PMPCFG_W</a> = 1, </div> +<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d"> 368</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d">PMPCFG_X</a> = 2, </div> +<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1"> 369</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1">PMPCFG_A_LSB</a> = 3, </div> +<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4"> 370</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4">PMPCFG_A_MSB</a> = 4, </div> +<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14">PMPCFG_L</a> = 7 </div> +<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14"> 372</a></span>};</div> +</div> +<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> </div> +<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00377" data-start="{" data-end="};"> +<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5"> 377</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5">NEORV32_PMP_MODES_enum</a> {</div> +<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4"> 378</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4">PMP_OFF</a> = 0, </div> +<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1"> 379</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1">PMP_TOR</a> = 1, </div> +<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892"> 380</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892">PMP_NA4</a> = 2, </div> +<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820">PMP_NAPOT</a> = 3 </div> +<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820"> 382</a></span>};</div> +</div> +<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> </div> +<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> </div> +<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00388" data-start="{" data-end="};"> +<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1"> 388</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a> {</div> +<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee"> 389</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee">TRAP_CODE_I_MISALIGNED</a> = 0x00000000U, </div> +<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1"> 390</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1">TRAP_CODE_I_ACCESS</a> = 0x00000001U, </div> +<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173"> 391</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173">TRAP_CODE_I_ILLEGAL</a> = 0x00000002U, </div> +<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e"> 392</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e">TRAP_CODE_BREAKPOINT</a> = 0x00000003U, </div> +<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9"> 393</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9">TRAP_CODE_L_MISALIGNED</a> = 0x00000004U, </div> +<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea"> 394</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea">TRAP_CODE_L_ACCESS</a> = 0x00000005U, </div> +<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d"> 395</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d">TRAP_CODE_S_MISALIGNED</a> = 0x00000006U, </div> +<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887"> 396</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887">TRAP_CODE_S_ACCESS</a> = 0x00000007U, </div> +<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02"> 397</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02">TRAP_CODE_UENV_CALL</a> = 0x00000008U, </div> +<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac"> 398</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac">TRAP_CODE_MENV_CALL</a> = 0x0000000bU, </div> +<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0"> 399</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0">TRAP_CODE_MSI</a> = 0x80000003U, </div> +<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7"> 400</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7">TRAP_CODE_MTI</a> = 0x80000007U, </div> +<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0"> 401</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0">TRAP_CODE_MEI</a> = 0x8000000bU, </div> +<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1"> 402</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1">TRAP_CODE_FIRQ_0</a> = 0x80000010U, </div> +<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7"> 403</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7">TRAP_CODE_FIRQ_1</a> = 0x80000011U, </div> +<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7"> 404</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7">TRAP_CODE_FIRQ_2</a> = 0x80000012U, </div> +<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0"> 405</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0">TRAP_CODE_FIRQ_3</a> = 0x80000013U, </div> +<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547"> 406</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547">TRAP_CODE_FIRQ_4</a> = 0x80000014U, </div> +<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757"> 407</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757">TRAP_CODE_FIRQ_5</a> = 0x80000015U, </div> +<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473"> 408</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473">TRAP_CODE_FIRQ_6</a> = 0x80000016U, </div> +<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26"> 409</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26">TRAP_CODE_FIRQ_7</a> = 0x80000017U, </div> +<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916"> 410</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916">TRAP_CODE_FIRQ_8</a> = 0x80000018U, </div> +<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4"> 411</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4">TRAP_CODE_FIRQ_9</a> = 0x80000019U, </div> +<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42"> 412</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42">TRAP_CODE_FIRQ_10</a> = 0x8000001aU, </div> +<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334"> 413</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334">TRAP_CODE_FIRQ_11</a> = 0x8000001bU, </div> +<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c"> 414</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c">TRAP_CODE_FIRQ_12</a> = 0x8000001cU, </div> +<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9"> 415</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9">TRAP_CODE_FIRQ_13</a> = 0x8000001dU, </div> +<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e"> 416</a></span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e">TRAP_CODE_FIRQ_14</a> = 0x8000001eU, </div> +<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <a class="code hl_enumvalue" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110">TRAP_CODE_FIRQ_15</a> = 0x8000001fU </div> +<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"><a class="line" href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110"> 418</a></span>};</div> +</div> +<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> </div> +<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> </div> +<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_cpu_csr_h</span></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a></div><div class="ttdeci">NEORV32_CSR_MIE_enum</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:233</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19">CSR_MIE_FIRQ9E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ9E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:248</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f">CSR_MIE_FIRQ13E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ13E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:252</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698">CSR_MIE_FIRQ5E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ5E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:244</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083">CSR_MIE_MTIE</a></div><div class="ttdeci">@ CSR_MIE_MTIE</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:235</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e">CSR_MIE_FIRQ8E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ8E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:247</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8">CSR_MIE_FIRQ7E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ7E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:246</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943">CSR_MIE_FIRQ12E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ12E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:251</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc">CSR_MIE_FIRQ4E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ4E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:243</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db">CSR_MIE_FIRQ3E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ3E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:242</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b">CSR_MIE_FIRQ14E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ14E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:253</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a">CSR_MIE_FIRQ6E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ6E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:245</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d">CSR_MIE_FIRQ0E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ0E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:239</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1">CSR_MIE_FIRQ15E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ15E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:254</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb">CSR_MIE_FIRQ1E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ1E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:240</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324">CSR_MIE_MEIE</a></div><div class="ttdeci">@ CSR_MIE_MEIE</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:236</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd">CSR_MIE_FIRQ11E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ11E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:250</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7">CSR_MIE_FIRQ2E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ2E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:241</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a">CSR_MIE_MSIE</a></div><div class="ttdeci">@ CSR_MIE_MSIE</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:234</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a">CSR_MIE_FIRQ10E</a></div><div class="ttdeci">@ CSR_MIE_FIRQ10E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:249</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a5cb925a3e41efd5e767bb39b3ee60cfe"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfe">NEORV32_HPMCNT_EVENT_enum</a></div><div class="ttdeci">NEORV32_HPMCNT_EVENT_enum</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:346</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5">HPMCNT_EVENT_BRANCHED</a></div><div class="ttdeci">@ HPMCNT_EVENT_BRANCHED</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:354</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91">HPMCNT_EVENT_LOAD</a></div><div class="ttdeci">@ HPMCNT_EVENT_LOAD</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:355</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914">HPMCNT_EVENT_CY</a></div><div class="ttdeci">@ HPMCNT_EVENT_CY</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:347</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5">HPMCNT_EVENT_TRAP</a></div><div class="ttdeci">@ HPMCNT_EVENT_TRAP</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:358</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640">HPMCNT_EVENT_TM</a></div><div class="ttdeci">@ HPMCNT_EVENT_TM</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:348</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b">HPMCNT_EVENT_WAIT_LSU</a></div><div class="ttdeci">@ HPMCNT_EVENT_WAIT_LSU</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:357</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd">HPMCNT_EVENT_COMPR</a></div><div class="ttdeci">@ HPMCNT_EVENT_COMPR</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:350</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2">HPMCNT_EVENT_STORE</a></div><div class="ttdeci">@ HPMCNT_EVENT_STORE</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:356</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6">HPMCNT_EVENT_BRANCH</a></div><div class="ttdeci">@ HPMCNT_EVENT_BRANCH</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:353</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4">HPMCNT_EVENT_IR</a></div><div class="ttdeci">@ HPMCNT_EVENT_IR</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:349</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27">HPMCNT_EVENT_WAIT_DIS</a></div><div class="ttdeci">@ HPMCNT_EVENT_WAIT_DIS</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:351</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b">HPMCNT_EVENT_WAIT_ALU</a></div><div class="ttdeci">@ HPMCNT_EVENT_WAIT_ALU</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:352</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a></div><div class="ttdeci">NEORV32_CSR_MIP_enum</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:261</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792">CSR_MIP_FIRQ12P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ12P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:279</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d">CSR_MIP_FIRQ15P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ15P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:282</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159">CSR_MIP_MSIP</a></div><div class="ttdeci">@ CSR_MIP_MSIP</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:262</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570">CSR_MIP_FIRQ13P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ13P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:280</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872">CSR_MIP_MEIP</a></div><div class="ttdeci">@ CSR_MIP_MEIP</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:264</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00">CSR_MIP_FIRQ0P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ0P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:267</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba">CSR_MIP_FIRQ10P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ10P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:277</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52">CSR_MIP_FIRQ1P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ1P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:268</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4">CSR_MIP_MTIP</a></div><div class="ttdeci">@ CSR_MIP_MTIP</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:263</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544">CSR_MIP_FIRQ11P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ11P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:278</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155">CSR_MIP_FIRQ3P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ3P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:270</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677">CSR_MIP_FIRQ5P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ5P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:272</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d">CSR_MIP_FIRQ14P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ14P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:281</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a">CSR_MIP_FIRQ7P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ7P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:274</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8">CSR_MIP_FIRQ4P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ4P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:271</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e">CSR_MIP_FIRQ9P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ9P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:276</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e">CSR_MIP_FIRQ2P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ2P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:269</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580">CSR_MIP_FIRQ8P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ8P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:275</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e">CSR_MIP_FIRQ6P</a></div><div class="ttdeci">@ CSR_MIP_FIRQ6P</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:273</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6d3c6aaee79b679e954c54563d7ee500"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500">NEORV32_CSR_MCOUNTEREN_enum</a></div><div class="ttdeci">NEORV32_CSR_MCOUNTEREN_enum</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:172</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6d3c6aaee79b679e954c54563d7ee500a3d0c8ff6ba2c557cb5b5d353bdb95790"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a3d0c8ff6ba2c557cb5b5d353bdb95790">CSR_MCOUNTEREN_CY</a></div><div class="ttdeci">@ CSR_MCOUNTEREN_CY</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:173</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a6d3c6aaee79b679e954c54563d7ee500a97e36c94b71fa2f9a805bbe47b0bc1b5"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a97e36c94b71fa2f9a805bbe47b0bc1b5">CSR_MCOUNTEREN_IR</a></div><div class="ttdeci">@ CSR_MCOUNTEREN_IR</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:174</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a76b70a2334131e7589d84c1ee96de485"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485">NEORV32_CSR_MSTATUS_enum</a></div><div class="ttdeci">NEORV32_CSR_MSTATUS_enum</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:181</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44">CSR_MSTATUS_MPRV</a></div><div class="ttdeci">@ CSR_MSTATUS_MPRV</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:186</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0">CSR_MSTATUS_MPP_H</a></div><div class="ttdeci">@ CSR_MSTATUS_MPP_H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:185</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34">CSR_MSTATUS_MPIE</a></div><div class="ttdeci">@ CSR_MSTATUS_MPIE</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:183</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d">CSR_MSTATUS_TW</a></div><div class="ttdeci">@ CSR_MSTATUS_TW</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:187</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56">CSR_MSTATUS_MIE</a></div><div class="ttdeci">@ CSR_MSTATUS_MIE</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:182</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97">CSR_MSTATUS_MPP_L</a></div><div class="ttdeci">@ CSR_MSTATUS_MPP_L</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:184</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a8f2418fb5e2175f35ee2362469ce01f5"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5">NEORV32_PMP_MODES_enum</a></div><div class="ttdeci">NEORV32_PMP_MODES_enum</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:377</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4">PMP_OFF</a></div><div class="ttdeci">@ PMP_OFF</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:378</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1">PMP_TOR</a></div><div class="ttdeci">@ PMP_TOR</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:379</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892">PMP_NA4</a></div><div class="ttdeci">@ PMP_NA4</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:380</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820">PMP_NAPOT</a></div><div class="ttdeci">@ PMP_NAPOT</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:381</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfe"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfe">NEORV32_CSR_MCOUNTINHIBIT_enum</a></div><div class="ttdeci">NEORV32_CSR_MCOUNTINHIBIT_enum</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:194</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085">CSR_MCOUNTINHIBIT_HPM15</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM15</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:210</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a">CSR_MCOUNTINHIBIT_HPM9</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM9</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:204</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7">CSR_MCOUNTINHIBIT_HPM30</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM30</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:225</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74">CSR_MCOUNTINHIBIT_HPM26</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM26</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:221</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05">CSR_MCOUNTINHIBIT_HPM31</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM31</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:226</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38">CSR_MCOUNTINHIBIT_HPM21</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM21</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:216</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3">CSR_MCOUNTINHIBIT_CY</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_CY</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:195</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6">CSR_MCOUNTINHIBIT_HPM5</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM5</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:200</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32">CSR_MCOUNTINHIBIT_HPM28</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM28</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:223</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc">CSR_MCOUNTINHIBIT_HPM19</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM19</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:214</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab">CSR_MCOUNTINHIBIT_HPM7</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM7</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:202</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d">CSR_MCOUNTINHIBIT_HPM4</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM4</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:199</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db">CSR_MCOUNTINHIBIT_HPM27</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM27</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:222</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa">CSR_MCOUNTINHIBIT_IR</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_IR</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:196</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4">CSR_MCOUNTINHIBIT_HPM16</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM16</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:211</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1">CSR_MCOUNTINHIBIT_HPM24</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM24</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:219</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904">CSR_MCOUNTINHIBIT_HPM23</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM23</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:218</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3">CSR_MCOUNTINHIBIT_HPM17</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM17</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:212</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486">CSR_MCOUNTINHIBIT_HPM12</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM12</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:207</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e">CSR_MCOUNTINHIBIT_HPM10</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM10</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:205</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382">CSR_MCOUNTINHIBIT_HPM29</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM29</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:224</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0">CSR_MCOUNTINHIBIT_HPM18</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM18</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:213</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987">CSR_MCOUNTINHIBIT_HPM14</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM14</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:209</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a">CSR_MCOUNTINHIBIT_HPM8</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM8</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:203</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806">CSR_MCOUNTINHIBIT_HPM11</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM11</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:206</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db">CSR_MCOUNTINHIBIT_HPM6</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM6</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:201</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed">CSR_MCOUNTINHIBIT_HPM13</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM13</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:208</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca">CSR_MCOUNTINHIBIT_HPM20</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM20</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:215</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46">CSR_MCOUNTINHIBIT_HPM25</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM25</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:220</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e">CSR_MCOUNTINHIBIT_HPM22</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM22</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:217</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752">CSR_MCOUNTINHIBIT_HPM3</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT_HPM3</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:198</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_abc0e8daad1e9beda4d9950452cc930ea"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930ea">NEORV32_PMPCFG_ATTRIBUTES_enum</a></div><div class="ttdeci">NEORV32_PMPCFG_ATTRIBUTES_enum</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:365</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14">PMPCFG_L</a></div><div class="ttdeci">@ PMPCFG_L</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:371</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4">PMPCFG_A_MSB</a></div><div class="ttdeci">@ PMPCFG_A_MSB</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:370</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f">PMPCFG_W</a></div><div class="ttdeci">@ PMPCFG_W</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:367</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1">PMPCFG_A_LSB</a></div><div class="ttdeci">@ PMPCFG_A_LSB</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:369</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6">PMPCFG_R</a></div><div class="ttdeci">@ PMPCFG_R</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:366</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d">PMPCFG_X</a></div><div class="ttdeci">@ PMPCFG_X</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:368</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49">NEORV32_CSR_enum</a></div><div class="ttdeci">NEORV32_CSR_enum</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:25</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9">CSR_MCONFIGPTR</a></div><div class="ttdeci">@ CSR_MCONFIGPTR</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:152</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850">CSR_PMPCFG3</a></div><div class="ttdeci">@ CSR_PMPCFG3</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:71</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd">CSR_MIMPID</a></div><div class="ttdeci">@ CSR_MIMPID</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:150</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54">CSR_MHPMEVENT15</a></div><div class="ttdeci">@ CSR_MHPMEVENT15</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:57</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446">CSR_PMPCFG2</a></div><div class="ttdeci">@ CSR_PMPCFG2</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:70</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7">CSR_DSCRATCH0</a></div><div class="ttdeci">@ CSR_DSCRATCH0</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:99</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e">CSR_MHPMCOUNTER12</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER12</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:119</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78">CSR_MCOUNTEREN</a></div><div class="ttdeci">@ CSR_MCOUNTEREN</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:36</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb">CSR_MHPMCOUNTER9</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER9</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:116</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd">CSR_MHPMEVENT6</a></div><div class="ttdeci">@ CSR_MHPMEVENT6</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:48</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd">CSR_MHPMCOUNTER10H</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER10H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:133</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff">CSR_MHPMCOUNTER15</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER15</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:122</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16">CSR_PMPCFG1</a></div><div class="ttdeci">@ CSR_PMPCFG1</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:69</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b">CSR_PMPADDR12</a></div><div class="ttdeci">@ CSR_PMPADDR12</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:85</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512">CSR_MHPMEVENT10</a></div><div class="ttdeci">@ CSR_MHPMEVENT10</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:52</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d">CSR_MHPMEVENT5</a></div><div class="ttdeci">@ CSR_MHPMEVENT5</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:47</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25">CSR_MHPMCOUNTER3H</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER3H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:126</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b">CSR_MCYCLEH</a></div><div class="ttdeci">@ CSR_MCYCLEH</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:124</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b">CSR_MCAUSE</a></div><div class="ttdeci">@ CSR_MCAUSE</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:62</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59">CSR_MHPMEVENT7</a></div><div class="ttdeci">@ CSR_MHPMEVENT7</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:49</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85">CSR_MHPMCOUNTER4H</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER4H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:127</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc">CSR_PMPADDR13</a></div><div class="ttdeci">@ CSR_PMPADDR13</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:86</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77">CSR_MCYCLE</a></div><div class="ttdeci">@ CSR_MCYCLE</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:108</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2">CSR_MHPMCOUNTER12H</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER12H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:135</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8">CSR_CFUREG1</a></div><div class="ttdeci">@ CSR_CFUREG1</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:103</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2">CSR_MXISA</a></div><div class="ttdeci">@ CSR_MXISA</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:153</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6">CSR_MCOUNTINHIBIT</a></div><div class="ttdeci">@ CSR_MCOUNTINHIBIT</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:38</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383">CSR_PMPADDR11</a></div><div class="ttdeci">@ CSR_PMPADDR11</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:84</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68">CSR_CFUREG2</a></div><div class="ttdeci">@ CSR_CFUREG2</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:104</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8">CSR_MENVCFGH</a></div><div class="ttdeci">@ CSR_MENVCFGH</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:42</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77">CSR_MHPMCOUNTER6H</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER6H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:129</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6">CSR_MHPMEVENT3</a></div><div class="ttdeci">@ CSR_MHPMEVENT3</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:45</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8">CSR_MTINST</a></div><div class="ttdeci">@ CSR_MTINST</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:65</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77">CSR_PMPADDR9</a></div><div class="ttdeci">@ CSR_PMPADDR9</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:82</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f">CSR_MHPMCOUNTER10</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER10</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:117</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79">CSR_MHPMCOUNTER8</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER8</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:115</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153">CSR_MEPC</a></div><div class="ttdeci">@ CSR_MEPC</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:61</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d">CSR_MHPMCOUNTER13H</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER13H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:136</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6">CSR_FCSR</a></div><div class="ttdeci">@ CSR_FCSR</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:29</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a">CSR_FFLAGS</a></div><div class="ttdeci">@ CSR_FFLAGS</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:27</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2">CSR_PMPADDR15</a></div><div class="ttdeci">@ CSR_PMPADDR15</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:88</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41">CSR_PMPADDR1</a></div><div class="ttdeci">@ CSR_PMPADDR1</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:74</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790">CSR_MHARTID</a></div><div class="ttdeci">@ CSR_MHARTID</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:151</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9">CSR_DCSR</a></div><div class="ttdeci">@ CSR_DCSR</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:97</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8">CSR_MHPMCOUNTER9H</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER9H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:132</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599">CSR_MHPMCOUNTER5H</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER5H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:128</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e">CSR_MTVAL</a></div><div class="ttdeci">@ CSR_MTVAL</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:63</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812">CSR_FRM</a></div><div class="ttdeci">@ CSR_FRM</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:28</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf">CSR_MHPMEVENT11</a></div><div class="ttdeci">@ CSR_MHPMEVENT11</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:53</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071">CSR_MHPMCOUNTER11H</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER11H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:134</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57">CSR_TDATA1</a></div><div class="ttdeci">@ CSR_TDATA1</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:92</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66">CSR_INSTRET</a></div><div class="ttdeci">@ CSR_INSTRET</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:142</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5">CSR_MHPMCOUNTER11</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER11</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:118</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f">CSR_PMPADDR0</a></div><div class="ttdeci">@ CSR_PMPADDR0</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:73</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9">CSR_PMPADDR3</a></div><div class="ttdeci">@ CSR_PMPADDR3</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:76</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6">CSR_MHPMEVENT13</a></div><div class="ttdeci">@ CSR_MHPMEVENT13</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:55</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444">CSR_MHPMCOUNTER7</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER7</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:114</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8">CSR_PMPADDR14</a></div><div class="ttdeci">@ CSR_PMPADDR14</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:87</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4">CSR_MHPMEVENT14</a></div><div class="ttdeci">@ CSR_MHPMEVENT14</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:56</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb">CSR_MINSTRET</a></div><div class="ttdeci">@ CSR_MINSTRET</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:109</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153">CSR_INSTRETH</a></div><div class="ttdeci">@ CSR_INSTRETH</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:145</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9">CSR_MHPMCOUNTER4</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER4</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:111</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0">CSR_MHPMCOUNTER13</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER13</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:120</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98">CSR_MENVCFG</a></div><div class="ttdeci">@ CSR_MENVCFG</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:41</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc">CSR_MHPMCOUNTER8H</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER8H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:131</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50">CSR_PMPADDR2</a></div><div class="ttdeci">@ CSR_PMPADDR2</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:75</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db">CSR_CYCLEH</a></div><div class="ttdeci">@ CSR_CYCLEH</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:144</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21">CSR_MTVEC</a></div><div class="ttdeci">@ CSR_MTVEC</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:35</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d">CSR_TSELECT</a></div><div class="ttdeci">@ CSR_TSELECT</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:91</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e">CSR_CYCLE</a></div><div class="ttdeci">@ CSR_CYCLE</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:141</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459">CSR_MHPMEVENT4</a></div><div class="ttdeci">@ CSR_MHPMEVENT4</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:46</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a">CSR_MHPMCOUNTER7H</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER7H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:130</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067">CSR_MSTATUSH</a></div><div class="ttdeci">@ CSR_MSTATUSH</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:37</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa">CSR_MHPMCOUNTER14H</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER14H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:137</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610">CSR_MIE</a></div><div class="ttdeci">@ CSR_MIE</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:34</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507">CSR_PMPADDR4</a></div><div class="ttdeci">@ CSR_PMPADDR4</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:77</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc">CSR_TDATA2</a></div><div class="ttdeci">@ CSR_TDATA2</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:93</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450">CSR_MSTATUS</a></div><div class="ttdeci">@ CSR_MSTATUS</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:32</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79">CSR_MHPMEVENT8</a></div><div class="ttdeci">@ CSR_MHPMEVENT8</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:50</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f">CSR_MHPMEVENT12</a></div><div class="ttdeci">@ CSR_MHPMEVENT12</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:54</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4">CSR_MARCHID</a></div><div class="ttdeci">@ CSR_MARCHID</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:149</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60">CSR_PMPADDR10</a></div><div class="ttdeci">@ CSR_PMPADDR10</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:83</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c">CSR_PMPADDR5</a></div><div class="ttdeci">@ CSR_PMPADDR5</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:78</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229">CSR_MHPMCOUNTER14</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER14</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:121</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c">CSR_MIP</a></div><div class="ttdeci">@ CSR_MIP</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:64</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c">CSR_MISA</a></div><div class="ttdeci">@ CSR_MISA</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:33</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc">CSR_MHPMCOUNTER3</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER3</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:110</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f">CSR_CFUREG0</a></div><div class="ttdeci">@ CSR_CFUREG0</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:102</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004">CSR_MSCRATCH</a></div><div class="ttdeci">@ CSR_MSCRATCH</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:60</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346">CSR_PMPADDR7</a></div><div class="ttdeci">@ CSR_PMPADDR7</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:80</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b">CSR_PMPADDR8</a></div><div class="ttdeci">@ CSR_PMPADDR8</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:81</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf">CSR_CFUREG3</a></div><div class="ttdeci">@ CSR_CFUREG3</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:105</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394">CSR_MHPMCOUNTER5</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER5</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:112</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f">CSR_PMPCFG0</a></div><div class="ttdeci">@ CSR_PMPCFG0</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:68</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b">CSR_DPC</a></div><div class="ttdeci">@ CSR_DPC</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:98</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444">CSR_PMPADDR6</a></div><div class="ttdeci">@ CSR_PMPADDR6</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:79</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b">CSR_MVENDORID</a></div><div class="ttdeci">@ CSR_MVENDORID</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:148</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46">CSR_MHPMCOUNTER15H</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER15H</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:138</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d">CSR_MHPMCOUNTER6</a></div><div class="ttdeci">@ CSR_MHPMCOUNTER6</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:113</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632">CSR_MHPMEVENT9</a></div><div class="ttdeci">@ CSR_MHPMEVENT9</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:51</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b">CSR_TINFO</a></div><div class="ttdeci">@ CSR_TINFO</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:94</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988">CSR_MINSTRETH</a></div><div class="ttdeci">@ CSR_MINSTRETH</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:125</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1">NEORV32_EXCEPTION_CODES_enum</a></div><div class="ttdeci">NEORV32_EXCEPTION_CODES_enum</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:388</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee">TRAP_CODE_I_MISALIGNED</a></div><div class="ttdeci">@ TRAP_CODE_I_MISALIGNED</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:389</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1">TRAP_CODE_FIRQ_0</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_0</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:402</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c">TRAP_CODE_FIRQ_12</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_12</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:414</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7">TRAP_CODE_MTI</a></div><div class="ttdeci">@ TRAP_CODE_MTI</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:400</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d">TRAP_CODE_S_MISALIGNED</a></div><div class="ttdeci">@ TRAP_CODE_S_MISALIGNED</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:395</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0">TRAP_CODE_MEI</a></div><div class="ttdeci">@ TRAP_CODE_MEI</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:401</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac">TRAP_CODE_MENV_CALL</a></div><div class="ttdeci">@ TRAP_CODE_MENV_CALL</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:398</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea">TRAP_CODE_L_ACCESS</a></div><div class="ttdeci">@ TRAP_CODE_L_ACCESS</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:394</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e">TRAP_CODE_BREAKPOINT</a></div><div class="ttdeci">@ TRAP_CODE_BREAKPOINT</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:392</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4">TRAP_CODE_FIRQ_9</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_9</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:411</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0">TRAP_CODE_FIRQ_3</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_3</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:405</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42">TRAP_CODE_FIRQ_10</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_10</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:412</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757">TRAP_CODE_FIRQ_5</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_5</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:407</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9">TRAP_CODE_L_MISALIGNED</a></div><div class="ttdeci">@ TRAP_CODE_L_MISALIGNED</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:393</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1">TRAP_CODE_I_ACCESS</a></div><div class="ttdeci">@ TRAP_CODE_I_ACCESS</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:390</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887">TRAP_CODE_S_ACCESS</a></div><div class="ttdeci">@ TRAP_CODE_S_ACCESS</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:396</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9">TRAP_CODE_FIRQ_13</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_13</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:415</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473">TRAP_CODE_FIRQ_6</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_6</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:408</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e">TRAP_CODE_FIRQ_14</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_14</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:416</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334">TRAP_CODE_FIRQ_11</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_11</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:413</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02">TRAP_CODE_UENV_CALL</a></div><div class="ttdeci">@ TRAP_CODE_UENV_CALL</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:397</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110">TRAP_CODE_FIRQ_15</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_15</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:417</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547">TRAP_CODE_FIRQ_4</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_4</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:406</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916">TRAP_CODE_FIRQ_8</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_8</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:410</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7">TRAP_CODE_FIRQ_2</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_2</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:404</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7">TRAP_CODE_FIRQ_1</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_1</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:403</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0">TRAP_CODE_MSI</a></div><div class="ttdeci">@ TRAP_CODE_MSI</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:399</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26">TRAP_CODE_FIRQ_7</a></div><div class="ttdeci">@ TRAP_CODE_FIRQ_7</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:409</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173">TRAP_CODE_I_ILLEGAL</a></div><div class="ttdeci">@ TRAP_CODE_I_ILLEGAL</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:391</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387">NEORV32_CSR_XISA_enum</a></div><div class="ttdeci">NEORV32_CSR_XISA_enum</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:305</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a216ec44d5be3b158acb7e033e352bad1"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a216ec44d5be3b158acb7e033e352bad1">CSR_MXISA_ZKNE</a></div><div class="ttdeci">@ CSR_MXISA_ZKNE</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:321</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a2649bee3397c74ada7b72677308f38c0"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a2649bee3397c74ada7b72677308f38c0">CSR_MXISA_ZKS</a></div><div class="ttdeci">@ CSR_MXISA_ZKS</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:328</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a31788af612f04bc6b2a2bd15c1fb63c1"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a31788af612f04bc6b2a2bd15c1fb63c1">CSR_MXISA_ZKT</a></div><div class="ttdeci">@ CSR_MXISA_ZKT</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:311</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a34519a66e749d63dc5bc7c145c297b64"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a34519a66e749d63dc5bc7c145c297b64">CSR_MXISA_ZBKX</a></div><div class="ttdeci">@ CSR_MXISA_ZBKX</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:319</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a35543f2ac5cde6e142bca6791b7b36b1"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a35543f2ac5cde6e142bca6791b7b36b1">CSR_MXISA_CLKGATE</a></div><div class="ttdeci">@ CSR_MXISA_CLKGATE</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:334</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe">CSR_MXISA_ZICNTR</a></div><div class="ttdeci">@ CSR_MXISA_ZICNTR</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:314</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a43213190abb77304a78c15196c90a044"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a43213190abb77304a78c15196c90a044">CSR_MXISA_ZKSED</a></div><div class="ttdeci">@ CSR_MXISA_ZKSED</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:327</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a469e8e449f0e442df531c8cf2c4f35c5"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a469e8e449f0e442df531c8cf2c4f35c5">CSR_MXISA_ZBS</a></div><div class="ttdeci">@ CSR_MXISA_ZBS</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:331</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64">CSR_MXISA_FASTMUL</a></div><div class="ttdeci">@ CSR_MXISA_FASTMUL</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:336</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a48f1de7f79a0633644ae02c463d49375"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48f1de7f79a0633644ae02c463d49375">CSR_MXISA_ZKND</a></div><div class="ttdeci">@ CSR_MXISA_ZKND</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:320</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1">CSR_MXISA_ZFINX</a></div><div class="ttdeci">@ CSR_MXISA_ZFINX</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:312</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b">CSR_MXISA_SDTRIG</a></div><div class="ttdeci">@ CSR_MXISA_SDTRIG</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:318</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a5e4bf05830b66410bbf2ef2c68e5fd18"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5e4bf05830b66410bbf2ef2c68e5fd18">CSR_MXISA_ZKSH</a></div><div class="ttdeci">@ CSR_MXISA_ZKSH</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:326</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a5fe8e591901e0fd7ba6706c70e9c76ec"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5fe8e591901e0fd7ba6706c70e9c76ec">CSR_MXISA_ZKNH</a></div><div class="ttdeci">@ CSR_MXISA_ZKNH</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:322</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d">CSR_MXISA_RFHWRST</a></div><div class="ttdeci">@ CSR_MXISA_RFHWRST</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:335</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3">CSR_MXISA_SMPMP</a></div><div class="ttdeci">@ CSR_MXISA_SMPMP</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:315</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e">CSR_MXISA_ZIFENCEI</a></div><div class="ttdeci">@ CSR_MXISA_ZIFENCEI</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:308</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f">CSR_MXISA_ZMMUL</a></div><div class="ttdeci">@ CSR_MXISA_ZMMUL</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:309</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a815cbe0149cba2a69025f6bec9946a85"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a815cbe0149cba2a69025f6bec9946a85">CSR_MXISA_ZBB</a></div><div class="ttdeci">@ CSR_MXISA_ZBB</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:330</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a">CSR_MXISA_IS_SIM</a></div><div class="ttdeci">@ CSR_MXISA_IS_SIM</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:339</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e">CSR_MXISA_ZICOND</a></div><div class="ttdeci">@ CSR_MXISA_ZICOND</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:313</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5">CSR_MXISA_SDEXT</a></div><div class="ttdeci">@ CSR_MXISA_SDEXT</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:317</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34">CSR_MXISA_ZIHPM</a></div><div class="ttdeci">@ CSR_MXISA_ZIHPM</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:316</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387ac9e87153c096d656b40cb7abdf3afd55"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac9e87153c096d656b40cb7abdf3afd55">CSR_MXISA_ZBKC</a></div><div class="ttdeci">@ CSR_MXISA_ZBKC</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:324</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c">CSR_MXISA_ZICSR</a></div><div class="ttdeci">@ CSR_MXISA_ZICSR</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:307</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868">CSR_MXISA_FASTSHIFT</a></div><div class="ttdeci">@ CSR_MXISA_FASTSHIFT</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:337</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387ad7e7454a30c82c3d91acbc8c259e8c25"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad7e7454a30c82c3d91acbc8c259e8c25">CSR_MXISA_ZKN</a></div><div class="ttdeci">@ CSR_MXISA_ZKN</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:325</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387adb26c1e5bf6ae112625621dddd331735"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adb26c1e5bf6ae112625621dddd331735">CSR_MXISA_ZBKB</a></div><div class="ttdeci">@ CSR_MXISA_ZBKB</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:323</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387adf45adc0bcbec0c1ffa944099257a947"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adf45adc0bcbec0c1ffa944099257a947">CSR_MXISA_ZALRSC</a></div><div class="ttdeci">@ CSR_MXISA_ZALRSC</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:332</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387adfc9122d93a71bf6df178022a52d22c4"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adfc9122d93a71bf6df178022a52d22c4">CSR_MXISA_ZBA</a></div><div class="ttdeci">@ CSR_MXISA_ZBA</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:329</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0">CSR_MXISA_ZXCFU</a></div><div class="ttdeci">@ CSR_MXISA_ZXCFU</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:310</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afde0761e3150d82511136f56179c204b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204b">NEORV32_CSR_FFLAGS_enum</a></div><div class="ttdeci">NEORV32_CSR_FFLAGS_enum</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:160</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b">CSR_FFLAGS_DZ</a></div><div class="ttdeci">@ CSR_FFLAGS_DZ</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:164</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165">CSR_FFLAGS_NV</a></div><div class="ttdeci">@ CSR_FFLAGS_NV</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:165</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e">CSR_FFLAGS_OF</a></div><div class="ttdeci">@ CSR_FFLAGS_OF</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:163</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6">CSR_FFLAGS_NX</a></div><div class="ttdeci">@ CSR_FFLAGS_NX</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:161</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819">CSR_FFLAGS_UF</a></div><div class="ttdeci">@ CSR_FFLAGS_UF</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:162</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afed7f00bbb39468f038d9ca6fbac830c"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830c">NEORV32_CSR_MISA_enum</a></div><div class="ttdeci">NEORV32_CSR_MISA_enum</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:289</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec">CSR_MISA_E</a></div><div class="ttdeci">@ CSR_MISA_E</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:292</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193">CSR_MISA_X</a></div><div class="ttdeci">@ CSR_MISA_X</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:296</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b">CSR_MISA_M</a></div><div class="ttdeci">@ CSR_MISA_M</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:294</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca">CSR_MISA_I</a></div><div class="ttdeci">@ CSR_MISA_I</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:293</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa">CSR_MISA_C</a></div><div class="ttdeci">@ CSR_MISA_C</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:291</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138">CSR_MISA_MXL_LO</a></div><div class="ttdeci">@ CSR_MISA_MXL_LO</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:297</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb">CSR_MISA_U</a></div><div class="ttdeci">@ CSR_MISA_U</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:295</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad">CSR_MISA_B</a></div><div class="ttdeci">@ CSR_MISA_B</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:290</div></div> +<div class="ttc" id="aneorv32__cpu__csr_8h_html_afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc"><div class="ttname"><a href="neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc">CSR_MISA_MXL_HI</a></div><div class="ttdeci">@ CSR_MISA_MXL_HI</div><div class="ttdef"><b>Definition</b> neorv32_cpu_csr.h:298</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__crc_8c.html b/sw/neorv32__crc_8c.html new file mode 100644 index 0000000000..d1e42c31eb --- /dev/null +++ b/sw/neorv32__crc_8c.html @@ -0,0 +1,255 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_crc.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_crc.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Cyclic redundancy check unit (CRC) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:aa46c647317752f8bb6d5836d4876a704" id="r_aa46c647317752f8bb6d5836d4876a704"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa46c647317752f8bb6d5836d4876a704">neorv32_crc_available</a> (void)</td></tr> +<tr class="separator:aa46c647317752f8bb6d5836d4876a704"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4ff5f7b91e9f668535ed33b6382ae623" id="r_a4ff5f7b91e9f668535ed33b6382ae623"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4ff5f7b91e9f668535ed33b6382ae623">neorv32_crc_setup</a> (uint32_t mode, uint32_t poly, uint32_t start)</td></tr> +<tr class="separator:a4ff5f7b91e9f668535ed33b6382ae623"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9243006e6cc94c03450646d26a7289b2" id="r_a9243006e6cc94c03450646d26a7289b2"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9243006e6cc94c03450646d26a7289b2">neorv32_crc_block</a> (uint8_t *byte, int length)</td></tr> +<tr class="separator:a9243006e6cc94c03450646d26a7289b2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad9d50c76a485160667d486bce32cbeb8" id="r_ad9d50c76a485160667d486bce32cbeb8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad9d50c76a485160667d486bce32cbeb8">neorv32_crc_single</a> (uint8_t byte)</td></tr> +<tr class="separator:ad9d50c76a485160667d486bce32cbeb8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a444b88f1536f65acc301fb19eddcf227" id="r_a444b88f1536f65acc301fb19eddcf227"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a444b88f1536f65acc301fb19eddcf227">neorv32_crc_get</a> (void)</td></tr> +<tr class="separator:a444b88f1536f65acc301fb19eddcf227"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Cyclic redundancy check unit (CRC) HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the CRC unit was synthesized (IO_CRC_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="aa46c647317752f8bb6d5836d4876a704" name="aa46c647317752f8bb6d5836d4876a704"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa46c647317752f8bb6d5836d4876a704">&#9670;&#160;</a></span>neorv32_crc_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_crc_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if CRC unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if CRC was not synthesized, 1 if CRC is available. </dd></dl> + +</div> +</div> +<a id="a9243006e6cc94c03450646d26a7289b2" name="a9243006e6cc94c03450646d26a7289b2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9243006e6cc94c03450646d26a7289b2">&#9670;&#160;</a></span>neorv32_crc_block()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_crc_block </td> + <td>(</td> + <td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>byte</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>length</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Compute pre-configured CRC for entire data block.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">byte</td><td>Pointer to byte (uint8_t) source data array. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>Length of source data array. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>32-bit CRC result. </dd></dl> + +</div> +</div> +<a id="a444b88f1536f65acc301fb19eddcf227" name="a444b88f1536f65acc301fb19eddcf227"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a444b88f1536f65acc301fb19eddcf227">&#9670;&#160;</a></span>neorv32_crc_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_crc_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current CRC shift register data.</p> +<dl class="section return"><dt>Returns</dt><dd>32-bit CRC result. </dd></dl> + +</div> +</div> +<a id="a4ff5f7b91e9f668535ed33b6382ae623" name="a4ff5f7b91e9f668535ed33b6382ae623"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4ff5f7b91e9f668535ed33b6382ae623">&#9670;&#160;</a></span>neorv32_crc_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_crc_setup </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>mode</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>poly</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>start</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Setup CRC unit.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">mode</td><td>Operation mode (<a class="el" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447">NEORV32_CRC_MODE_enum</a>). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">poly</td><td>CRC polynomial. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">start</td><td>CRC shift register start value. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ad9d50c76a485160667d486bce32cbeb8" name="ad9d50c76a485160667d486bce32cbeb8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad9d50c76a485160667d486bce32cbeb8">&#9670;&#160;</a></span>neorv32_crc_single()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_crc_single </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>byte</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Compute pre-configured CRC for single data byte.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">byte</td><td>Data byte (uint8_t). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__crc_8h.html b/sw/neorv32__crc_8h.html new file mode 100644 index 0000000000..656e6de960 --- /dev/null +++ b/sw/neorv32__crc_8h.html @@ -0,0 +1,312 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_crc.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_crc.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Cyclic redundancy check unit (CRC) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__crc_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__crc__t.html">neorv32_crc_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:aa46c647317752f8bb6d5836d4876a704" id="r_aa46c647317752f8bb6d5836d4876a704"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa46c647317752f8bb6d5836d4876a704">neorv32_crc_available</a> (void)</td></tr> +<tr class="separator:aa46c647317752f8bb6d5836d4876a704"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4ff5f7b91e9f668535ed33b6382ae623" id="r_a4ff5f7b91e9f668535ed33b6382ae623"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4ff5f7b91e9f668535ed33b6382ae623">neorv32_crc_setup</a> (uint32_t mode, uint32_t poly, uint32_t start)</td></tr> +<tr class="separator:a4ff5f7b91e9f668535ed33b6382ae623"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9243006e6cc94c03450646d26a7289b2" id="r_a9243006e6cc94c03450646d26a7289b2"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9243006e6cc94c03450646d26a7289b2">neorv32_crc_block</a> (uint8_t *byte, int length)</td></tr> +<tr class="separator:a9243006e6cc94c03450646d26a7289b2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad9d50c76a485160667d486bce32cbeb8" id="r_ad9d50c76a485160667d486bce32cbeb8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad9d50c76a485160667d486bce32cbeb8">neorv32_crc_single</a> (uint8_t byte)</td></tr> +<tr class="separator:ad9d50c76a485160667d486bce32cbeb8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a444b88f1536f65acc301fb19eddcf227" id="r_a444b88f1536f65acc301fb19eddcf227"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a444b88f1536f65acc301fb19eddcf227">neorv32_crc_get</a> (void)</td></tr> +<tr class="separator:a444b88f1536f65acc301fb19eddcf227"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: Cyclic Redundancy Check Unit (CRC)</h2></td></tr> +<tr class="memitem:a110962d2b370f9d7997e459d9fd34271" id="r_a110962d2b370f9d7997e459d9fd34271"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a110962d2b370f9d7997e459d9fd34271">NEORV32_CRC</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__crc__t.html">neorv32_crc_t</a>*) (<a class="el" href="neorv32_8h.html#a0e2377055bdc0f416b5ae4385610600d">NEORV32_CRC_BASE</a>))</td></tr> +<tr class="separator:a110962d2b370f9d7997e459d9fd34271"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1ae84a58f475bafc2fc3f2c690fd6447" id="r_a1ae84a58f475bafc2fc3f2c690fd6447"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1ae84a58f475bafc2fc3f2c690fd6447">NEORV32_CRC_MODE_enum</a> { <a class="el" href="#a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a">CRC_MODE8</a> = 0b00 +, <a class="el" href="#a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f">CRC_MODE16</a> = 0b01 +, <a class="el" href="#a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa">CRC_MODE32</a> = 0b10 + }</td></tr> +<tr class="separator:a1ae84a58f475bafc2fc3f2c690fd6447"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Cyclic redundancy check unit (CRC) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the CRC unit was synthesized (IO_CRC_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a110962d2b370f9d7997e459d9fd34271" name="a110962d2b370f9d7997e459d9fd34271"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a110962d2b370f9d7997e459d9fd34271">&#9670;&#160;</a></span>NEORV32_CRC</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_CRC&#160;&#160;&#160;((<a class="el" href="structneorv32__crc__t.html">neorv32_crc_t</a>*) (<a class="el" href="neorv32_8h.html#a0e2377055bdc0f416b5ae4385610600d">NEORV32_CRC_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>CRC module hardware access (<a class="el" href="structneorv32__crc__t.html">neorv32_crc_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="a1ae84a58f475bafc2fc3f2c690fd6447" name="a1ae84a58f475bafc2fc3f2c690fd6447"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1ae84a58f475bafc2fc3f2c690fd6447">&#9670;&#160;</a></span>NEORV32_CRC_MODE_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a1ae84a58f475bafc2fc3f2c690fd6447">NEORV32_CRC_MODE_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>CRC mode select </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a" name="a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a"></a>CRC_MODE8&#160;</td><td class="fielddoc"><p>(0) crc8 </p> +</td></tr> +<tr><td class="fieldname"><a id="a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f" name="a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f"></a>CRC_MODE16&#160;</td><td class="fielddoc"><p>(1) crc16 </p> +</td></tr> +<tr><td class="fieldname"><a id="a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa" name="a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa"></a>CRC_MODE32&#160;</td><td class="fielddoc"><p>(3) crc32 </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="aa46c647317752f8bb6d5836d4876a704" name="aa46c647317752f8bb6d5836d4876a704"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa46c647317752f8bb6d5836d4876a704">&#9670;&#160;</a></span>neorv32_crc_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_crc_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if CRC unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if CRC was not synthesized, 1 if CRC is available. </dd></dl> + +</div> +</div> +<a id="a9243006e6cc94c03450646d26a7289b2" name="a9243006e6cc94c03450646d26a7289b2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9243006e6cc94c03450646d26a7289b2">&#9670;&#160;</a></span>neorv32_crc_block()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_crc_block </td> + <td>(</td> + <td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>byte</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>length</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Compute pre-configured CRC for entire data block.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">byte</td><td>Pointer to byte (uint8_t) source data array. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>Length of source data array. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>32-bit CRC result. </dd></dl> + +</div> +</div> +<a id="a444b88f1536f65acc301fb19eddcf227" name="a444b88f1536f65acc301fb19eddcf227"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a444b88f1536f65acc301fb19eddcf227">&#9670;&#160;</a></span>neorv32_crc_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_crc_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current CRC shift register data.</p> +<dl class="section return"><dt>Returns</dt><dd>32-bit CRC result. </dd></dl> + +</div> +</div> +<a id="a4ff5f7b91e9f668535ed33b6382ae623" name="a4ff5f7b91e9f668535ed33b6382ae623"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4ff5f7b91e9f668535ed33b6382ae623">&#9670;&#160;</a></span>neorv32_crc_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_crc_setup </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>mode</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>poly</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>start</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Setup CRC unit.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">mode</td><td>Operation mode (<a class="el" href="#a1ae84a58f475bafc2fc3f2c690fd6447">NEORV32_CRC_MODE_enum</a>). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">poly</td><td>CRC polynomial. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">start</td><td>CRC shift register start value. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ad9d50c76a485160667d486bce32cbeb8" name="ad9d50c76a485160667d486bce32cbeb8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad9d50c76a485160667d486bce32cbeb8">&#9670;&#160;</a></span>neorv32_crc_single()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_crc_single </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>byte</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Compute pre-configured CRC for single data byte.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">byte</td><td>Data byte (uint8_t). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__crc_8h_source.html b/sw/neorv32__crc_8h_source.html new file mode 100644 index 0000000000..e67aaefc63 --- /dev/null +++ b/sw/neorv32__crc_8h_source.html @@ -0,0 +1,157 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_crc.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_crc.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__crc_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_crc_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_crc_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__crc__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__crc__t.html#ad720502701f16e6e952bbcaee980017c"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__crc__t.html#ad720502701f16e6e952bbcaee980017c">MODE</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__crc__t.html#a9bbcab843ddba4f9772d07478947a661"> 31</a></span> uint32_t <a class="code hl_variable" href="structneorv32__crc__t.html#a9bbcab843ddba4f9772d07478947a661">POLY</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="structneorv32__crc__t.html#a47f286612848f597859aaef0d2d5da4d"> 32</a></span> uint32_t <a class="code hl_variable" href="structneorv32__crc__t.html#a47f286612848f597859aaef0d2d5da4d">DATA</a>; </div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="structneorv32__crc__t.html#abf2b419f2aefdb6f2a6b81a02cb8612d"> 33</a></span> uint32_t <a class="code hl_variable" href="structneorv32__crc__t.html#abf2b419f2aefdb6f2a6b81a02cb8612d">SREG</a>; </div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span>} <a class="code hl_struct" href="structneorv32__crc__t.html">neorv32_crc_t</a>;</div> +</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="neorv32__crc_8h.html#a110962d2b370f9d7997e459d9fd34271"> 37</a></span><span class="preprocessor">#define NEORV32_CRC ((neorv32_crc_t*) (NEORV32_CRC_BASE))</span></div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="foldopen" id="foldopen00040" data-start="{" data-end="};"> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447"> 40</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447">NEORV32_CRC_MODE_enum</a> {</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a">CRC_MODE8</a> = 0b00, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f">CRC_MODE16</a> = 0b01, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa">CRC_MODE32</a> = 0b10, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span>};</div> +</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__crc_8h.html#aa46c647317752f8bb6d5836d4876a704">neorv32_crc_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__crc_8h.html#a4ff5f7b91e9f668535ed33b6382ae623">neorv32_crc_setup</a>(uint32_t mode, uint32_t poly, uint32_t start);</div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>uint32_t <a class="code hl_function" href="neorv32__crc_8h.html#a9243006e6cc94c03450646d26a7289b2">neorv32_crc_block</a>(uint8_t *<span class="keywordtype">byte</span>, <span class="keywordtype">int</span> length);</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__crc_8h.html#ad9d50c76a485160667d486bce32cbeb8">neorv32_crc_single</a>(uint8_t <span class="keywordtype">byte</span>);</div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>uint32_t <a class="code hl_function" href="neorv32__crc_8h.html#a444b88f1536f65acc301fb19eddcf227">neorv32_crc_get</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_crc_h</span></div> +<div class="ttc" id="aneorv32__crc_8h_html_a1ae84a58f475bafc2fc3f2c690fd6447"><div class="ttname"><a href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447">NEORV32_CRC_MODE_enum</a></div><div class="ttdeci">NEORV32_CRC_MODE_enum</div><div class="ttdef"><b>Definition</b> neorv32_crc.h:40</div></div> +<div class="ttc" id="aneorv32__crc_8h_html_a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa"><div class="ttname"><a href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa">CRC_MODE32</a></div><div class="ttdeci">@ CRC_MODE32</div><div class="ttdef"><b>Definition</b> neorv32_crc.h:43</div></div> +<div class="ttc" id="aneorv32__crc_8h_html_a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a"><div class="ttname"><a href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a">CRC_MODE8</a></div><div class="ttdeci">@ CRC_MODE8</div><div class="ttdef"><b>Definition</b> neorv32_crc.h:41</div></div> +<div class="ttc" id="aneorv32__crc_8h_html_a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f"><div class="ttname"><a href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f">CRC_MODE16</a></div><div class="ttdeci">@ CRC_MODE16</div><div class="ttdef"><b>Definition</b> neorv32_crc.h:42</div></div> +<div class="ttc" id="aneorv32__crc_8h_html_a444b88f1536f65acc301fb19eddcf227"><div class="ttname"><a href="neorv32__crc_8h.html#a444b88f1536f65acc301fb19eddcf227">neorv32_crc_get</a></div><div class="ttdeci">uint32_t neorv32_crc_get(void)</div><div class="ttdef"><b>Definition</b> neorv32_crc.c:86</div></div> +<div class="ttc" id="aneorv32__crc_8h_html_a4ff5f7b91e9f668535ed33b6382ae623"><div class="ttname"><a href="neorv32__crc_8h.html#a4ff5f7b91e9f668535ed33b6382ae623">neorv32_crc_setup</a></div><div class="ttdeci">void neorv32_crc_setup(uint32_t mode, uint32_t poly, uint32_t start)</div><div class="ttdef"><b>Definition</b> neorv32_crc.c:44</div></div> +<div class="ttc" id="aneorv32__crc_8h_html_a9243006e6cc94c03450646d26a7289b2"><div class="ttname"><a href="neorv32__crc_8h.html#a9243006e6cc94c03450646d26a7289b2">neorv32_crc_block</a></div><div class="ttdeci">uint32_t neorv32_crc_block(uint8_t *byte, int length)</div><div class="ttdef"><b>Definition</b> neorv32_crc.c:59</div></div> +<div class="ttc" id="aneorv32__crc_8h_html_aa46c647317752f8bb6d5836d4876a704"><div class="ttname"><a href="neorv32__crc_8h.html#aa46c647317752f8bb6d5836d4876a704">neorv32_crc_available</a></div><div class="ttdeci">int neorv32_crc_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_crc.c:26</div></div> +<div class="ttc" id="aneorv32__crc_8h_html_ad9d50c76a485160667d486bce32cbeb8"><div class="ttname"><a href="neorv32__crc_8h.html#ad9d50c76a485160667d486bce32cbeb8">neorv32_crc_single</a></div><div class="ttdeci">void neorv32_crc_single(uint8_t byte)</div><div class="ttdef"><b>Definition</b> neorv32_crc.c:75</div></div> +<div class="ttc" id="astructneorv32__crc__t_html"><div class="ttname"><a href="structneorv32__crc__t.html">neorv32_crc_t</a></div><div class="ttdef"><b>Definition</b> neorv32_crc.h:29</div></div> +<div class="ttc" id="astructneorv32__crc__t_html_a47f286612848f597859aaef0d2d5da4d"><div class="ttname"><a href="structneorv32__crc__t.html#a47f286612848f597859aaef0d2d5da4d">neorv32_crc_t::DATA</a></div><div class="ttdeci">uint32_t DATA</div><div class="ttdef"><b>Definition</b> neorv32_crc.h:32</div></div> +<div class="ttc" id="astructneorv32__crc__t_html_a9bbcab843ddba4f9772d07478947a661"><div class="ttname"><a href="structneorv32__crc__t.html#a9bbcab843ddba4f9772d07478947a661">neorv32_crc_t::POLY</a></div><div class="ttdeci">uint32_t POLY</div><div class="ttdef"><b>Definition</b> neorv32_crc.h:31</div></div> +<div class="ttc" id="astructneorv32__crc__t_html_abf2b419f2aefdb6f2a6b81a02cb8612d"><div class="ttname"><a href="structneorv32__crc__t.html#abf2b419f2aefdb6f2a6b81a02cb8612d">neorv32_crc_t::SREG</a></div><div class="ttdeci">uint32_t SREG</div><div class="ttdef"><b>Definition</b> neorv32_crc.h:33</div></div> +<div class="ttc" id="astructneorv32__crc__t_html_ad720502701f16e6e952bbcaee980017c"><div class="ttname"><a href="structneorv32__crc__t.html#ad720502701f16e6e952bbcaee980017c">neorv32_crc_t::MODE</a></div><div class="ttdeci">uint32_t MODE</div><div class="ttdef"><b>Definition</b> neorv32_crc.h:30</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__dma_8h.html b/sw/neorv32__dma_8h.html new file mode 100644 index 0000000000..22e3947d1b --- /dev/null +++ b/sw/neorv32__dma_8h.html @@ -0,0 +1,676 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_dma.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> &#124; +<a href="#enum-members">Enumerations</a> </div> + <div class="headertitle"><div class="title">neorv32_dma.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Direct Memory Access Controller (DMA) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__dma_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__dma__t.html">neorv32_dma_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader"></div></td></tr> +<tr class="memitem:a5e01d4454c97eb8e4ecd1455090bbfa9" id="r_a5e01d4454c97eb8e4ecd1455090bbfa9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5e01d4454c97eb8e4ecd1455090bbfa9">DMA_CMD_B2B</a>&#160;&#160;&#160;(0b00 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2">DMA_TTYPE_QSEL_LSB</a>)</td></tr> +<tr class="separator:a5e01d4454c97eb8e4ecd1455090bbfa9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aeb63f99217f14d1ddde35c1f6c104e72" id="r_aeb63f99217f14d1ddde35c1f6c104e72"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aeb63f99217f14d1ddde35c1f6c104e72">DMA_CMD_B2UW</a>&#160;&#160;&#160;(0b01 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2">DMA_TTYPE_QSEL_LSB</a>)</td></tr> +<tr class="separator:aeb63f99217f14d1ddde35c1f6c104e72"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adfecb3debff251070e4f6eb809412129" id="r_adfecb3debff251070e4f6eb809412129"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adfecb3debff251070e4f6eb809412129">DMA_CMD_B2SW</a>&#160;&#160;&#160;(0b10 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2">DMA_TTYPE_QSEL_LSB</a>)</td></tr> +<tr class="separator:adfecb3debff251070e4f6eb809412129"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a13a16ba8d6daf9c82312bf4d392d15a8" id="r_a13a16ba8d6daf9c82312bf4d392d15a8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a13a16ba8d6daf9c82312bf4d392d15a8">DMA_CMD_W2W</a>&#160;&#160;&#160;(0b11 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2">DMA_TTYPE_QSEL_LSB</a>)</td></tr> +<tr class="separator:a13a16ba8d6daf9c82312bf4d392d15a8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae380022d8b8fb70da91f0892f2bc32c8" id="r_ae380022d8b8fb70da91f0892f2bc32c8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae380022d8b8fb70da91f0892f2bc32c8">DMA_CMD_SRC_CONST</a>&#160;&#160;&#160;(0b0 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec">DMA_TTYPE_SRC_INC</a>)</td></tr> +<tr class="separator:ae380022d8b8fb70da91f0892f2bc32c8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acc081d58b53d1eddd2bff35b128d7da2" id="r_acc081d58b53d1eddd2bff35b128d7da2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acc081d58b53d1eddd2bff35b128d7da2">DMA_CMD_SRC_INC</a>&#160;&#160;&#160;(0b1 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec">DMA_TTYPE_SRC_INC</a>)</td></tr> +<tr class="separator:acc081d58b53d1eddd2bff35b128d7da2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6a0ce532aad39e6489e9d52bcb6f4cd2" id="r_a6a0ce532aad39e6489e9d52bcb6f4cd2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6a0ce532aad39e6489e9d52bcb6f4cd2">DMA_CMD_DST_CONST</a>&#160;&#160;&#160;(0b0 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da">DMA_TTYPE_DST_INC</a>)</td></tr> +<tr class="separator:a6a0ce532aad39e6489e9d52bcb6f4cd2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a61caa2602c6b148af55d990e3c0ae6be" id="r_a61caa2602c6b148af55d990e3c0ae6be"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a61caa2602c6b148af55d990e3c0ae6be">DMA_CMD_DST_INC</a>&#160;&#160;&#160;(0b1 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da">DMA_TTYPE_DST_INC</a>)</td></tr> +<tr class="separator:a61caa2602c6b148af55d990e3c0ae6be"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a18fb7faa0a35f562821ca854d7c648b4" id="r_a18fb7faa0a35f562821ca854d7c648b4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a18fb7faa0a35f562821ca854d7c648b4">DMA_CMD_ENDIAN</a>&#160;&#160;&#160;(0b1 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802">DMA_TTYPE_ENDIAN</a>)</td></tr> +<tr class="separator:a18fb7faa0a35f562821ca854d7c648b4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a> +Enumerations</h2></td></tr> +<tr class="memitem:a002cb188ea5156df0ba282e239a6e74b" id="r_a002cb188ea5156df0ba282e239a6e74b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a002cb188ea5156df0ba282e239a6e74b">NEORV32_DMA_STATUS_enum</a> { <a class="el" href="#a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8">DMA_STATUS_ERR_WR</a> = -2 +, <a class="el" href="#a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492">DMA_STATUS_ERR_RD</a> = -1 +, <a class="el" href="#a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f">DMA_STATUS_IDLE</a> = 0 +, <a class="el" href="#a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d">DMA_STATUS_BUSY</a> = 1 + }</td></tr> +<tr class="separator:a002cb188ea5156df0ba282e239a6e74b"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:a13260c3252f0375d8982590d270d7dfd" id="r_a13260c3252f0375d8982590d270d7dfd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a13260c3252f0375d8982590d270d7dfd">neorv32_dma_available</a> (void)</td></tr> +<tr class="separator:a13260c3252f0375d8982590d270d7dfd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac3b72447e8a132faf26577ac714b8284" id="r_ac3b72447e8a132faf26577ac714b8284"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac3b72447e8a132faf26577ac714b8284">neorv32_dma_enable</a> (void)</td></tr> +<tr class="separator:ac3b72447e8a132faf26577ac714b8284"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6df244028455cf7f8d4cf1520c4670a7" id="r_a6df244028455cf7f8d4cf1520c4670a7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6df244028455cf7f8d4cf1520c4670a7">neorv32_dma_disable</a> (void)</td></tr> +<tr class="separator:a6df244028455cf7f8d4cf1520c4670a7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2c7257567ccdb7a986f5ef7c74d3917c" id="r_a2c7257567ccdb7a986f5ef7c74d3917c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2c7257567ccdb7a986f5ef7c74d3917c">neorv32_dma_fence_enable</a> (void)</td></tr> +<tr class="separator:a2c7257567ccdb7a986f5ef7c74d3917c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8f37adfa07050b0a1cb8430c9ce1fcc2" id="r_a8f37adfa07050b0a1cb8430c9ce1fcc2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8f37adfa07050b0a1cb8430c9ce1fcc2">neorv32_dma_fence_disable</a> (void)</td></tr> +<tr class="separator:a8f37adfa07050b0a1cb8430c9ce1fcc2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2ce0d31e04604b2523135d52a877febf" id="r_a2ce0d31e04604b2523135d52a877febf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2ce0d31e04604b2523135d52a877febf">neorv32_dma_transfer</a> (uint32_t base_src, uint32_t base_dst, uint32_t num, uint32_t config)</td></tr> +<tr class="separator:a2ce0d31e04604b2523135d52a877febf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6ebd1595ee6fa0e6cbfbd1ce7476f18e" id="r_a6ebd1595ee6fa0e6cbfbd1ce7476f18e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6ebd1595ee6fa0e6cbfbd1ce7476f18e">neorv32_dma_transfer_auto</a> (uint32_t base_src, uint32_t base_dst, uint32_t num, uint32_t config, int firq_sel, int firq_type)</td></tr> +<tr class="separator:a6ebd1595ee6fa0e6cbfbd1ce7476f18e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa116f9714174abbe8a3583e441fee24b" id="r_aa116f9714174abbe8a3583e441fee24b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa116f9714174abbe8a3583e441fee24b">neorv32_dma_status</a> (void)</td></tr> +<tr class="separator:aa116f9714174abbe8a3583e441fee24b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afc8cc32f7d80d0f5ab33b2f1ecf77956" id="r_afc8cc32f7d80d0f5ab33b2f1ecf77956"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afc8cc32f7d80d0f5ab33b2f1ecf77956">neorv32_dma_done</a> (void)</td></tr> +<tr class="separator:afc8cc32f7d80d0f5ab33b2f1ecf77956"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: Direct Memory Access Controller (DMA)</h2></td></tr> +<tr class="memitem:a0dcb61a0e0d2b45beb7818015adc8639" id="r_a0dcb61a0e0d2b45beb7818015adc8639"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0dcb61a0e0d2b45beb7818015adc8639">NEORV32_DMA</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__dma__t.html">neorv32_dma_t</a>*) (<a class="el" href="neorv32_8h.html#aa8d3a83ffad1e71f0832a5da78d62008">NEORV32_DMA_BASE</a>))</td></tr> +<tr class="separator:a0dcb61a0e0d2b45beb7818015adc8639"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6716eddb145b80ad38799da3b87cb2a4" id="r_a6716eddb145b80ad38799da3b87cb2a4"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6716eddb145b80ad38799da3b87cb2a4">NEORV32_DMA_CTRL_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838">DMA_CTRL_EN</a> = 0 +, <a class="el" href="#a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b">DMA_CTRL_AUTO</a> = 1 +, <a class="el" href="#a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00">DMA_CTRL_FENCE</a> = 2 +, <a class="el" href="#a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96">DMA_CTRL_ERROR_RD</a> = 8 +, <br /> +&#160;&#160;<a class="el" href="#a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101">DMA_CTRL_ERROR_WR</a> = 9 +, <a class="el" href="#a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb">DMA_CTRL_BUSY</a> = 10 +, <a class="el" href="#a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc">DMA_CTRL_DONE</a> = 11 +, <a class="el" href="#a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe">DMA_CTRL_FIRQ_TYPE</a> = 15 +, <br /> +&#160;&#160;<a class="el" href="#a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9">DMA_CTRL_FIRQ_SEL_LSB</a> = 16 +, <a class="el" href="#a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a">DMA_CTRL_FIRQ_SEL_MSB</a> = 19 +<br /> + }</td></tr> +<tr class="separator:a6716eddb145b80ad38799da3b87cb2a4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a33187c5a074d62b46d2262e352edb8d9" id="r_a33187c5a074d62b46d2262e352edb8d9"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a33187c5a074d62b46d2262e352edb8d9">NEORV32_DMA_TTYPE_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450">DMA_TTYPE_NUM_LSB</a> = 0 +, <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd">DMA_TTYPE_NUM_MSB</a> = 23 +, <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2">DMA_TTYPE_QSEL_LSB</a> = 27 +, <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5">DMA_TTYPE_QSEL_MSB</a> = 28 +, <br /> +&#160;&#160;<a class="el" href="#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec">DMA_TTYPE_SRC_INC</a> = 29 +, <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da">DMA_TTYPE_DST_INC</a> = 30 +, <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802">DMA_TTYPE_ENDIAN</a> = 31 +<br /> + }</td></tr> +<tr class="separator:a33187c5a074d62b46d2262e352edb8d9"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Direct Memory Access Controller (DMA) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the DMA controller was synthesized (IO_DMA_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a5e01d4454c97eb8e4ecd1455090bbfa9" name="a5e01d4454c97eb8e4ecd1455090bbfa9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5e01d4454c97eb8e4ecd1455090bbfa9">&#9670;&#160;</a></span>DMA_CMD_B2B</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DMA_CMD_B2B&#160;&#160;&#160;(0b00 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2">DMA_TTYPE_QSEL_LSB</a>)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA transfer type commands </p> + +</div> +</div> +<a id="adfecb3debff251070e4f6eb809412129" name="adfecb3debff251070e4f6eb809412129"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adfecb3debff251070e4f6eb809412129">&#9670;&#160;</a></span>DMA_CMD_B2SW</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DMA_CMD_B2SW&#160;&#160;&#160;(0b10 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2">DMA_TTYPE_QSEL_LSB</a>)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA transfer type commands </p> + +</div> +</div> +<a id="aeb63f99217f14d1ddde35c1f6c104e72" name="aeb63f99217f14d1ddde35c1f6c104e72"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aeb63f99217f14d1ddde35c1f6c104e72">&#9670;&#160;</a></span>DMA_CMD_B2UW</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DMA_CMD_B2UW&#160;&#160;&#160;(0b01 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2">DMA_TTYPE_QSEL_LSB</a>)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA transfer type commands </p> + +</div> +</div> +<a id="a6a0ce532aad39e6489e9d52bcb6f4cd2" name="a6a0ce532aad39e6489e9d52bcb6f4cd2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6a0ce532aad39e6489e9d52bcb6f4cd2">&#9670;&#160;</a></span>DMA_CMD_DST_CONST</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DMA_CMD_DST_CONST&#160;&#160;&#160;(0b0 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da">DMA_TTYPE_DST_INC</a>)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA transfer type commands </p> + +</div> +</div> +<a id="a61caa2602c6b148af55d990e3c0ae6be" name="a61caa2602c6b148af55d990e3c0ae6be"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a61caa2602c6b148af55d990e3c0ae6be">&#9670;&#160;</a></span>DMA_CMD_DST_INC</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DMA_CMD_DST_INC&#160;&#160;&#160;(0b1 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da">DMA_TTYPE_DST_INC</a>)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA transfer type commands </p> + +</div> +</div> +<a id="a18fb7faa0a35f562821ca854d7c648b4" name="a18fb7faa0a35f562821ca854d7c648b4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a18fb7faa0a35f562821ca854d7c648b4">&#9670;&#160;</a></span>DMA_CMD_ENDIAN</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DMA_CMD_ENDIAN&#160;&#160;&#160;(0b1 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802">DMA_TTYPE_ENDIAN</a>)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA transfer type commands </p> + +</div> +</div> +<a id="ae380022d8b8fb70da91f0892f2bc32c8" name="ae380022d8b8fb70da91f0892f2bc32c8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae380022d8b8fb70da91f0892f2bc32c8">&#9670;&#160;</a></span>DMA_CMD_SRC_CONST</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DMA_CMD_SRC_CONST&#160;&#160;&#160;(0b0 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec">DMA_TTYPE_SRC_INC</a>)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA transfer type commands </p> + +</div> +</div> +<a id="acc081d58b53d1eddd2bff35b128d7da2" name="acc081d58b53d1eddd2bff35b128d7da2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acc081d58b53d1eddd2bff35b128d7da2">&#9670;&#160;</a></span>DMA_CMD_SRC_INC</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DMA_CMD_SRC_INC&#160;&#160;&#160;(0b1 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec">DMA_TTYPE_SRC_INC</a>)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA transfer type commands </p> + +</div> +</div> +<a id="a13a16ba8d6daf9c82312bf4d392d15a8" name="a13a16ba8d6daf9c82312bf4d392d15a8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a13a16ba8d6daf9c82312bf4d392d15a8">&#9670;&#160;</a></span>DMA_CMD_W2W</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define DMA_CMD_W2W&#160;&#160;&#160;(0b11 &lt;&lt; <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2">DMA_TTYPE_QSEL_LSB</a>)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA transfer type commands </p> + +</div> +</div> +<a id="a0dcb61a0e0d2b45beb7818015adc8639" name="a0dcb61a0e0d2b45beb7818015adc8639"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0dcb61a0e0d2b45beb7818015adc8639">&#9670;&#160;</a></span>NEORV32_DMA</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_DMA&#160;&#160;&#160;((<a class="el" href="structneorv32__dma__t.html">neorv32_dma_t</a>*) (<a class="el" href="neorv32_8h.html#aa8d3a83ffad1e71f0832a5da78d62008">NEORV32_DMA_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA module hardware access (<a class="el" href="structneorv32__dma__t.html">neorv32_dma_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="a6716eddb145b80ad38799da3b87cb2a4" name="a6716eddb145b80ad38799da3b87cb2a4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6716eddb145b80ad38799da3b87cb2a4">&#9670;&#160;</a></span>NEORV32_DMA_CTRL_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a6716eddb145b80ad38799da3b87cb2a4">NEORV32_DMA_CTRL_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA control and status register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838" name="a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838"></a>DMA_CTRL_EN&#160;</td><td class="fielddoc"><p>DMA control register(0) (r/w): DMA enable </p> +</td></tr> +<tr><td class="fieldname"><a id="a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b" name="a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b"></a>DMA_CTRL_AUTO&#160;</td><td class="fielddoc"><p>DMA control register(1) (r/w): Automatic trigger mode enable </p> +</td></tr> +<tr><td class="fieldname"><a id="a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00" name="a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00"></a>DMA_CTRL_FENCE&#160;</td><td class="fielddoc"><p>DMA control register(2) (r/w): Issue FENCE downstream operation when DMA transfer is completed </p> +</td></tr> +<tr><td class="fieldname"><a id="a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96" name="a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96"></a>DMA_CTRL_ERROR_RD&#160;</td><td class="fielddoc"><p>DMA control register(8) (r/-): Error during read access; SRC_BASE shows the faulting address </p> +</td></tr> +<tr><td class="fieldname"><a id="a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101" name="a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101"></a>DMA_CTRL_ERROR_WR&#160;</td><td class="fielddoc"><p>DMA control register(9) (r/-): Error during write access; DST_BASE shows the faulting address </p> +</td></tr> +<tr><td class="fieldname"><a id="a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb" name="a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb"></a>DMA_CTRL_BUSY&#160;</td><td class="fielddoc"><p>DMA control register(10) (r/-): DMA busy / transfer in progress </p> +</td></tr> +<tr><td class="fieldname"><a id="a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc" name="a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc"></a>DMA_CTRL_DONE&#160;</td><td class="fielddoc"><p>DMA control register(11) (r/c): A transfer was executed when set </p> +</td></tr> +<tr><td class="fieldname"><a id="a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe" name="a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe"></a>DMA_CTRL_FIRQ_TYPE&#160;</td><td class="fielddoc"><p>DMA control register(15) (r/w): Trigger on FIRQ rising-edge (0) or high-level (1) </p> +</td></tr> +<tr><td class="fieldname"><a id="a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9" name="a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9"></a>DMA_CTRL_FIRQ_SEL_LSB&#160;</td><td class="fielddoc"><p>DMA control register(16) (r/w): FIRQ trigger select LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a" name="a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a"></a>DMA_CTRL_FIRQ_SEL_MSB&#160;</td><td class="fielddoc"><p>DMA control register(19) (r/w): FIRQ trigger select MSB </p> +</td></tr> +</table> + +</div> +</div> +<a id="a002cb188ea5156df0ba282e239a6e74b" name="a002cb188ea5156df0ba282e239a6e74b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a002cb188ea5156df0ba282e239a6e74b">&#9670;&#160;</a></span>NEORV32_DMA_STATUS_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a002cb188ea5156df0ba282e239a6e74b">NEORV32_DMA_STATUS_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA status </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8" name="a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8"></a>DMA_STATUS_ERR_WR&#160;</td><td class="fielddoc"><p>write access error during last transfer (-2) </p> +</td></tr> +<tr><td class="fieldname"><a id="a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492" name="a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492"></a>DMA_STATUS_ERR_RD&#160;</td><td class="fielddoc"><p>read access error during last transfer (-1) </p> +</td></tr> +<tr><td class="fieldname"><a id="a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f" name="a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f"></a>DMA_STATUS_IDLE&#160;</td><td class="fielddoc"><p>DMA idle (0) </p> +</td></tr> +<tr><td class="fieldname"><a id="a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d" name="a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d"></a>DMA_STATUS_BUSY&#160;</td><td class="fielddoc"><p>DMA busy (1) </p> +</td></tr> +</table> + +</div> +</div> +<a id="a33187c5a074d62b46d2262e352edb8d9" name="a33187c5a074d62b46d2262e352edb8d9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a33187c5a074d62b46d2262e352edb8d9">&#9670;&#160;</a></span>NEORV32_DMA_TTYPE_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a33187c5a074d62b46d2262e352edb8d9">NEORV32_DMA_TTYPE_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>DMA transfer type bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450" name="a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450"></a>DMA_TTYPE_NUM_LSB&#160;</td><td class="fielddoc"><p>DMA transfer type register(0) (r/w): Number of elements to transfer, LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd" name="a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd"></a>DMA_TTYPE_NUM_MSB&#160;</td><td class="fielddoc"><p>DMA transfer type register(23) (r/w): Number of elements to transfer, MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2" name="a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2"></a>DMA_TTYPE_QSEL_LSB&#160;</td><td class="fielddoc"><p>DMA transfer type register(27) (r/w): Data quantity select, LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5" name="a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5"></a>DMA_TTYPE_QSEL_MSB&#160;</td><td class="fielddoc"><p>DMA transfer type register(28) (r/w): Data quantity select, MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec" name="a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec"></a>DMA_TTYPE_SRC_INC&#160;</td><td class="fielddoc"><p>DMA transfer type register(29) (r/w): SRC constant (0) or incrementing (1) address </p> +</td></tr> +<tr><td class="fieldname"><a id="a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da" name="a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da"></a>DMA_TTYPE_DST_INC&#160;</td><td class="fielddoc"><p>DMA transfer type register(30) (r/w): SRC constant (0) or incrementing (1) address </p> +</td></tr> +<tr><td class="fieldname"><a id="a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802" name="a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802"></a>DMA_TTYPE_ENDIAN&#160;</td><td class="fielddoc"><p>DMA transfer type register(31) (r/w): Convert Endianness when set </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a13260c3252f0375d8982590d270d7dfd" name="a13260c3252f0375d8982590d270d7dfd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a13260c3252f0375d8982590d270d7dfd">&#9670;&#160;</a></span>neorv32_dma_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_dma_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if DMA controller was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if DMA was not synthesized, 1 if DMA is available. </dd></dl> + +</div> +</div> +<a id="a6df244028455cf7f8d4cf1520c4670a7" name="a6df244028455cf7f8d4cf1520c4670a7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6df244028455cf7f8d4cf1520c4670a7">&#9670;&#160;</a></span>neorv32_dma_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_dma_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable DMA. This will reset the DMA and will also terminate the current transfer. </p> + +</div> +</div> +<a id="afc8cc32f7d80d0f5ab33b2f1ecf77956" name="afc8cc32f7d80d0f5ab33b2f1ecf77956"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afc8cc32f7d80d0f5ab33b2f1ecf77956">&#9670;&#160;</a></span>neorv32_dma_done()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_dma_done </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if a transfer has actually been executed.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if no transfer was executed, 1 if a transfer has actually been executed. Use neorv32_dma_status(void) to check if there was an error during that transfer. </dd></dl> + +</div> +</div> +<a id="ac3b72447e8a132faf26577ac714b8284" name="ac3b72447e8a132faf26577ac714b8284"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac3b72447e8a132faf26577ac714b8284">&#9670;&#160;</a></span>neorv32_dma_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_dma_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable DMA. </p> + +</div> +</div> +<a id="a8f37adfa07050b0a1cb8430c9ce1fcc2" name="a8f37adfa07050b0a1cb8430c9ce1fcc2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8f37adfa07050b0a1cb8430c9ce1fcc2">&#9670;&#160;</a></span>neorv32_dma_fence_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_dma_fence_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable memory barrier (fence). </p> + +</div> +</div> +<a id="a2c7257567ccdb7a986f5ef7c74d3917c" name="a2c7257567ccdb7a986f5ef7c74d3917c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2c7257567ccdb7a986f5ef7c74d3917c">&#9670;&#160;</a></span>neorv32_dma_fence_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_dma_fence_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable memory barrier (fence): issue a FENCE operation when DMA transfer completes without errors. </p> + +</div> +</div> +<a id="aa116f9714174abbe8a3583e441fee24b" name="aa116f9714174abbe8a3583e441fee24b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa116f9714174abbe8a3583e441fee24b">&#9670;&#160;</a></span>neorv32_dma_status()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_dma_status </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get DMA status.</p> +<dl class="section return"><dt>Returns</dt><dd>Current DMA status (<a class="el" href="#a002cb188ea5156df0ba282e239a6e74b">NEORV32_DMA_STATUS_enum</a>) </dd></dl> + +</div> +</div> +<a id="a2ce0d31e04604b2523135d52a877febf" name="a2ce0d31e04604b2523135d52a877febf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2ce0d31e04604b2523135d52a877febf">&#9670;&#160;</a></span>neorv32_dma_transfer()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_dma_transfer </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>base_src</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>base_dst</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>num</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>config</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Trigger manual DMA transfer.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">base_src</td><td>Source base address (has to be aligned to source data type!). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">base_dst</td><td>Destination base address (has to be aligned to destination data type!). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">num</td><td>Number of elements to transfer (24-bit). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">config</td><td>Transfer type configuration/commands. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a6ebd1595ee6fa0e6cbfbd1ce7476f18e" name="a6ebd1595ee6fa0e6cbfbd1ce7476f18e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6ebd1595ee6fa0e6cbfbd1ce7476f18e">&#9670;&#160;</a></span>neorv32_dma_transfer_auto()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_dma_transfer_auto </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>base_src</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>base_dst</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>num</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>config</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>firq_sel</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>firq_type</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Configure automatic DMA transfer (triggered by CPU FIRQ).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">base_src</td><td>Source base address (has to be aligned to source data type!). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">base_dst</td><td>Destination base address (has to be aligned to destination data type!). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">num</td><td>Number of elements to transfer (24-bit). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">config</td><td>Transfer type configuration/commands. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">firq_sel</td><td>FIRQ trigger select (<a class="el" href="neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b">NEORV32_CSR_MIP_enum</a>); only FIRQ0..FIRQ15 = 16..31. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">firq_type</td><td>Trigger on rising-edge (0) or high-level (1) of FIRQ channel. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__dma_8h_source.html b/sw/neorv32__dma_8h_source.html new file mode 100644 index 0000000000..c4ef9bb0fe --- /dev/null +++ b/sw/neorv32__dma_8h_source.html @@ -0,0 +1,228 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_dma.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_dma.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__dma_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_dma_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_dma_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__dma__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__dma__t.html#a8480d6ad3ba5063cdf21dca286711569"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__dma__t.html#a8480d6ad3ba5063cdf21dca286711569">CTRL</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__dma__t.html#a3b214d1a373c7f15b374e113d7110b42"> 31</a></span> uint32_t <a class="code hl_variable" href="structneorv32__dma__t.html#a3b214d1a373c7f15b374e113d7110b42">SRC_BASE</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="structneorv32__dma__t.html#aee8a6cf3cbd9fe3c5995f046ffb9a1c0"> 32</a></span> uint32_t <a class="code hl_variable" href="structneorv32__dma__t.html#aee8a6cf3cbd9fe3c5995f046ffb9a1c0">DST_BASE</a>; </div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="structneorv32__dma__t.html#a70c28642195765409d97b941e98f47ca"> 33</a></span> uint32_t <a class="code hl_variable" href="structneorv32__dma__t.html#a70c28642195765409d97b941e98f47ca">TTYPE</a>; </div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span>} <a class="code hl_struct" href="structneorv32__dma__t.html">neorv32_dma_t</a>;</div> +</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a0dcb61a0e0d2b45beb7818015adc8639"> 37</a></span><span class="preprocessor">#define NEORV32_DMA ((neorv32_dma_t*) (NEORV32_DMA_BASE))</span></div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="foldopen" id="foldopen00040" data-start="{" data-end="};"> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4"> 40</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4">NEORV32_DMA_CTRL_enum</a> {</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838">DMA_CTRL_EN</a> = 0, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b">DMA_CTRL_AUTO</a> = 1, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00">DMA_CTRL_FENCE</a> = 2, </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96"> 45</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96">DMA_CTRL_ERROR_RD</a> = 8, </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101"> 46</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101">DMA_CTRL_ERROR_WR</a> = 9, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb">DMA_CTRL_BUSY</a> = 10, </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc"> 48</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc">DMA_CTRL_DONE</a> = 11, </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe"> 50</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe">DMA_CTRL_FIRQ_TYPE</a> = 15, </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9"> 51</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9">DMA_CTRL_FIRQ_SEL_LSB</a> = 16, </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a">DMA_CTRL_FIRQ_SEL_MSB</a> = 19 </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a"> 53</a></span>};</div> +</div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div> +<div class="foldopen" id="foldopen00056" data-start="{" data-end="};"> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9"> 56</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9">NEORV32_DMA_TTYPE_enum</a> {</div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450"> 57</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450">DMA_TTYPE_NUM_LSB</a> = 0, </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd"> 58</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd">DMA_TTYPE_NUM_MSB</a> = 23, </div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2"> 60</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2">DMA_TTYPE_QSEL_LSB</a> = 27, </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5"> 61</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5">DMA_TTYPE_QSEL_MSB</a> = 28, </div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec"> 62</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec">DMA_TTYPE_SRC_INC</a> = 29, </div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da"> 63</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da">DMA_TTYPE_DST_INC</a> = 30, </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802">DMA_TTYPE_ENDIAN</a> = 31 </div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802"> 65</a></span>};</div> +</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a5e01d4454c97eb8e4ecd1455090bbfa9"> 73</a></span><span class="preprocessor">#define DMA_CMD_B2B (0b00 &lt;&lt; DMA_TTYPE_QSEL_LSB) </span><span class="comment">// byte to byte</span></div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#aeb63f99217f14d1ddde35c1f6c104e72"> 74</a></span><span class="preprocessor">#define DMA_CMD_B2UW (0b01 &lt;&lt; DMA_TTYPE_QSEL_LSB) </span><span class="comment">// byte to unsigned word</span></div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#adfecb3debff251070e4f6eb809412129"> 75</a></span><span class="preprocessor">#define DMA_CMD_B2SW (0b10 &lt;&lt; DMA_TTYPE_QSEL_LSB) </span><span class="comment">// byte to signed word</span></div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a13a16ba8d6daf9c82312bf4d392d15a8"> 76</a></span><span class="preprocessor">#define DMA_CMD_W2W (0b11 &lt;&lt; DMA_TTYPE_QSEL_LSB) </span><span class="comment">// word to word</span></div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#ae380022d8b8fb70da91f0892f2bc32c8"> 78</a></span><span class="preprocessor">#define DMA_CMD_SRC_CONST (0b0 &lt;&lt; DMA_TTYPE_SRC_INC) </span><span class="comment">// constant source address</span></div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#acc081d58b53d1eddd2bff35b128d7da2"> 79</a></span><span class="preprocessor">#define DMA_CMD_SRC_INC (0b1 &lt;&lt; DMA_TTYPE_SRC_INC) </span><span class="comment">// incrementing source address</span></div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a6a0ce532aad39e6489e9d52bcb6f4cd2"> 81</a></span><span class="preprocessor">#define DMA_CMD_DST_CONST (0b0 &lt;&lt; DMA_TTYPE_DST_INC) </span><span class="comment">// constant destination address</span></div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a61caa2602c6b148af55d990e3c0ae6be"> 82</a></span><span class="preprocessor">#define DMA_CMD_DST_INC (0b1 &lt;&lt; DMA_TTYPE_DST_INC) </span><span class="comment">// incrementing destination address</span></div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> </div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a18fb7faa0a35f562821ca854d7c648b4"> 84</a></span><span class="preprocessor">#define DMA_CMD_ENDIAN (0b1 &lt;&lt; DMA_TTYPE_ENDIAN) </span><span class="comment">// convert endianness</span></div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="comment">/**********************************************************************/</span><span class="preprocessor"></span></div> +<div class="foldopen" id="foldopen00091" data-start="{" data-end="};"> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74b"> 91</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74b">NEORV32_DMA_STATUS_enum</a> {</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8"> 92</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8">DMA_STATUS_ERR_WR</a> = -2, </div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492"> 93</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492">DMA_STATUS_ERR_RD</a> = -1, </div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f"> 94</a></span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f">DMA_STATUS_IDLE</a> = 0, </div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <a class="code hl_enumvalue" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d">DMA_STATUS_BUSY</a> = 1 </div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"><a class="line" href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d"> 96</a></span>};</div> +</div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__dma_8h.html#a13260c3252f0375d8982590d270d7dfd">neorv32_dma_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__dma_8h.html#ac3b72447e8a132faf26577ac714b8284">neorv32_dma_enable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__dma_8h.html#a6df244028455cf7f8d4cf1520c4670a7">neorv32_dma_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__dma_8h.html#a2c7257567ccdb7a986f5ef7c74d3917c">neorv32_dma_fence_enable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__dma_8h.html#a8f37adfa07050b0a1cb8430c9ce1fcc2">neorv32_dma_fence_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__dma_8h.html#a2ce0d31e04604b2523135d52a877febf">neorv32_dma_transfer</a>(uint32_t base_src, uint32_t base_dst, uint32_t num, uint32_t config);</div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__dma_8h.html#a6ebd1595ee6fa0e6cbfbd1ce7476f18e">neorv32_dma_transfer_auto</a>(uint32_t base_src, uint32_t base_dst, uint32_t num, uint32_t config, <span class="keywordtype">int</span> firq_sel, <span class="keywordtype">int</span> firq_type);</div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__dma_8h.html#aa116f9714174abbe8a3583e441fee24b">neorv32_dma_status</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__dma_8h.html#afc8cc32f7d80d0f5ab33b2f1ecf77956">neorv32_dma_done</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_dma_h</span></div> +<div class="ttc" id="aneorv32__dma_8h_html_a002cb188ea5156df0ba282e239a6e74b"><div class="ttname"><a href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74b">NEORV32_DMA_STATUS_enum</a></div><div class="ttdeci">NEORV32_DMA_STATUS_enum</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:91</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8"><div class="ttname"><a href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8">DMA_STATUS_ERR_WR</a></div><div class="ttdeci">@ DMA_STATUS_ERR_WR</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:92</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f"><div class="ttname"><a href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f">DMA_STATUS_IDLE</a></div><div class="ttdeci">@ DMA_STATUS_IDLE</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:94</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d"><div class="ttname"><a href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d">DMA_STATUS_BUSY</a></div><div class="ttdeci">@ DMA_STATUS_BUSY</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:95</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492"><div class="ttname"><a href="neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492">DMA_STATUS_ERR_RD</a></div><div class="ttdeci">@ DMA_STATUS_ERR_RD</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:93</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a13260c3252f0375d8982590d270d7dfd"><div class="ttname"><a href="neorv32__dma_8h.html#a13260c3252f0375d8982590d270d7dfd">neorv32_dma_available</a></div><div class="ttdeci">int neorv32_dma_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_dma.c:26</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a2c7257567ccdb7a986f5ef7c74d3917c"><div class="ttname"><a href="neorv32__dma_8h.html#a2c7257567ccdb7a986f5ef7c74d3917c">neorv32_dma_fence_enable</a></div><div class="ttdeci">void neorv32_dma_fence_enable(void)</div><div class="ttdef"><b>Definition</b> neorv32_dma.c:59</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a2ce0d31e04604b2523135d52a877febf"><div class="ttname"><a href="neorv32__dma_8h.html#a2ce0d31e04604b2523135d52a877febf">neorv32_dma_transfer</a></div><div class="ttdeci">void neorv32_dma_transfer(uint32_t base_src, uint32_t base_dst, uint32_t num, uint32_t config)</div><div class="ttdef"><b>Definition</b> neorv32_dma.c:82</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a33187c5a074d62b46d2262e352edb8d9"><div class="ttname"><a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9">NEORV32_DMA_TTYPE_enum</a></div><div class="ttdeci">NEORV32_DMA_TTYPE_enum</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:56</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802"><div class="ttname"><a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802">DMA_TTYPE_ENDIAN</a></div><div class="ttdeci">@ DMA_TTYPE_ENDIAN</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:64</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5"><div class="ttname"><a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5">DMA_TTYPE_QSEL_MSB</a></div><div class="ttdeci">@ DMA_TTYPE_QSEL_MSB</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:61</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec"><div class="ttname"><a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec">DMA_TTYPE_SRC_INC</a></div><div class="ttdeci">@ DMA_TTYPE_SRC_INC</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:62</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd"><div class="ttname"><a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd">DMA_TTYPE_NUM_MSB</a></div><div class="ttdeci">@ DMA_TTYPE_NUM_MSB</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:58</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450"><div class="ttname"><a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450">DMA_TTYPE_NUM_LSB</a></div><div class="ttdeci">@ DMA_TTYPE_NUM_LSB</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:57</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da"><div class="ttname"><a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da">DMA_TTYPE_DST_INC</a></div><div class="ttdeci">@ DMA_TTYPE_DST_INC</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:63</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2"><div class="ttname"><a href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2">DMA_TTYPE_QSEL_LSB</a></div><div class="ttdeci">@ DMA_TTYPE_QSEL_LSB</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:60</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a6716eddb145b80ad38799da3b87cb2a4"><div class="ttname"><a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4">NEORV32_DMA_CTRL_enum</a></div><div class="ttdeci">NEORV32_DMA_CTRL_enum</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:40</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc"><div class="ttname"><a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc">DMA_CTRL_DONE</a></div><div class="ttdeci">@ DMA_CTRL_DONE</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:48</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a"><div class="ttname"><a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a">DMA_CTRL_FIRQ_SEL_MSB</a></div><div class="ttdeci">@ DMA_CTRL_FIRQ_SEL_MSB</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:52</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96"><div class="ttname"><a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96">DMA_CTRL_ERROR_RD</a></div><div class="ttdeci">@ DMA_CTRL_ERROR_RD</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:45</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b"><div class="ttname"><a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b">DMA_CTRL_AUTO</a></div><div class="ttdeci">@ DMA_CTRL_AUTO</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:42</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838"><div class="ttname"><a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838">DMA_CTRL_EN</a></div><div class="ttdeci">@ DMA_CTRL_EN</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:41</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb"><div class="ttname"><a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb">DMA_CTRL_BUSY</a></div><div class="ttdeci">@ DMA_CTRL_BUSY</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:47</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9"><div class="ttname"><a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9">DMA_CTRL_FIRQ_SEL_LSB</a></div><div class="ttdeci">@ DMA_CTRL_FIRQ_SEL_LSB</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:51</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00"><div class="ttname"><a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00">DMA_CTRL_FENCE</a></div><div class="ttdeci">@ DMA_CTRL_FENCE</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:43</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe"><div class="ttname"><a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe">DMA_CTRL_FIRQ_TYPE</a></div><div class="ttdeci">@ DMA_CTRL_FIRQ_TYPE</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:50</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101"><div class="ttname"><a href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101">DMA_CTRL_ERROR_WR</a></div><div class="ttdeci">@ DMA_CTRL_ERROR_WR</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:46</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a6df244028455cf7f8d4cf1520c4670a7"><div class="ttname"><a href="neorv32__dma_8h.html#a6df244028455cf7f8d4cf1520c4670a7">neorv32_dma_disable</a></div><div class="ttdeci">void neorv32_dma_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_dma.c:49</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a6ebd1595ee6fa0e6cbfbd1ce7476f18e"><div class="ttname"><a href="neorv32__dma_8h.html#a6ebd1595ee6fa0e6cbfbd1ce7476f18e">neorv32_dma_transfer_auto</a></div><div class="ttdeci">void neorv32_dma_transfer_auto(uint32_t base_src, uint32_t base_dst, uint32_t num, uint32_t config, int firq_sel, int firq_type)</div><div class="ttdef"><b>Definition</b> neorv32_dma.c:101</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_a8f37adfa07050b0a1cb8430c9ce1fcc2"><div class="ttname"><a href="neorv32__dma_8h.html#a8f37adfa07050b0a1cb8430c9ce1fcc2">neorv32_dma_fence_disable</a></div><div class="ttdeci">void neorv32_dma_fence_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_dma.c:68</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_aa116f9714174abbe8a3583e441fee24b"><div class="ttname"><a href="neorv32__dma_8h.html#aa116f9714174abbe8a3583e441fee24b">neorv32_dma_status</a></div><div class="ttdeci">int neorv32_dma_status(void)</div><div class="ttdef"><b>Definition</b> neorv32_dma.c:121</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_ac3b72447e8a132faf26577ac714b8284"><div class="ttname"><a href="neorv32__dma_8h.html#ac3b72447e8a132faf26577ac714b8284">neorv32_dma_enable</a></div><div class="ttdeci">void neorv32_dma_enable(void)</div><div class="ttdef"><b>Definition</b> neorv32_dma.c:40</div></div> +<div class="ttc" id="aneorv32__dma_8h_html_afc8cc32f7d80d0f5ab33b2f1ecf77956"><div class="ttname"><a href="neorv32__dma_8h.html#afc8cc32f7d80d0f5ab33b2f1ecf77956">neorv32_dma_done</a></div><div class="ttdeci">int neorv32_dma_done(void)</div><div class="ttdef"><b>Definition</b> neorv32_dma.c:146</div></div> +<div class="ttc" id="astructneorv32__dma__t_html"><div class="ttname"><a href="structneorv32__dma__t.html">neorv32_dma_t</a></div><div class="ttdef"><b>Definition</b> neorv32_dma.h:29</div></div> +<div class="ttc" id="astructneorv32__dma__t_html_a3b214d1a373c7f15b374e113d7110b42"><div class="ttname"><a href="structneorv32__dma__t.html#a3b214d1a373c7f15b374e113d7110b42">neorv32_dma_t::SRC_BASE</a></div><div class="ttdeci">uint32_t SRC_BASE</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:31</div></div> +<div class="ttc" id="astructneorv32__dma__t_html_a70c28642195765409d97b941e98f47ca"><div class="ttname"><a href="structneorv32__dma__t.html#a70c28642195765409d97b941e98f47ca">neorv32_dma_t::TTYPE</a></div><div class="ttdeci">uint32_t TTYPE</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:33</div></div> +<div class="ttc" id="astructneorv32__dma__t_html_a8480d6ad3ba5063cdf21dca286711569"><div class="ttname"><a href="structneorv32__dma__t.html#a8480d6ad3ba5063cdf21dca286711569">neorv32_dma_t::CTRL</a></div><div class="ttdeci">uint32_t CTRL</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:30</div></div> +<div class="ttc" id="astructneorv32__dma__t_html_aee8a6cf3cbd9fe3c5995f046ffb9a1c0"><div class="ttname"><a href="structneorv32__dma__t.html#aee8a6cf3cbd9fe3c5995f046ffb9a1c0">neorv32_dma_t::DST_BASE</a></div><div class="ttdeci">uint32_t DST_BASE</div><div class="ttdef"><b>Definition</b> neorv32_dma.h:32</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__gpio_8c.html b/sw/neorv32__gpio_8c.html new file mode 100644 index 0000000000..cdf64fd385 --- /dev/null +++ b/sw/neorv32__gpio_8c.html @@ -0,0 +1,296 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_gpio.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_gpio.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>General purpose input/output port unit (GPIO) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a41d39a41ba5879eb85d3ed4481fcff81" id="r_a41d39a41ba5879eb85d3ed4481fcff81"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a41d39a41ba5879eb85d3ed4481fcff81">neorv32_gpio_available</a> (void)</td></tr> +<tr class="separator:a41d39a41ba5879eb85d3ed4481fcff81"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a60fd0830d634f0c1f784d815384665cb" id="r_a60fd0830d634f0c1f784d815384665cb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a60fd0830d634f0c1f784d815384665cb">neorv32_gpio_pin_set</a> (int pin, int value)</td></tr> +<tr class="separator:a60fd0830d634f0c1f784d815384665cb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1958850fc1689eae9ddfcaa4a7513400" id="r_a1958850fc1689eae9ddfcaa4a7513400"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1958850fc1689eae9ddfcaa4a7513400">neorv32_gpio_pin_toggle</a> (int pin)</td></tr> +<tr class="separator:a1958850fc1689eae9ddfcaa4a7513400"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afa3ee54aca47ff35f706b627ac66e95a" id="r_afa3ee54aca47ff35f706b627ac66e95a"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afa3ee54aca47ff35f706b627ac66e95a">neorv32_gpio_pin_get</a> (int pin)</td></tr> +<tr class="separator:afa3ee54aca47ff35f706b627ac66e95a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8dc7846945e4609fc96d81caee99ac00" id="r_a8dc7846945e4609fc96d81caee99ac00"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8dc7846945e4609fc96d81caee99ac00">neorv32_gpio_port_set</a> (uint64_t port_data)</td></tr> +<tr class="separator:a8dc7846945e4609fc96d81caee99ac00"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a210529f789779387d3f014e6253e803f" id="r_a210529f789779387d3f014e6253e803f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a210529f789779387d3f014e6253e803f">neorv32_gpio_port_toggle</a> (uint64_t toggle)</td></tr> +<tr class="separator:a210529f789779387d3f014e6253e803f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac42379f2fb5ca0bb63850d7957852b84" id="r_ac42379f2fb5ca0bb63850d7957852b84"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac42379f2fb5ca0bb63850d7957852b84">neorv32_gpio_port_get</a> (void)</td></tr> +<tr class="separator:ac42379f2fb5ca0bb63850d7957852b84"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>General purpose input/output port unit (GPIO) HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the GPIO unit was synthesized (IO_GPIO_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a41d39a41ba5879eb85d3ed4481fcff81" name="a41d39a41ba5879eb85d3ed4481fcff81"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a41d39a41ba5879eb85d3ed4481fcff81">&#9670;&#160;</a></span>neorv32_gpio_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_gpio_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if GPIO unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if GPIO was not synthesized, 1 if GPIO is available. </dd></dl> + +</div> +</div> +<a id="afa3ee54aca47ff35f706b627ac66e95a" name="afa3ee54aca47ff35f706b627ac66e95a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afa3ee54aca47ff35f706b627ac66e95a">&#9670;&#160;</a></span>neorv32_gpio_pin_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_gpio_pin_get </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>pin</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get single pin of GPIO's input port.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">pin</td><td>Input pin to be read (0..63). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>=0 if pin is low, !=0 if pin is high. </dd></dl> + +</div> +</div> +<a id="a60fd0830d634f0c1f784d815384665cb" name="a60fd0830d634f0c1f784d815384665cb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a60fd0830d634f0c1f784d815384665cb">&#9670;&#160;</a></span>neorv32_gpio_pin_set()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gpio_pin_set </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>pin</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>value</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set single pin of GPIO's output port.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">pin</td><td>Output pin number to be set (0..63). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>Set pint high (1) or low (0). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a1958850fc1689eae9ddfcaa4a7513400" name="a1958850fc1689eae9ddfcaa4a7513400"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1958850fc1689eae9ddfcaa4a7513400">&#9670;&#160;</a></span>neorv32_gpio_pin_toggle()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gpio_pin_toggle </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>pin</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Toggle single pin of GPIO's output port.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">pin</td><td>Output pin number to be toggled (0..63). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac42379f2fb5ca0bb63850d7957852b84" name="ac42379f2fb5ca0bb63850d7957852b84"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac42379f2fb5ca0bb63850d7957852b84">&#9670;&#160;</a></span>neorv32_gpio_port_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_gpio_port_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get complete GPIO input port.</p> +<dl class="section return"><dt>Returns</dt><dd>Current input port state (64-bit). </dd></dl> + +</div> +</div> +<a id="a8dc7846945e4609fc96d81caee99ac00" name="a8dc7846945e4609fc96d81caee99ac00"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8dc7846945e4609fc96d81caee99ac00">&#9670;&#160;</a></span>neorv32_gpio_port_set()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gpio_port_set </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>port_data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set complete GPIO output port.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">port_data</td><td>New output port value (64-bit). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a210529f789779387d3f014e6253e803f" name="a210529f789779387d3f014e6253e803f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a210529f789779387d3f014e6253e803f">&#9670;&#160;</a></span>neorv32_gpio_port_toggle()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gpio_port_toggle </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>toggle</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Toggle bit in entire GPIO output port.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">toggle</td><td>Bit mask; set bits will toggle the according output port (64-bit). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__gpio_8h.html b/sw/neorv32__gpio_8h.html new file mode 100644 index 0000000000..972817b105 --- /dev/null +++ b/sw/neorv32__gpio_8h.html @@ -0,0 +1,326 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_gpio.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_gpio.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>General purpose input/output port unit (GPIO) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__gpio_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__gpio__t.html">neorv32_gpio_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">IO Device: General Purpose Input/Output Port Unit (GPIO)</div></td></tr> +<tr class="memitem:a1e35bbf26b9d1aa5373af0b9468eb445" id="r_a1e35bbf26b9d1aa5373af0b9468eb445"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1e35bbf26b9d1aa5373af0b9468eb445">NEORV32_GPIO</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__gpio__t.html">neorv32_gpio_t</a>*) (<a class="el" href="neorv32_8h.html#a7fd1e24d4de2eed7bf9cd5391562c7f4">NEORV32_GPIO_BASE</a>))</td></tr> +<tr class="separator:a1e35bbf26b9d1aa5373af0b9468eb445"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:a41d39a41ba5879eb85d3ed4481fcff81" id="r_a41d39a41ba5879eb85d3ed4481fcff81"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a41d39a41ba5879eb85d3ed4481fcff81">neorv32_gpio_available</a> (void)</td></tr> +<tr class="separator:a41d39a41ba5879eb85d3ed4481fcff81"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a60fd0830d634f0c1f784d815384665cb" id="r_a60fd0830d634f0c1f784d815384665cb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a60fd0830d634f0c1f784d815384665cb">neorv32_gpio_pin_set</a> (int pin, int value)</td></tr> +<tr class="separator:a60fd0830d634f0c1f784d815384665cb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1958850fc1689eae9ddfcaa4a7513400" id="r_a1958850fc1689eae9ddfcaa4a7513400"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1958850fc1689eae9ddfcaa4a7513400">neorv32_gpio_pin_toggle</a> (int pin)</td></tr> +<tr class="separator:a1958850fc1689eae9ddfcaa4a7513400"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afa3ee54aca47ff35f706b627ac66e95a" id="r_afa3ee54aca47ff35f706b627ac66e95a"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afa3ee54aca47ff35f706b627ac66e95a">neorv32_gpio_pin_get</a> (int pin)</td></tr> +<tr class="separator:afa3ee54aca47ff35f706b627ac66e95a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a789222709485cd8467aad5eddf69d2df" id="r_a789222709485cd8467aad5eddf69d2df"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a789222709485cd8467aad5eddf69d2df">neorv32_gpio_port_set</a> (uint64_t d)</td></tr> +<tr class="separator:a789222709485cd8467aad5eddf69d2df"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a210529f789779387d3f014e6253e803f" id="r_a210529f789779387d3f014e6253e803f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a210529f789779387d3f014e6253e803f">neorv32_gpio_port_toggle</a> (uint64_t toggle)</td></tr> +<tr class="separator:a210529f789779387d3f014e6253e803f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac42379f2fb5ca0bb63850d7957852b84" id="r_ac42379f2fb5ca0bb63850d7957852b84"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac42379f2fb5ca0bb63850d7957852b84">neorv32_gpio_port_get</a> (void)</td></tr> +<tr class="separator:ac42379f2fb5ca0bb63850d7957852b84"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>General purpose input/output port unit (GPIO) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the GPIO unit was synthesized (IO_GPIO_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a1e35bbf26b9d1aa5373af0b9468eb445" name="a1e35bbf26b9d1aa5373af0b9468eb445"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1e35bbf26b9d1aa5373af0b9468eb445">&#9670;&#160;</a></span>NEORV32_GPIO</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_GPIO&#160;&#160;&#160;((<a class="el" href="structneorv32__gpio__t.html">neorv32_gpio_t</a>*) (<a class="el" href="neorv32_8h.html#a7fd1e24d4de2eed7bf9cd5391562c7f4">NEORV32_GPIO_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>GPIO module hardware access (<a class="el" href="structneorv32__gpio__t.html">neorv32_gpio_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a41d39a41ba5879eb85d3ed4481fcff81" name="a41d39a41ba5879eb85d3ed4481fcff81"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a41d39a41ba5879eb85d3ed4481fcff81">&#9670;&#160;</a></span>neorv32_gpio_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_gpio_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if GPIO unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if GPIO was not synthesized, 1 if GPIO is available. </dd></dl> + +</div> +</div> +<a id="afa3ee54aca47ff35f706b627ac66e95a" name="afa3ee54aca47ff35f706b627ac66e95a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afa3ee54aca47ff35f706b627ac66e95a">&#9670;&#160;</a></span>neorv32_gpio_pin_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_gpio_pin_get </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>pin</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get single pin of GPIO's input port.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">pin</td><td>Input pin to be read (0..63). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>=0 if pin is low, !=0 if pin is high. </dd></dl> + +</div> +</div> +<a id="a60fd0830d634f0c1f784d815384665cb" name="a60fd0830d634f0c1f784d815384665cb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a60fd0830d634f0c1f784d815384665cb">&#9670;&#160;</a></span>neorv32_gpio_pin_set()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gpio_pin_set </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>pin</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>value</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set single pin of GPIO's output port.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">pin</td><td>Output pin number to be set (0..63). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>Set pint high (1) or low (0). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a1958850fc1689eae9ddfcaa4a7513400" name="a1958850fc1689eae9ddfcaa4a7513400"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1958850fc1689eae9ddfcaa4a7513400">&#9670;&#160;</a></span>neorv32_gpio_pin_toggle()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gpio_pin_toggle </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>pin</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Toggle single pin of GPIO's output port.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">pin</td><td>Output pin number to be toggled (0..63). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac42379f2fb5ca0bb63850d7957852b84" name="ac42379f2fb5ca0bb63850d7957852b84"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac42379f2fb5ca0bb63850d7957852b84">&#9670;&#160;</a></span>neorv32_gpio_port_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint64_t neorv32_gpio_port_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get complete GPIO input port.</p> +<dl class="section return"><dt>Returns</dt><dd>Current input port state (64-bit). </dd></dl> + +</div> +</div> +<a id="a789222709485cd8467aad5eddf69d2df" name="a789222709485cd8467aad5eddf69d2df"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a789222709485cd8467aad5eddf69d2df">&#9670;&#160;</a></span>neorv32_gpio_port_set()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gpio_port_set </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>port_data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set complete GPIO output port.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">port_data</td><td>New output port value (64-bit). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a210529f789779387d3f014e6253e803f" name="a210529f789779387d3f014e6253e803f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a210529f789779387d3f014e6253e803f">&#9670;&#160;</a></span>neorv32_gpio_port_toggle()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gpio_port_toggle </td> + <td>(</td> + <td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>toggle</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Toggle bit in entire GPIO output port.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">toggle</td><td>Bit mask; set bits will toggle the according output port (64-bit). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__gpio_8h_source.html b/sw/neorv32__gpio_8h_source.html new file mode 100644 index 0000000000..c6338dbf88 --- /dev/null +++ b/sw/neorv32__gpio_8h_source.html @@ -0,0 +1,143 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_gpio.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_gpio.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__gpio_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_gpio_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_gpio_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__gpio__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__gpio__t.html#a208ee622d43fee3574072f19a98c8808"> 30</a></span> <span class="keyword">const</span> uint32_t INPUT[2]; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__gpio__t.html#abaf7de4f79adfc3debcde93fa4a921bb"> 31</a></span> uint32_t OUTPUT[2]; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>} <a class="code hl_struct" href="structneorv32__gpio__t.html">neorv32_gpio_t</a>;</div> +</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__gpio_8h.html#a1e35bbf26b9d1aa5373af0b9468eb445"> 35</a></span><span class="preprocessor">#define NEORV32_GPIO ((neorv32_gpio_t*) (NEORV32_GPIO_BASE))</span></div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__gpio_8h.html#a41d39a41ba5879eb85d3ed4481fcff81">neorv32_gpio_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__gpio_8h.html#a60fd0830d634f0c1f784d815384665cb">neorv32_gpio_pin_set</a>(<span class="keywordtype">int</span> pin, <span class="keywordtype">int</span> value);</div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__gpio_8h.html#a1958850fc1689eae9ddfcaa4a7513400">neorv32_gpio_pin_toggle</a>(<span class="keywordtype">int</span> pin);</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span>uint32_t <a class="code hl_function" href="neorv32__gpio_8h.html#afa3ee54aca47ff35f706b627ac66e95a">neorv32_gpio_pin_get</a>(<span class="keywordtype">int</span> pin);</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__gpio_8h.html#a789222709485cd8467aad5eddf69d2df">neorv32_gpio_port_set</a>(uint64_t d);</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__gpio_8h.html#a210529f789779387d3f014e6253e803f">neorv32_gpio_port_toggle</a>(uint64_t toggle);</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span>uint64_t <a class="code hl_function" href="neorv32__gpio_8h.html#ac42379f2fb5ca0bb63850d7957852b84">neorv32_gpio_port_get</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_gpio_h</span></div> +<div class="ttc" id="aneorv32__gpio_8h_html_a1958850fc1689eae9ddfcaa4a7513400"><div class="ttname"><a href="neorv32__gpio_8h.html#a1958850fc1689eae9ddfcaa4a7513400">neorv32_gpio_pin_toggle</a></div><div class="ttdeci">void neorv32_gpio_pin_toggle(int pin)</div><div class="ttdef"><b>Definition</b> neorv32_gpio.c:62</div></div> +<div class="ttc" id="aneorv32__gpio_8h_html_a210529f789779387d3f014e6253e803f"><div class="ttname"><a href="neorv32__gpio_8h.html#a210529f789779387d3f014e6253e803f">neorv32_gpio_port_toggle</a></div><div class="ttdeci">void neorv32_gpio_port_toggle(uint64_t toggle)</div><div class="ttdef"><b>Definition</b> neorv32_gpio.c:104</div></div> +<div class="ttc" id="aneorv32__gpio_8h_html_a41d39a41ba5879eb85d3ed4481fcff81"><div class="ttname"><a href="neorv32__gpio_8h.html#a41d39a41ba5879eb85d3ed4481fcff81">neorv32_gpio_available</a></div><div class="ttdeci">int neorv32_gpio_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_gpio.c:26</div></div> +<div class="ttc" id="aneorv32__gpio_8h_html_a60fd0830d634f0c1f784d815384665cb"><div class="ttname"><a href="neorv32__gpio_8h.html#a60fd0830d634f0c1f784d815384665cb">neorv32_gpio_pin_set</a></div><div class="ttdeci">void neorv32_gpio_pin_set(int pin, int value)</div><div class="ttdef"><b>Definition</b> neorv32_gpio.c:43</div></div> +<div class="ttc" id="aneorv32__gpio_8h_html_a789222709485cd8467aad5eddf69d2df"><div class="ttname"><a href="neorv32__gpio_8h.html#a789222709485cd8467aad5eddf69d2df">neorv32_gpio_port_set</a></div><div class="ttdeci">void neorv32_gpio_port_set(uint64_t d)</div><div class="ttdef"><b>Definition</b> neorv32_gpio.c:89</div></div> +<div class="ttc" id="aneorv32__gpio_8h_html_ac42379f2fb5ca0bb63850d7957852b84"><div class="ttname"><a href="neorv32__gpio_8h.html#ac42379f2fb5ca0bb63850d7957852b84">neorv32_gpio_port_get</a></div><div class="ttdeci">uint64_t neorv32_gpio_port_get(void)</div><div class="ttdef"><b>Definition</b> neorv32_gpio.c:119</div></div> +<div class="ttc" id="aneorv32__gpio_8h_html_afa3ee54aca47ff35f706b627ac66e95a"><div class="ttname"><a href="neorv32__gpio_8h.html#afa3ee54aca47ff35f706b627ac66e95a">neorv32_gpio_pin_get</a></div><div class="ttdeci">uint32_t neorv32_gpio_pin_get(int pin)</div><div class="ttdef"><b>Definition</b> neorv32_gpio.c:76</div></div> +<div class="ttc" id="astructneorv32__gpio__t_html"><div class="ttname"><a href="structneorv32__gpio__t.html">neorv32_gpio_t</a></div><div class="ttdef"><b>Definition</b> neorv32_gpio.h:29</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__gptmr_8c.html b/sw/neorv32__gptmr_8c.html new file mode 100644 index 0000000000..40d86527ab --- /dev/null +++ b/sw/neorv32__gptmr_8c.html @@ -0,0 +1,236 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_gptmr.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_gptmr.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>General purpose timer (GPTMR) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ae79a08c52ad3e83f9c4393acfabf035f" id="r_ae79a08c52ad3e83f9c4393acfabf035f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae79a08c52ad3e83f9c4393acfabf035f">neorv32_gptmr_available</a> (void)</td></tr> +<tr class="separator:ae79a08c52ad3e83f9c4393acfabf035f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6aa27efd2163eebf8fc49fe1c591708f" id="r_a6aa27efd2163eebf8fc49fe1c591708f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6aa27efd2163eebf8fc49fe1c591708f">neorv32_gptmr_setup</a> (int prsc, uint32_t threshold, int cont_mode)</td></tr> +<tr class="separator:a6aa27efd2163eebf8fc49fe1c591708f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7c9bc6d28ad12611b08fa2867c2db874" id="r_a7c9bc6d28ad12611b08fa2867c2db874"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7c9bc6d28ad12611b08fa2867c2db874">neorv32_gptmr_disable</a> (void)</td></tr> +<tr class="separator:a7c9bc6d28ad12611b08fa2867c2db874"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a59e684348835772a7e83446e478d4a13" id="r_a59e684348835772a7e83446e478d4a13"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a59e684348835772a7e83446e478d4a13">neorv32_gptmr_enable</a> (void)</td></tr> +<tr class="separator:a59e684348835772a7e83446e478d4a13"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac73aa4e41a064abb4ca554a389888e67" id="r_ac73aa4e41a064abb4ca554a389888e67"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac73aa4e41a064abb4ca554a389888e67">neorv32_gptmr_irq_ack</a> (void)</td></tr> +<tr class="separator:ac73aa4e41a064abb4ca554a389888e67"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>General purpose timer (GPTMR) HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the GPTMR unit was synthesized (IO_GPTMR_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="ae79a08c52ad3e83f9c4393acfabf035f" name="ae79a08c52ad3e83f9c4393acfabf035f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae79a08c52ad3e83f9c4393acfabf035f">&#9670;&#160;</a></span>neorv32_gptmr_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_gptmr_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if general purpose timer unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if GPTMR was not synthesized, 1 if GPTMR is available. </dd></dl> + +</div> +</div> +<a id="a7c9bc6d28ad12611b08fa2867c2db874" name="a7c9bc6d28ad12611b08fa2867c2db874"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7c9bc6d28ad12611b08fa2867c2db874">&#9670;&#160;</a></span>neorv32_gptmr_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gptmr_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable general purpose timer. </p> + +</div> +</div> +<a id="a59e684348835772a7e83446e478d4a13" name="a59e684348835772a7e83446e478d4a13"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a59e684348835772a7e83446e478d4a13">&#9670;&#160;</a></span>neorv32_gptmr_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gptmr_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable general purpose timer. </p> + +</div> +</div> +<a id="ac73aa4e41a064abb4ca554a389888e67" name="ac73aa4e41a064abb4ca554a389888e67"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac73aa4e41a064abb4ca554a389888e67">&#9670;&#160;</a></span>neorv32_gptmr_irq_ack()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gptmr_irq_ack </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear pending timer interrupt. </p> + +</div> +</div> +<a id="a6aa27efd2163eebf8fc49fe1c591708f" name="a6aa27efd2163eebf8fc49fe1c591708f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6aa27efd2163eebf8fc49fe1c591708f">&#9670;&#160;</a></span>neorv32_gptmr_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gptmr_setup </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>prsc</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>threshold</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cont_mode</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset, enable and configure general purpose timer.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>Clock prescaler select (0..7). See <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">threshold</td><td>Threshold value, counter will reset to zero when reaching this. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">cont_mode</td><td>Set to operate timer in continuous mode (instead of single-shot mode). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__gptmr_8h.html b/sw/neorv32__gptmr_8h.html new file mode 100644 index 0000000000..c7f49871d9 --- /dev/null +++ b/sw/neorv32__gptmr_8h.html @@ -0,0 +1,308 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_gptmr.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_gptmr.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>General purpose timer (GPTMR) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__gptmr_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__gptmr__t.html">neorv32_gptmr_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:ae79a08c52ad3e83f9c4393acfabf035f" id="r_ae79a08c52ad3e83f9c4393acfabf035f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae79a08c52ad3e83f9c4393acfabf035f">neorv32_gptmr_available</a> (void)</td></tr> +<tr class="separator:ae79a08c52ad3e83f9c4393acfabf035f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6aa27efd2163eebf8fc49fe1c591708f" id="r_a6aa27efd2163eebf8fc49fe1c591708f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6aa27efd2163eebf8fc49fe1c591708f">neorv32_gptmr_setup</a> (int prsc, uint32_t threshold, int cont_mode)</td></tr> +<tr class="separator:a6aa27efd2163eebf8fc49fe1c591708f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7c9bc6d28ad12611b08fa2867c2db874" id="r_a7c9bc6d28ad12611b08fa2867c2db874"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7c9bc6d28ad12611b08fa2867c2db874">neorv32_gptmr_disable</a> (void)</td></tr> +<tr class="separator:a7c9bc6d28ad12611b08fa2867c2db874"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a59e684348835772a7e83446e478d4a13" id="r_a59e684348835772a7e83446e478d4a13"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a59e684348835772a7e83446e478d4a13">neorv32_gptmr_enable</a> (void)</td></tr> +<tr class="separator:a59e684348835772a7e83446e478d4a13"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac73aa4e41a064abb4ca554a389888e67" id="r_ac73aa4e41a064abb4ca554a389888e67"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac73aa4e41a064abb4ca554a389888e67">neorv32_gptmr_irq_ack</a> (void)</td></tr> +<tr class="separator:ac73aa4e41a064abb4ca554a389888e67"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: General Purpose Timer (GPTMR)</h2></td></tr> +<tr class="memitem:a9e047791588ff21fc4dc1b06456bdfd2" id="r_a9e047791588ff21fc4dc1b06456bdfd2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9e047791588ff21fc4dc1b06456bdfd2">NEORV32_GPTMR</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__gptmr__t.html">neorv32_gptmr_t</a>*) (<a class="el" href="neorv32_8h.html#a0991b1a5ba1e8c3550eb9770d43589d0">NEORV32_GPTMR_BASE</a>))</td></tr> +<tr class="separator:a9e047791588ff21fc4dc1b06456bdfd2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a135b0750d4afed16e5867134e3843988" id="r_a135b0750d4afed16e5867134e3843988"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a135b0750d4afed16e5867134e3843988">NEORV32_GPTMR_CTRL_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90">GPTMR_CTRL_EN</a> = 0 +, <a class="el" href="#a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3">GPTMR_CTRL_PRSC0</a> = 1 +, <a class="el" href="#a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298">GPTMR_CTRL_PRSC1</a> = 2 +, <a class="el" href="#a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833">GPTMR_CTRL_PRSC2</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43">GPTMR_CTRL_MODE</a> = 4 +, <a class="el" href="#a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38">GPTMR_CTRL_IRQ_CLR</a> = 30 +, <a class="el" href="#a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a">GPTMR_CTRL_IRQ_PND</a> = 31 +<br /> + }</td></tr> +<tr class="separator:a135b0750d4afed16e5867134e3843988"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>General purpose timer (GPTMR) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the GPTMR unit was synthesized (IO_GPTMR_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a9e047791588ff21fc4dc1b06456bdfd2" name="a9e047791588ff21fc4dc1b06456bdfd2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9e047791588ff21fc4dc1b06456bdfd2">&#9670;&#160;</a></span>NEORV32_GPTMR</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_GPTMR&#160;&#160;&#160;((<a class="el" href="structneorv32__gptmr__t.html">neorv32_gptmr_t</a>*) (<a class="el" href="neorv32_8h.html#a0991b1a5ba1e8c3550eb9770d43589d0">NEORV32_GPTMR_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>GPTMR module hardware access (<a class="el" href="structneorv32__gptmr__t.html">neorv32_gptmr_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="a135b0750d4afed16e5867134e3843988" name="a135b0750d4afed16e5867134e3843988"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a135b0750d4afed16e5867134e3843988">&#9670;&#160;</a></span>NEORV32_GPTMR_CTRL_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a135b0750d4afed16e5867134e3843988">NEORV32_GPTMR_CTRL_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>GPTMR control register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90" name="a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90"></a>GPTMR_CTRL_EN&#160;</td><td class="fielddoc"><p>GPTMR control register(0) (r/w): GPTMR enable </p> +</td></tr> +<tr><td class="fieldname"><a id="a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3" name="a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3"></a>GPTMR_CTRL_PRSC0&#160;</td><td class="fielddoc"><p>GPTMR control register(1) (r/w): Clock prescaler select bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298" name="a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298"></a>GPTMR_CTRL_PRSC1&#160;</td><td class="fielddoc"><p>GPTMR control register(2) (r/w): Clock prescaler select bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833" name="a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833"></a>GPTMR_CTRL_PRSC2&#160;</td><td class="fielddoc"><p>GPTMR control register(3) (r/w): Clock prescaler select bit 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43" name="a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43"></a>GPTMR_CTRL_MODE&#160;</td><td class="fielddoc"><p>GPTMR control register(4) (r/w): Operation mode (0=single-shot, 1=continuous) </p> +</td></tr> +<tr><td class="fieldname"><a id="a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38" name="a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38"></a>GPTMR_CTRL_IRQ_CLR&#160;</td><td class="fielddoc"><p>GPTMR control register(30) (-/w): Set to clear timer-match interrupt </p> +</td></tr> +<tr><td class="fieldname"><a id="a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a" name="a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a"></a>GPTMR_CTRL_IRQ_PND&#160;</td><td class="fielddoc"><p>GPTMR control register(31) (r/-): Timer-match interrupt pending </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae79a08c52ad3e83f9c4393acfabf035f" name="ae79a08c52ad3e83f9c4393acfabf035f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae79a08c52ad3e83f9c4393acfabf035f">&#9670;&#160;</a></span>neorv32_gptmr_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_gptmr_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if general purpose timer unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if GPTMR was not synthesized, 1 if GPTMR is available. </dd></dl> + +</div> +</div> +<a id="a7c9bc6d28ad12611b08fa2867c2db874" name="a7c9bc6d28ad12611b08fa2867c2db874"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7c9bc6d28ad12611b08fa2867c2db874">&#9670;&#160;</a></span>neorv32_gptmr_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gptmr_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable general purpose timer. </p> + +</div> +</div> +<a id="a59e684348835772a7e83446e478d4a13" name="a59e684348835772a7e83446e478d4a13"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a59e684348835772a7e83446e478d4a13">&#9670;&#160;</a></span>neorv32_gptmr_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gptmr_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable general purpose timer. </p> + +</div> +</div> +<a id="ac73aa4e41a064abb4ca554a389888e67" name="ac73aa4e41a064abb4ca554a389888e67"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac73aa4e41a064abb4ca554a389888e67">&#9670;&#160;</a></span>neorv32_gptmr_irq_ack()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gptmr_irq_ack </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear pending timer interrupt. </p> + +</div> +</div> +<a id="a6aa27efd2163eebf8fc49fe1c591708f" name="a6aa27efd2163eebf8fc49fe1c591708f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6aa27efd2163eebf8fc49fe1c591708f">&#9670;&#160;</a></span>neorv32_gptmr_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_gptmr_setup </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>prsc</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>threshold</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cont_mode</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset, enable and configure general purpose timer.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>Clock prescaler select (0..7). See <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">threshold</td><td>Threshold value, counter will reset to zero when reaching this. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">cont_mode</td><td>Set to operate timer in continuous mode (instead of single-shot mode). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__gptmr_8h_source.html b/sw/neorv32__gptmr_8h_source.html new file mode 100644 index 0000000000..edba279311 --- /dev/null +++ b/sw/neorv32__gptmr_8h_source.html @@ -0,0 +1,163 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_gptmr.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_gptmr.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__gptmr_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_gptmr_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_gptmr_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__gptmr__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__gptmr__t.html#a3c477ccb24ed12122d9d90244431c7e9"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__gptmr__t.html#a3c477ccb24ed12122d9d90244431c7e9">CTRL</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__gptmr__t.html#a666ebcbea13dafcf1987629f3e0092ee"> 31</a></span> uint32_t <a class="code hl_variable" href="structneorv32__gptmr__t.html#a666ebcbea13dafcf1987629f3e0092ee">THRES</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="structneorv32__gptmr__t.html#a1abc5bae1dffc64006e965d4570da479"> 32</a></span> <span class="keyword">const</span> uint32_t <a class="code hl_variable" href="structneorv32__gptmr__t.html#a1abc5bae1dffc64006e965d4570da479">COUNT</a>; </div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>} <a class="code hl_struct" href="structneorv32__gptmr__t.html">neorv32_gptmr_t</a>;</div> +</div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="neorv32__gptmr_8h.html#a9e047791588ff21fc4dc1b06456bdfd2"> 36</a></span><span class="preprocessor">#define NEORV32_GPTMR ((neorv32_gptmr_t*) (NEORV32_GPTMR_BASE))</span></div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div> +<div class="foldopen" id="foldopen00039" data-start="{" data-end="};"> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988"> 39</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988">NEORV32_GPTMR_CTRL_enum</a> {</div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90"> 40</a></span> <a class="code hl_enumvalue" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90">GPTMR_CTRL_EN</a> = 0, </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3">GPTMR_CTRL_PRSC0</a> = 1, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298">GPTMR_CTRL_PRSC1</a> = 2, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833">GPTMR_CTRL_PRSC2</a> = 3, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43"> 44</a></span> <a class="code hl_enumvalue" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43">GPTMR_CTRL_MODE</a> = 4, </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38"> 46</a></span> <a class="code hl_enumvalue" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38">GPTMR_CTRL_IRQ_CLR</a> = 30, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a">GPTMR_CTRL_IRQ_PND</a> = 31, </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span>};</div> +</div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__gptmr_8h.html#ae79a08c52ad3e83f9c4393acfabf035f">neorv32_gptmr_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__gptmr_8h.html#a6aa27efd2163eebf8fc49fe1c591708f">neorv32_gptmr_setup</a>(<span class="keywordtype">int</span> prsc, uint32_t threshold, <span class="keywordtype">int</span> cont_mode);</div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__gptmr_8h.html#a7c9bc6d28ad12611b08fa2867c2db874">neorv32_gptmr_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__gptmr_8h.html#a59e684348835772a7e83446e478d4a13">neorv32_gptmr_enable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__gptmr_8h.html#ac73aa4e41a064abb4ca554a389888e67">neorv32_gptmr_irq_ack</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_gptmr_h</span></div> +<div class="ttc" id="aneorv32__gptmr_8h_html_a135b0750d4afed16e5867134e3843988"><div class="ttname"><a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988">NEORV32_GPTMR_CTRL_enum</a></div><div class="ttdeci">NEORV32_GPTMR_CTRL_enum</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.h:39</div></div> +<div class="ttc" id="aneorv32__gptmr_8h_html_a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833"><div class="ttname"><a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833">GPTMR_CTRL_PRSC2</a></div><div class="ttdeci">@ GPTMR_CTRL_PRSC2</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.h:43</div></div> +<div class="ttc" id="aneorv32__gptmr_8h_html_a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298"><div class="ttname"><a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298">GPTMR_CTRL_PRSC1</a></div><div class="ttdeci">@ GPTMR_CTRL_PRSC1</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.h:42</div></div> +<div class="ttc" id="aneorv32__gptmr_8h_html_a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a"><div class="ttname"><a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a">GPTMR_CTRL_IRQ_PND</a></div><div class="ttdeci">@ GPTMR_CTRL_IRQ_PND</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.h:47</div></div> +<div class="ttc" id="aneorv32__gptmr_8h_html_a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43"><div class="ttname"><a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43">GPTMR_CTRL_MODE</a></div><div class="ttdeci">@ GPTMR_CTRL_MODE</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.h:44</div></div> +<div class="ttc" id="aneorv32__gptmr_8h_html_a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38"><div class="ttname"><a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38">GPTMR_CTRL_IRQ_CLR</a></div><div class="ttdeci">@ GPTMR_CTRL_IRQ_CLR</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.h:46</div></div> +<div class="ttc" id="aneorv32__gptmr_8h_html_a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90"><div class="ttname"><a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90">GPTMR_CTRL_EN</a></div><div class="ttdeci">@ GPTMR_CTRL_EN</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.h:40</div></div> +<div class="ttc" id="aneorv32__gptmr_8h_html_a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3"><div class="ttname"><a href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3">GPTMR_CTRL_PRSC0</a></div><div class="ttdeci">@ GPTMR_CTRL_PRSC0</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.h:41</div></div> +<div class="ttc" id="aneorv32__gptmr_8h_html_a59e684348835772a7e83446e478d4a13"><div class="ttname"><a href="neorv32__gptmr_8h.html#a59e684348835772a7e83446e478d4a13">neorv32_gptmr_enable</a></div><div class="ttdeci">void neorv32_gptmr_enable(void)</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.c:69</div></div> +<div class="ttc" id="aneorv32__gptmr_8h_html_a6aa27efd2163eebf8fc49fe1c591708f"><div class="ttname"><a href="neorv32__gptmr_8h.html#a6aa27efd2163eebf8fc49fe1c591708f">neorv32_gptmr_setup</a></div><div class="ttdeci">void neorv32_gptmr_setup(int prsc, uint32_t threshold, int cont_mode)</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.c:44</div></div> +<div class="ttc" id="aneorv32__gptmr_8h_html_a7c9bc6d28ad12611b08fa2867c2db874"><div class="ttname"><a href="neorv32__gptmr_8h.html#a7c9bc6d28ad12611b08fa2867c2db874">neorv32_gptmr_disable</a></div><div class="ttdeci">void neorv32_gptmr_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.c:60</div></div> +<div class="ttc" id="aneorv32__gptmr_8h_html_ac73aa4e41a064abb4ca554a389888e67"><div class="ttname"><a href="neorv32__gptmr_8h.html#ac73aa4e41a064abb4ca554a389888e67">neorv32_gptmr_irq_ack</a></div><div class="ttdeci">void neorv32_gptmr_irq_ack(void)</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.c:78</div></div> +<div class="ttc" id="aneorv32__gptmr_8h_html_ae79a08c52ad3e83f9c4393acfabf035f"><div class="ttname"><a href="neorv32__gptmr_8h.html#ae79a08c52ad3e83f9c4393acfabf035f">neorv32_gptmr_available</a></div><div class="ttdeci">int neorv32_gptmr_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.c:26</div></div> +<div class="ttc" id="astructneorv32__gptmr__t_html"><div class="ttname"><a href="structneorv32__gptmr__t.html">neorv32_gptmr_t</a></div><div class="ttdef"><b>Definition</b> neorv32_gptmr.h:29</div></div> +<div class="ttc" id="astructneorv32__gptmr__t_html_a1abc5bae1dffc64006e965d4570da479"><div class="ttname"><a href="structneorv32__gptmr__t.html#a1abc5bae1dffc64006e965d4570da479">neorv32_gptmr_t::COUNT</a></div><div class="ttdeci">const uint32_t COUNT</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.h:32</div></div> +<div class="ttc" id="astructneorv32__gptmr__t_html_a3c477ccb24ed12122d9d90244431c7e9"><div class="ttname"><a href="structneorv32__gptmr__t.html#a3c477ccb24ed12122d9d90244431c7e9">neorv32_gptmr_t::CTRL</a></div><div class="ttdeci">uint32_t CTRL</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.h:30</div></div> +<div class="ttc" id="astructneorv32__gptmr__t_html_a666ebcbea13dafcf1987629f3e0092ee"><div class="ttname"><a href="structneorv32__gptmr__t.html#a666ebcbea13dafcf1987629f3e0092ee">neorv32_gptmr_t::THRES</a></div><div class="ttdeci">uint32_t THRES</div><div class="ttdef"><b>Definition</b> neorv32_gptmr.h:31</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__intrinsics_8h.html b/sw/neorv32__intrinsics_8h.html new file mode 100644 index 0000000000..36c6fc8a2c --- /dev/null +++ b/sw/neorv32__intrinsics_8h.html @@ -0,0 +1,361 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_intrinsics.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_intrinsics.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Helper macros for custom "intrinsics" / instructions. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__intrinsics_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">R2-type instruction format, RISC-V-standard</div></td></tr> +<tr class="memitem:affee8dbe3b5c3d9276d746f3123a1852" id="r_affee8dbe3b5c3d9276d746f3123a1852"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#affee8dbe3b5c3d9276d746f3123a1852">CUSTOM_INSTR_R2_TYPE</a>(funct7, funct5, rs1, funct3, opcode)</td></tr> +<tr class="separator:affee8dbe3b5c3d9276d746f3123a1852"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">R3-type instruction format, RISC-V-standard</div></td></tr> +<tr class="memitem:aaace8054623412d7799d6796a4e2b0cf" id="r_aaace8054623412d7799d6796a4e2b0cf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aaace8054623412d7799d6796a4e2b0cf">CUSTOM_INSTR_R3_TYPE</a>(funct7, rs2, rs1, funct3, opcode)</td></tr> +<tr class="separator:aaace8054623412d7799d6796a4e2b0cf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">R4-type instruction format, RISC-V-standard</div></td></tr> +<tr class="memitem:ac9c2ca822c98631d8ac29b016c679723" id="r_ac9c2ca822c98631d8ac29b016c679723"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac9c2ca822c98631d8ac29b016c679723">CUSTOM_INSTR_R4_TYPE</a>(rs3, rs2, rs1, funct3, opcode)</td></tr> +<tr class="separator:ac9c2ca822c98631d8ac29b016c679723"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">I-type instruction format, RISC-V-standard</div></td></tr> +<tr class="memitem:a840b2437cd74de8a77f573b3d9d24b06" id="r_a840b2437cd74de8a77f573b3d9d24b06"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a840b2437cd74de8a77f573b3d9d24b06">CUSTOM_INSTR_I_TYPE</a>(imm12, rs1, funct3, opcode)</td></tr> +<tr class="separator:a840b2437cd74de8a77f573b3d9d24b06"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">S-type instruction format, RISC-V-standard</div></td></tr> +<tr class="memitem:abb4cad44dc2648f10f0e5153325c84d2" id="r_abb4cad44dc2648f10f0e5153325c84d2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abb4cad44dc2648f10f0e5153325c84d2">CUSTOM_INSTR_S_TYPE</a>(imm12, rs2, rs1, funct3, opcode)</td></tr> +<tr class="separator:abb4cad44dc2648f10f0e5153325c84d2"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Register aliases (physical names and ABI names)</div></td></tr> +<tr class="memitem:a71b3ab3e49017d5ba7ccd89665e0cd45" id="r_a71b3ab3e49017d5ba7ccd89665e0cd45"><td class="memItemLeft" align="right" valign="top"><a id="a71b3ab3e49017d5ba7ccd89665e0cd45" name="a71b3ab3e49017d5ba7ccd89665e0cd45"></a> +&#160;</td><td class="memItemRight" valign="bottom"><b>asm</b> (&quot;.set reg_x0, 0 \n&quot; &quot;.set reg_x1, 1 \n&quot; &quot;.set reg_x2, 2 \n&quot; &quot;.set reg_x3, 3 \n&quot; &quot;.set reg_x4, 4 \n&quot; &quot;.set reg_x5, 5 \n&quot; &quot;.set reg_x6, 6 \n&quot; &quot;.set reg_x7, 7 \n&quot; &quot;.set reg_x8, 8 \n&quot; &quot;.set reg_x9, 9 \n&quot; &quot;.set reg_x10, 10 \n&quot; &quot;.set reg_x11, 11 \n&quot; &quot;.set reg_x12, 12 \n&quot; &quot;.set reg_x13, 13 \n&quot; &quot;.set reg_x14, 14 \n&quot; &quot;.set reg_x15, 15 \n&quot; &quot;.set reg_x16, 16 \n&quot; &quot;.set reg_x17, 17 \n&quot; &quot;.set reg_x18, 18 \n&quot; &quot;.set reg_x19, 19 \n&quot; &quot;.set reg_x20, 20 \n&quot; &quot;.set reg_x21, 21 \n&quot; &quot;.set reg_x22, 22 \n&quot; &quot;.set reg_x23, 23 \n&quot; &quot;.set reg_x24, 24 \n&quot; &quot;.set reg_x25, 25 \n&quot; &quot;.set reg_x26, 26 \n&quot; &quot;.set reg_x27, 27 \n&quot; &quot;.set reg_x28, 28 \n&quot; &quot;.set reg_x29, 29 \n&quot; &quot;.set reg_x30, 30 \n&quot; &quot;.set reg_x31, 31 \n&quot; &quot;.set reg_zero, 0 \n&quot; &quot;.set reg_ra, 1 \n&quot; &quot;.set reg_sp, 2 \n&quot; &quot;.set reg_gp, 3 \n&quot; &quot;.set reg_tp, 4 \n&quot; &quot;.set reg_t0, 5 \n&quot; &quot;.set reg_t1, 6 \n&quot; &quot;.set reg_t2, 7 \n&quot; &quot;.set reg_s0, 8 \n&quot; &quot;.set reg_s1, 9 \n&quot; &quot;.set reg_a0, 10 \n&quot; &quot;.set reg_a1, 11 \n&quot; &quot;.set reg_a2, 12 \n&quot; &quot;.set reg_a3, 13 \n&quot; &quot;.set reg_a4, 14 \n&quot; &quot;.set reg_a5, 15 \n&quot; &quot;.set reg_a6, 16 \n&quot; &quot;.set reg_a7, 17 \n&quot; &quot;.set reg_s2, 18 \n&quot; &quot;.set reg_s3, 19 \n&quot; &quot;.set reg_s4, 20 \n&quot; &quot;.set reg_s5, 21 \n&quot; &quot;.set reg_s6, 22 \n&quot; &quot;.set reg_s7, 23 \n&quot; &quot;.set reg_s8, 24 \n&quot; &quot;.set reg_s9, 25 \n&quot; &quot;.set reg_s10, 26 \n&quot; &quot;.set reg_s11, 27 \n&quot; &quot;.set reg_t3, 28 \n&quot; &quot;.set reg_t4, 29 \n&quot; &quot;.set reg_t5, 30 \n&quot; &quot;.set reg_t6, 31 \n&quot;)</td></tr> +<tr class="separator:a71b3ab3e49017d5ba7ccd89665e0cd45"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Helper macros for custom "intrinsics" / instructions. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a840b2437cd74de8a77f573b3d9d24b06" name="a840b2437cd74de8a77f573b3d9d24b06"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a840b2437cd74de8a77f573b3d9d24b06">&#9670;&#160;</a></span>CUSTOM_INSTR_I_TYPE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define CUSTOM_INSTR_I_TYPE</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>imm12</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>funct3</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>opcode</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line">({ \</div> +<div class="line"> uint32_t __return; \</div> +<div class="line"> <span class="keyword">asm</span> <span class="keyword">volatile</span> ( \</div> +<div class="line"> <span class="stringliteral">&quot;.word ( \ (((&quot;</span> #imm12 <span class="stringliteral">&quot;) &amp; 0xfff) &lt;&lt; 20) | \ ((( reg_%1 ) &amp; 0x1f) &lt;&lt; 15) | \ (((&quot;</span> #funct3 <span class="stringliteral">&quot;) &amp; 0x07) &lt;&lt; 12) | \ ((( reg_%0 ) &amp; 0x1f) &lt;&lt; 7) | \ (((&quot;</span> #opcode <span class="stringliteral">&quot;) &amp; 0x7f) &lt;&lt; 0) \ );&quot;</span> \</div> +<div class="line"> : [rd] <span class="stringliteral">&quot;=r&quot;</span> (__return) \</div> +<div class="line"> : <span class="stringliteral">&quot;r&quot;</span> (rs1) \</div> +<div class="line"> ); \</div> +<div class="line"> __return; \</div> +<div class="line">})</div> +</div><!-- fragment --> +</div> +</div> +<a id="affee8dbe3b5c3d9276d746f3123a1852" name="affee8dbe3b5c3d9276d746f3123a1852"></a> +<h2 class="memtitle"><span class="permalink"><a href="#affee8dbe3b5c3d9276d746f3123a1852">&#9670;&#160;</a></span>CUSTOM_INSTR_R2_TYPE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define CUSTOM_INSTR_R2_TYPE</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>funct7</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>funct5</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>funct3</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>opcode</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line">({ \</div> +<div class="line"> uint32_t __return; \</div> +<div class="line"> <span class="keyword">asm</span> <span class="keyword">volatile</span>( \</div> +<div class="line"> <span class="stringliteral">&quot;.word ( \ (((&quot;</span> #funct7 <span class="stringliteral">&quot;) &amp; 0x7f) &lt;&lt; 25) | \ (((&quot;</span> #funct5 <span class="stringliteral">&quot;) &amp; 0x1f) &lt;&lt; 20) | \ ((( reg_%1 ) &amp; 0x1f) &lt;&lt; 15) | \ (((&quot;</span> #funct3 <span class="stringliteral">&quot;) &amp; 0x07) &lt;&lt; 12) | \ ((( reg_%0 ) &amp; 0x1f) &lt;&lt; 7) | \ (((&quot;</span> #opcode <span class="stringliteral">&quot;) &amp; 0x7f) &lt;&lt; 0) \ );&quot;</span> \</div> +<div class="line"> : [rd] <span class="stringliteral">&quot;=r&quot;</span> (__return) \</div> +<div class="line"> : <span class="stringliteral">&quot;r&quot;</span> (rs1) \</div> +<div class="line"> ); \</div> +<div class="line"> __return; \</div> +<div class="line">})</div> +</div><!-- fragment --> +</div> +</div> +<a id="aaace8054623412d7799d6796a4e2b0cf" name="aaace8054623412d7799d6796a4e2b0cf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aaace8054623412d7799d6796a4e2b0cf">&#9670;&#160;</a></span>CUSTOM_INSTR_R3_TYPE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define CUSTOM_INSTR_R3_TYPE</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>funct7</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs2</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>funct3</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>opcode</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line">({ \</div> +<div class="line"> uint32_t __return; \</div> +<div class="line"> <span class="keyword">asm</span> <span class="keyword">volatile</span> ( \</div> +<div class="line"> <span class="stringliteral">&quot;.word ( \ (((&quot;</span> #funct7 <span class="stringliteral">&quot;) &amp; 0x7f) &lt;&lt; 25) | \ ((( reg_%2 ) &amp; 0x1f) &lt;&lt; 20) | \ ((( reg_%1 ) &amp; 0x1f) &lt;&lt; 15) | \ (((&quot;</span> #funct3 <span class="stringliteral">&quot;) &amp; 0x07) &lt;&lt; 12) | \ ((( reg_%0 ) &amp; 0x1f) &lt;&lt; 7) | \ (((&quot;</span> #opcode <span class="stringliteral">&quot;) &amp; 0x7f) &lt;&lt; 0) \ );&quot;</span> \</div> +<div class="line"> : [rd] <span class="stringliteral">&quot;=r&quot;</span> (__return) \</div> +<div class="line"> : <span class="stringliteral">&quot;r&quot;</span> (rs1), \</div> +<div class="line"> <span class="stringliteral">&quot;r&quot;</span> (rs2) \</div> +<div class="line"> ); \</div> +<div class="line"> __return; \</div> +<div class="line">})</div> +</div><!-- fragment --> +</div> +</div> +<a id="ac9c2ca822c98631d8ac29b016c679723" name="ac9c2ca822c98631d8ac29b016c679723"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac9c2ca822c98631d8ac29b016c679723">&#9670;&#160;</a></span>CUSTOM_INSTR_R4_TYPE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define CUSTOM_INSTR_R4_TYPE</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs3</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs2</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>funct3</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>opcode</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line">({ \</div> +<div class="line"> uint32_t __return; \</div> +<div class="line"> <span class="keyword">asm</span> <span class="keyword">volatile</span> ( \</div> +<div class="line"> <span class="stringliteral">&quot;.word ( \ ((( reg_%3 ) &amp; 0x1f) &lt;&lt; 27) | \ ((( reg_%2 ) &amp; 0x1f) &lt;&lt; 20) | \ ((( reg_%1 ) &amp; 0x1f) &lt;&lt; 15) | \ (((&quot;</span> #funct3 <span class="stringliteral">&quot;) &amp; 0x07) &lt;&lt; 12) | \ ((( reg_%0 ) &amp; 0x1f) &lt;&lt; 7) | \ (((&quot;</span> #opcode <span class="stringliteral">&quot;) &amp; 0x7f) &lt;&lt; 0) \ );&quot;</span> \</div> +<div class="line"> : [rd] <span class="stringliteral">&quot;=r&quot;</span> (__return) \</div> +<div class="line"> : <span class="stringliteral">&quot;r&quot;</span> (rs1), \</div> +<div class="line"> <span class="stringliteral">&quot;r&quot;</span> (rs2), \</div> +<div class="line"> <span class="stringliteral">&quot;r&quot;</span> (rs3) \</div> +<div class="line"> ); \</div> +<div class="line"> __return; \</div> +<div class="line">})</div> +</div><!-- fragment --> +</div> +</div> +<a id="abb4cad44dc2648f10f0e5153325c84d2" name="abb4cad44dc2648f10f0e5153325c84d2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abb4cad44dc2648f10f0e5153325c84d2">&#9670;&#160;</a></span>CUSTOM_INSTR_S_TYPE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define CUSTOM_INSTR_S_TYPE</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>imm12</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs2</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>rs1</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>funct3</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>opcode</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line">({ \</div> +<div class="line"> <span class="keyword">asm</span> <span class="keyword">volatile</span> ( \</div> +<div class="line"> <span class="stringliteral">&quot;.word ( \ ((((&quot;</span> #imm12 <span class="stringliteral">&quot;) &gt;&gt; 5) &amp; 0x7f) &lt;&lt; 25) | \ ((( reg_%1 ) &amp; 0x1f) &lt;&lt; 20) | \ ((( reg_%0 ) &amp; 0x1f) &lt;&lt; 15) | \ (((&quot;</span> #funct3 <span class="stringliteral">&quot;) &amp; 0x07) &lt;&lt; 12) | \ (((&quot;</span> #imm12 <span class="stringliteral">&quot;) &amp; 0x1f) &lt;&lt; 7) | \ (((&quot;</span> #opcode <span class="stringliteral">&quot;) &amp; 0x7f) &lt;&lt; 0) \ );&quot;</span> \</div> +<div class="line"> : \</div> +<div class="line"> : <span class="stringliteral">&quot;r&quot;</span> (rs1), \</div> +<div class="line"> <span class="stringliteral">&quot;r&quot;</span> (rs2) \</div> +<div class="line"> ); \</div> +<div class="line">})</div> +</div><!-- fragment --> +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__intrinsics_8h_source.html b/sw/neorv32__intrinsics_8h_source.html new file mode 100644 index 0000000000..c800d70a61 --- /dev/null +++ b/sw/neorv32__intrinsics_8h_source.html @@ -0,0 +1,291 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_intrinsics.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_intrinsics.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__intrinsics_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef neorv32_intrinsics_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define neorv32_intrinsics_h</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="keyword">asm</span> (</div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="stringliteral">&quot;.set reg_x0, 0 \n&quot;</span></div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="stringliteral">&quot;.set reg_x1, 1 \n&quot;</span></div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="stringliteral">&quot;.set reg_x2, 2 \n&quot;</span></div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="stringliteral">&quot;.set reg_x3, 3 \n&quot;</span></div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="stringliteral">&quot;.set reg_x4, 4 \n&quot;</span></div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="stringliteral">&quot;.set reg_x5, 5 \n&quot;</span></div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="stringliteral">&quot;.set reg_x6, 6 \n&quot;</span></div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="stringliteral">&quot;.set reg_x7, 7 \n&quot;</span></div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="stringliteral">&quot;.set reg_x8, 8 \n&quot;</span></div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="stringliteral">&quot;.set reg_x9, 9 \n&quot;</span></div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="stringliteral">&quot;.set reg_x10, 10 \n&quot;</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="stringliteral">&quot;.set reg_x11, 11 \n&quot;</span></div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="stringliteral">&quot;.set reg_x12, 12 \n&quot;</span></div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="stringliteral">&quot;.set reg_x13, 13 \n&quot;</span></div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="stringliteral">&quot;.set reg_x14, 14 \n&quot;</span></div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="stringliteral">&quot;.set reg_x15, 15 \n&quot;</span></div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#ifndef __riscv_32e</span></div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="stringliteral">&quot;.set reg_x16, 16 \n&quot;</span></div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="stringliteral">&quot;.set reg_x17, 17 \n&quot;</span></div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="stringliteral">&quot;.set reg_x18, 18 \n&quot;</span></div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="stringliteral">&quot;.set reg_x19, 19 \n&quot;</span></div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="stringliteral">&quot;.set reg_x20, 20 \n&quot;</span></div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="stringliteral">&quot;.set reg_x21, 21 \n&quot;</span></div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="stringliteral">&quot;.set reg_x22, 22 \n&quot;</span></div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="stringliteral">&quot;.set reg_x23, 23 \n&quot;</span></div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="stringliteral">&quot;.set reg_x24, 24 \n&quot;</span></div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="stringliteral">&quot;.set reg_x25, 25 \n&quot;</span></div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="stringliteral">&quot;.set reg_x26, 26 \n&quot;</span></div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="stringliteral">&quot;.set reg_x27, 27 \n&quot;</span></div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="stringliteral">&quot;.set reg_x28, 28 \n&quot;</span></div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="stringliteral">&quot;.set reg_x29, 29 \n&quot;</span></div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="stringliteral">&quot;.set reg_x30, 30 \n&quot;</span></div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="stringliteral">&quot;.set reg_x31, 31 \n&quot;</span></div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="stringliteral">&quot;.set reg_zero, 0 \n&quot;</span></div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="stringliteral">&quot;.set reg_ra, 1 \n&quot;</span></div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="stringliteral">&quot;.set reg_sp, 2 \n&quot;</span></div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="stringliteral">&quot;.set reg_gp, 3 \n&quot;</span></div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="stringliteral">&quot;.set reg_tp, 4 \n&quot;</span></div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="stringliteral">&quot;.set reg_t0, 5 \n&quot;</span></div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="stringliteral">&quot;.set reg_t1, 6 \n&quot;</span></div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="stringliteral">&quot;.set reg_t2, 7 \n&quot;</span></div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="stringliteral">&quot;.set reg_s0, 8 \n&quot;</span></div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="stringliteral">&quot;.set reg_s1, 9 \n&quot;</span></div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="stringliteral">&quot;.set reg_a0, 10 \n&quot;</span></div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="stringliteral">&quot;.set reg_a1, 11 \n&quot;</span></div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="stringliteral">&quot;.set reg_a2, 12 \n&quot;</span></div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="stringliteral">&quot;.set reg_a3, 13 \n&quot;</span></div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="stringliteral">&quot;.set reg_a4, 14 \n&quot;</span></div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="stringliteral">&quot;.set reg_a5, 15 \n&quot;</span></div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor">#ifndef __riscv_32e</span></div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="stringliteral">&quot;.set reg_a6, 16 \n&quot;</span></div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="stringliteral">&quot;.set reg_a7, 17 \n&quot;</span></div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="stringliteral">&quot;.set reg_s2, 18 \n&quot;</span></div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="stringliteral">&quot;.set reg_s3, 19 \n&quot;</span></div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="stringliteral">&quot;.set reg_s4, 20 \n&quot;</span></div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="stringliteral">&quot;.set reg_s5, 21 \n&quot;</span></div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="stringliteral">&quot;.set reg_s6, 22 \n&quot;</span></div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="stringliteral">&quot;.set reg_s7, 23 \n&quot;</span></div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="stringliteral">&quot;.set reg_s8, 24 \n&quot;</span></div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="stringliteral">&quot;.set reg_s9, 25 \n&quot;</span></div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="stringliteral">&quot;.set reg_s10, 26 \n&quot;</span></div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="stringliteral">&quot;.set reg_s11, 27 \n&quot;</span></div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="stringliteral">&quot;.set reg_t3, 28 \n&quot;</span></div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="stringliteral">&quot;.set reg_t4, 29 \n&quot;</span></div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="stringliteral">&quot;.set reg_t5, 30 \n&quot;</span></div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="stringliteral">&quot;.set reg_t6, 31 \n&quot;</span></div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span>);</div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="preprocessor">#define CUSTOM_INSTR_R2_TYPE(funct7, funct5, rs1, funct3, opcode) \</span></div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="preprocessor">({ \</span></div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="preprocessor"> uint32_t __return; \</span></div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="preprocessor"> asm volatile( \</span></div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="preprocessor"> &quot;.word ( \</span></div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="preprocessor"> (((&quot; #funct7 &quot;) &amp; 0x7f) &lt;&lt; 25) | \</span></div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="preprocessor"> (((&quot; #funct5 &quot;) &amp; 0x1f) &lt;&lt; 20) | \</span></div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="preprocessor"> ((( reg_%1 ) &amp; 0x1f) &lt;&lt; 15) | \</span></div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="preprocessor"> (((&quot; #funct3 &quot;) &amp; 0x07) &lt;&lt; 12) | \</span></div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="preprocessor"> ((( reg_%0 ) &amp; 0x1f) &lt;&lt; 7) | \</span></div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="preprocessor"> (((&quot; #opcode &quot;) &amp; 0x7f) &lt;&lt; 0) \</span></div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="preprocessor"> );&quot; \</span></div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="preprocessor"> : [rd] &quot;=r&quot; (__return) \</span></div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="preprocessor"> : &quot;r&quot; (rs1) \</span></div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="preprocessor"> ); \</span></div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="preprocessor"> __return; \</span></div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="preprocessor">})</span></div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="preprocessor">#define CUSTOM_INSTR_R3_TYPE(funct7, rs2, rs1, funct3, opcode) \</span></div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="preprocessor">({ \</span></div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="preprocessor"> uint32_t __return; \</span></div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="preprocessor"> asm volatile ( \</span></div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="preprocessor"> &quot;.word ( \</span></div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="preprocessor"> (((&quot; #funct7 &quot;) &amp; 0x7f) &lt;&lt; 25) | \</span></div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="preprocessor"> ((( reg_%2 ) &amp; 0x1f) &lt;&lt; 20) | \</span></div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="preprocessor"> ((( reg_%1 ) &amp; 0x1f) &lt;&lt; 15) | \</span></div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span><span class="preprocessor"> (((&quot; #funct3 &quot;) &amp; 0x07) &lt;&lt; 12) | \</span></div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span><span class="preprocessor"> ((( reg_%0 ) &amp; 0x1f) &lt;&lt; 7) | \</span></div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="preprocessor"> (((&quot; #opcode &quot;) &amp; 0x7f) &lt;&lt; 0) \</span></div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="preprocessor"> );&quot; \</span></div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="preprocessor"> : [rd] &quot;=r&quot; (__return) \</span></div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="preprocessor"> : &quot;r&quot; (rs1), \</span></div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="preprocessor"> &quot;r&quot; (rs2) \</span></div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="preprocessor"> ); \</span></div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span><span class="preprocessor"> __return; \</span></div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="preprocessor">})</span></div> +<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div> +<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div> +<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="preprocessor">#define CUSTOM_INSTR_R4_TYPE(rs3, rs2, rs1, funct3, opcode) \</span></div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="preprocessor">({ \</span></div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="preprocessor"> uint32_t __return; \</span></div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="preprocessor"> asm volatile ( \</span></div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="preprocessor"> &quot;.word ( \</span></div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="preprocessor"> ((( reg_%3 ) &amp; 0x1f) &lt;&lt; 27) | \</span></div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="preprocessor"> ((( reg_%2 ) &amp; 0x1f) &lt;&lt; 20) | \</span></div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="preprocessor"> ((( reg_%1 ) &amp; 0x1f) &lt;&lt; 15) | \</span></div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="preprocessor"> (((&quot; #funct3 &quot;) &amp; 0x07) &lt;&lt; 12) | \</span></div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="preprocessor"> ((( reg_%0 ) &amp; 0x1f) &lt;&lt; 7) | \</span></div> +<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="preprocessor"> (((&quot; #opcode &quot;) &amp; 0x7f) &lt;&lt; 0) \</span></div> +<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="preprocessor"> );&quot; \</span></div> +<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="preprocessor"> : [rd] &quot;=r&quot; (__return) \</span></div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="preprocessor"> : &quot;r&quot; (rs1), \</span></div> +<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="preprocessor"> &quot;r&quot; (rs2), \</span></div> +<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="preprocessor"> &quot;r&quot; (rs3) \</span></div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="preprocessor"> ); \</span></div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="preprocessor"> __return; \</span></div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="preprocessor">})</span></div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> </div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="preprocessor">#define CUSTOM_INSTR_I_TYPE(imm12, rs1, funct3, opcode) \</span></div> +<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="preprocessor">({ \</span></div> +<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="preprocessor"> uint32_t __return; \</span></div> +<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="preprocessor"> asm volatile ( \</span></div> +<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="preprocessor"> &quot;.word ( \</span></div> +<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span><span class="preprocessor"> (((&quot; #imm12 &quot;) &amp; 0xfff) &lt;&lt; 20) | \</span></div> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="preprocessor"> ((( reg_%1 ) &amp; 0x1f) &lt;&lt; 15) | \</span></div> +<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="preprocessor"> (((&quot; #funct3 &quot;) &amp; 0x07) &lt;&lt; 12) | \</span></div> +<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span><span class="preprocessor"> ((( reg_%0 ) &amp; 0x1f) &lt;&lt; 7) | \</span></div> +<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="preprocessor"> (((&quot; #opcode &quot;) &amp; 0x7f) &lt;&lt; 0) \</span></div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="preprocessor"> );&quot; \</span></div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="preprocessor"> : [rd] &quot;=r&quot; (__return) \</span></div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="preprocessor"> : &quot;r&quot; (rs1) \</span></div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="preprocessor"> ); \</span></div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="preprocessor"> __return; \</span></div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="preprocessor">})</span></div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div> +<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="preprocessor">#define CUSTOM_INSTR_S_TYPE(imm12, rs2, rs1, funct3, opcode) \</span></div> +<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="preprocessor">({ \</span></div> +<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span><span class="preprocessor"> asm volatile ( \</span></div> +<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><span class="preprocessor"> &quot;.word ( \</span></div> +<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span><span class="preprocessor"> ((((&quot; #imm12 &quot;) &gt;&gt; 5) &amp; 0x7f) &lt;&lt; 25) | \</span></div> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="preprocessor"> ((( reg_%1 ) &amp; 0x1f) &lt;&lt; 20) | \</span></div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span><span class="preprocessor"> ((( reg_%0 ) &amp; 0x1f) &lt;&lt; 15) | \</span></div> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="preprocessor"> (((&quot; #funct3 &quot;) &amp; 0x07) &lt;&lt; 12) | \</span></div> +<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span><span class="preprocessor"> (((&quot; #imm12 &quot;) &amp; 0x1f) &lt;&lt; 7) | \</span></div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="preprocessor"> (((&quot; #opcode &quot;) &amp; 0x7f) &lt;&lt; 0) \</span></div> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span><span class="preprocessor"> );&quot; \</span></div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span><span class="preprocessor"> : \</span></div> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span><span class="preprocessor"> : &quot;r&quot; (rs1), \</span></div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span><span class="preprocessor"> &quot;r&quot; (rs2) \</span></div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span><span class="preprocessor"> ); \</span></div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="preprocessor">})</span></div> +<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div> +<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> </div> +<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_intrinsics_h</span></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__legacy_8h.html b/sw/neorv32__legacy_8h.html new file mode 100644 index 0000000000..084f33b00d --- /dev/null +++ b/sw/neorv32__legacy_8h.html @@ -0,0 +1,182 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_legacy.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_legacy.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Legacy compatibility layer. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__legacy_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">GPIO aliases</div></td></tr> +<tr class="memitem:aa6756856812e72ebdbe5a1b837e13330" id="r_aa6756856812e72ebdbe5a1b837e13330"><td class="memItemLeft" align="right" valign="top"><a id="aa6756856812e72ebdbe5a1b837e13330" name="aa6756856812e72ebdbe5a1b837e13330"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>INPUT_LO</b>&#160;&#160;&#160;INPUT[0]</td></tr> +<tr class="separator:aa6756856812e72ebdbe5a1b837e13330"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a328faf236a6a92f47d02f68d2865e5d3" id="r_a328faf236a6a92f47d02f68d2865e5d3"><td class="memItemLeft" align="right" valign="top"><a id="a328faf236a6a92f47d02f68d2865e5d3" name="a328faf236a6a92f47d02f68d2865e5d3"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>INPUT_HI</b>&#160;&#160;&#160;INPUT[1]</td></tr> +<tr class="separator:a328faf236a6a92f47d02f68d2865e5d3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4565c54eb2281f1089b38b4fbfb23ac2" id="r_a4565c54eb2281f1089b38b4fbfb23ac2"><td class="memItemLeft" align="right" valign="top"><a id="a4565c54eb2281f1089b38b4fbfb23ac2" name="a4565c54eb2281f1089b38b4fbfb23ac2"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>OUTPUT_LO</b>&#160;&#160;&#160;OUTPUT[0]</td></tr> +<tr class="separator:a4565c54eb2281f1089b38b4fbfb23ac2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae02c208a2f93a1931c0e2e43ca51cf8c" id="r_ae02c208a2f93a1931c0e2e43ca51cf8c"><td class="memItemLeft" align="right" valign="top"><a id="ae02c208a2f93a1931c0e2e43ca51cf8c" name="ae02c208a2f93a1931c0e2e43ca51cf8c"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>OUTPUT_HI</b>&#160;&#160;&#160;OUTPUT[1]</td></tr> +<tr class="separator:ae02c208a2f93a1931c0e2e43ca51cf8c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Atomic LR/SC instructions</div></td></tr> +<tr class="memitem:a72a1e09e67f5ce1b522667e8e171d578" id="r_a72a1e09e67f5ce1b522667e8e171d578"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a72a1e09e67f5ce1b522667e8e171d578">neorv32_cpu_load_reservate_word</a>(addr, wdata)</td></tr> +<tr class="separator:a72a1e09e67f5ce1b522667e8e171d578"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac8325c90310ab06d305671b1aa169965" id="r_ac8325c90310ab06d305671b1aa169965"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac8325c90310ab06d305671b1aa169965">neorv32_cpu_store_conditional_word</a>(addr, wdata)</td></tr> +<tr class="separator:ac8325c90310ab06d305671b1aa169965"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Legacy compatibility layer. </p> +<dl class="section warning"><dt>Warning</dt><dd>Deprecated! Do not use for new designs! </dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a72a1e09e67f5ce1b522667e8e171d578" name="a72a1e09e67f5ce1b522667e8e171d578"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a72a1e09e67f5ce1b522667e8e171d578">&#9670;&#160;</a></span>neorv32_cpu_load_reservate_word</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_cpu_load_reservate_word</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="neorv32__cpu__amo_8h.html#ad4437bbc61a4e40d7d01dfe9459f6639">neorv32_cpu_amolr</a>(addr, wdata)</div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html_ad4437bbc61a4e40d7d01dfe9459f6639"><div class="ttname"><a href="neorv32__cpu__amo_8h.html#ad4437bbc61a4e40d7d01dfe9459f6639">neorv32_cpu_amolr</a></div><div class="ttdeci">uint32_t neorv32_cpu_amolr(uint32_t addr)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_amo.h:31</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="ac8325c90310ab06d305671b1aa169965" name="ac8325c90310ab06d305671b1aa169965"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac8325c90310ab06d305671b1aa169965">&#9670;&#160;</a></span>neorv32_cpu_store_conditional_word</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_cpu_store_conditional_word</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>wdata</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="neorv32__cpu__amo_8h.html#a5e73eaa273c41a06972e862976fda53c">neorv32_cpu_amosc</a>(addr, wdata)</div> +<div class="ttc" id="aneorv32__cpu__amo_8h_html_a5e73eaa273c41a06972e862976fda53c"><div class="ttname"><a href="neorv32__cpu__amo_8h.html#a5e73eaa273c41a06972e862976fda53c">neorv32_cpu_amosc</a></div><div class="ttdeci">uint32_t neorv32_cpu_amosc(uint32_t addr, uint32_t wdata)</div><div class="ttdef"><b>Definition</b> neorv32_cpu_amo.h:58</div></div> +</div><!-- fragment --> +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__legacy_8h_source.html b/sw/neorv32__legacy_8h_source.html new file mode 100644 index 0000000000..e47f5309ac --- /dev/null +++ b/sw/neorv32__legacy_8h_source.html @@ -0,0 +1,126 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_legacy.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_legacy.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__legacy_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef neorv32_legacy_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define neorv32_legacy_h</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#define INPUT_LO INPUT[0]</span></div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#define INPUT_HI INPUT[1]</span></div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#define OUTPUT_LO OUTPUT[0]</span></div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#define OUTPUT_HI OUTPUT[1]</span></div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="preprocessor">#define neorv32_cpu_load_reservate_word(addr, wdata) neorv32_cpu_amolr(addr, wdata)</span></div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#define neorv32_cpu_store_conditional_word(addr, wdata) neorv32_cpu_amosc(addr, wdata)</span></div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_legacy_h</span></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__neoled_8c.html b/sw/neorv32__neoled_8c.html new file mode 100644 index 0000000000..e7409baeda --- /dev/null +++ b/sw/neorv32__neoled_8c.html @@ -0,0 +1,371 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_neoled.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_neoled.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Smart LED Interface (NEOLED) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a57398d92fb4fc735b33e89271726e1d6" id="r_a57398d92fb4fc735b33e89271726e1d6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a57398d92fb4fc735b33e89271726e1d6">neorv32_neoled_available</a> (void)</td></tr> +<tr class="separator:a57398d92fb4fc735b33e89271726e1d6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac6e94602453779a2791bd0734465f5a3" id="r_ac6e94602453779a2791bd0734465f5a3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac6e94602453779a2791bd0734465f5a3">neorv32_neoled_setup</a> (uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode)</td></tr> +<tr class="separator:ac6e94602453779a2791bd0734465f5a3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adade69c7368c28180b9992d5f0ab6031" id="r_adade69c7368c28180b9992d5f0ab6031"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adade69c7368c28180b9992d5f0ab6031">neorv32_neoled_setup_ws2812</a> (int irq_mode)</td></tr> +<tr class="separator:adade69c7368c28180b9992d5f0ab6031"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a484fcc6797b6d9cef86192e9593ec33d" id="r_a484fcc6797b6d9cef86192e9593ec33d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a484fcc6797b6d9cef86192e9593ec33d">neorv32_neoled_set_mode</a> (uint32_t mode)</td></tr> +<tr class="separator:a484fcc6797b6d9cef86192e9593ec33d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5aa9eb4dd3655fa08e1b61eb0f36589c" id="r_a5aa9eb4dd3655fa08e1b61eb0f36589c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5aa9eb4dd3655fa08e1b61eb0f36589c">neorv32_neoled_strobe_blocking</a> (void)</td></tr> +<tr class="separator:a5aa9eb4dd3655fa08e1b61eb0f36589c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abf7882b949373df0774fc9cc20c2bd2e" id="r_abf7882b949373df0774fc9cc20c2bd2e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abf7882b949373df0774fc9cc20c2bd2e">neorv32_neoled_strobe_nonblocking</a> (void)</td></tr> +<tr class="separator:abf7882b949373df0774fc9cc20c2bd2e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8181d5c1d15b7b5eecdc018341ac14fa" id="r_a8181d5c1d15b7b5eecdc018341ac14fa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8181d5c1d15b7b5eecdc018341ac14fa">neorv32_neoled_enable</a> (void)</td></tr> +<tr class="separator:a8181d5c1d15b7b5eecdc018341ac14fa"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8daaa97a85e0eb94d4a38eb2119ea183" id="r_a8daaa97a85e0eb94d4a38eb2119ea183"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8daaa97a85e0eb94d4a38eb2119ea183">neorv32_neoled_disable</a> (void)</td></tr> +<tr class="separator:a8daaa97a85e0eb94d4a38eb2119ea183"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3ee5b3602da3ae982628e2802587e451" id="r_a3ee5b3602da3ae982628e2802587e451"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3ee5b3602da3ae982628e2802587e451">neorv32_neoled_write_blocking</a> (uint32_t data)</td></tr> +<tr class="separator:a3ee5b3602da3ae982628e2802587e451"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a81c2c49198531fb6551eb288e29c084e" id="r_a81c2c49198531fb6551eb288e29c084e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a81c2c49198531fb6551eb288e29c084e">neorv32_neoled_get_buffer_size</a> (void)</td></tr> +<tr class="separator:a81c2c49198531fb6551eb288e29c084e"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Smart LED Interface (NEOLED) HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the NEOLED unit was synthesized (IO_NEOLED_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a57398d92fb4fc735b33e89271726e1d6" name="a57398d92fb4fc735b33e89271726e1d6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a57398d92fb4fc735b33e89271726e1d6">&#9670;&#160;</a></span>neorv32_neoled_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_neoled_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if NEOLED unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if NEOLED was not synthesized, 1 if NEOLED is available. </dd></dl> + +</div> +</div> +<a id="a8daaa97a85e0eb94d4a38eb2119ea183" name="a8daaa97a85e0eb94d4a38eb2119ea183"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8daaa97a85e0eb94d4a38eb2119ea183">&#9670;&#160;</a></span>neorv32_neoled_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable NEOLED controller. </p> + +</div> +</div> +<a id="a8181d5c1d15b7b5eecdc018341ac14fa" name="a8181d5c1d15b7b5eecdc018341ac14fa"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8181d5c1d15b7b5eecdc018341ac14fa">&#9670;&#160;</a></span>neorv32_neoled_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable NEOLED controller. </p> + +</div> +</div> +<a id="a81c2c49198531fb6551eb288e29c084e" name="a81c2c49198531fb6551eb288e29c084e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a81c2c49198531fb6551eb288e29c084e">&#9670;&#160;</a></span>neorv32_neoled_get_buffer_size()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_neoled_get_buffer_size </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get NEOLED hardware buffer size.</p> +<dl class="section return"><dt>Returns</dt><dd>Number of entries in NEOLED TX buffer. </dd></dl> + +</div> +</div> +<a id="a484fcc6797b6d9cef86192e9593ec33d" name="a484fcc6797b6d9cef86192e9593ec33d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a484fcc6797b6d9cef86192e9593ec33d">&#9670;&#160;</a></span>neorv32_neoled_set_mode()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_set_mode </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>mode</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set NEOLED mode (24-bit RGB / 32-bit RGBW).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">mode</td><td>0 = 24-bit mode (RGB), 1 = 32-bit mode (RGBW) </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac6e94602453779a2791bd0734465f5a3" name="ac6e94602453779a2791bd0734465f5a3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac6e94602453779a2791bd0734465f5a3">&#9670;&#160;</a></span>neorv32_neoled_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_setup </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>prsc</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>t_total</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>t_high_zero</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>t_high_one</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>irq_mode</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable and configure NEOLED controller. The NEOLED control register bits are listed in <a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412">NEORV32_NEOLED_CTRL_enum</a>. This function performs a "raw" configuration (just configuring the according control register bit).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>Clock prescaler select (0..7). See <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">t_total</td><td>Number of pre-scaled clock ticks for total bit period (0..31). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">t_high_zero</td><td>Number of pre-scaled clock ticks to generate high-time for sending a '0' (0..31). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">t_high_one</td><td>Number of pre-scaled clock ticks to generate high-time for sending a '1' (0..31). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_mode</td><td>Interrupt condition (1=IRQ if FIFO is empty, 1=IRQ if FIFO is less than half-full). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="adade69c7368c28180b9992d5f0ab6031" name="adade69c7368c28180b9992d5f0ab6031"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adade69c7368c28180b9992d5f0ab6031">&#9670;&#160;</a></span>neorv32_neoled_setup_ws2812()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_setup_ws2812 </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>irq_mode</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Configure NEOLED controller for using WS2812 LEDs (NeoPixel-compatible). This function computes all the required timings and finally calls <a class="el" href="#ac6e94602453779a2791bd0734465f5a3">neorv32_neoled_setup</a>.</p> +<dl class="section note"><dt>Note</dt><dd>WS2812 timing: T_period = 1.2us, T_high_zero = 0.4us, T_high_one = 0.8us. Change the constants if required. </dd> +<dd> +This function uses the SYSINFO_CLK value (from the SYSINFO HW module) to do the timing computations.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_mode</td><td>Interrupt condition (1=IRQ if FIFO is empty, 1=IRQ if FIFO is less than half-full). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a5aa9eb4dd3655fa08e1b61eb0f36589c" name="a5aa9eb4dd3655fa08e1b61eb0f36589c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5aa9eb4dd3655fa08e1b61eb0f36589c">&#9670;&#160;</a></span>neorv32_neoled_strobe_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_strobe_blocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Send strobe command ("RESET") - blocking. </p> + +</div> +</div> +<a id="abf7882b949373df0774fc9cc20c2bd2e" name="abf7882b949373df0774fc9cc20c2bd2e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abf7882b949373df0774fc9cc20c2bd2e">&#9670;&#160;</a></span>neorv32_neoled_strobe_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_strobe_nonblocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Send strobe command ("RESET") - non-blocking. </p> + +</div> +</div> +<a id="a3ee5b3602da3ae982628e2802587e451" name="a3ee5b3602da3ae982628e2802587e451"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3ee5b3602da3ae982628e2802587e451">&#9670;&#160;</a></span>neorv32_neoled_write_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_write_blocking </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Send single RGB(W) data word to NEOLED module (blocking).</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is blocking as it polls the NEOLED FIFO full flag.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>LSB-aligned 24-bit RGB or 32-bit RGBW data </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__neoled_8h.html b/sw/neorv32__neoled_8h.html new file mode 100644 index 0000000000..be5c70ea28 --- /dev/null +++ b/sw/neorv32__neoled_8h.html @@ -0,0 +1,554 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_neoled.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> &#124; +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_neoled.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Smart LED Interface (NEOLED) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__neoled_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__neoled__t.html">neorv32_neoled_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ad2a318bd59be12de34797ced0f7743c6" id="r_ad2a318bd59be12de34797ced0f7743c6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad2a318bd59be12de34797ced0f7743c6">neorv32_neoled_write_nonblocking</a> (uint32_t data)</td></tr> +<tr class="separator:ad2a318bd59be12de34797ced0f7743c6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:a57398d92fb4fc735b33e89271726e1d6" id="r_a57398d92fb4fc735b33e89271726e1d6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a57398d92fb4fc735b33e89271726e1d6">neorv32_neoled_available</a> (void)</td></tr> +<tr class="separator:a57398d92fb4fc735b33e89271726e1d6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac6e94602453779a2791bd0734465f5a3" id="r_ac6e94602453779a2791bd0734465f5a3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac6e94602453779a2791bd0734465f5a3">neorv32_neoled_setup</a> (uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode)</td></tr> +<tr class="separator:ac6e94602453779a2791bd0734465f5a3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adade69c7368c28180b9992d5f0ab6031" id="r_adade69c7368c28180b9992d5f0ab6031"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adade69c7368c28180b9992d5f0ab6031">neorv32_neoled_setup_ws2812</a> (int irq_mode)</td></tr> +<tr class="separator:adade69c7368c28180b9992d5f0ab6031"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a484fcc6797b6d9cef86192e9593ec33d" id="r_a484fcc6797b6d9cef86192e9593ec33d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a484fcc6797b6d9cef86192e9593ec33d">neorv32_neoled_set_mode</a> (uint32_t mode)</td></tr> +<tr class="separator:a484fcc6797b6d9cef86192e9593ec33d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5aa9eb4dd3655fa08e1b61eb0f36589c" id="r_a5aa9eb4dd3655fa08e1b61eb0f36589c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5aa9eb4dd3655fa08e1b61eb0f36589c">neorv32_neoled_strobe_blocking</a> (void)</td></tr> +<tr class="separator:a5aa9eb4dd3655fa08e1b61eb0f36589c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abf7882b949373df0774fc9cc20c2bd2e" id="r_abf7882b949373df0774fc9cc20c2bd2e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abf7882b949373df0774fc9cc20c2bd2e">neorv32_neoled_strobe_nonblocking</a> (void)</td></tr> +<tr class="separator:abf7882b949373df0774fc9cc20c2bd2e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8181d5c1d15b7b5eecdc018341ac14fa" id="r_a8181d5c1d15b7b5eecdc018341ac14fa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8181d5c1d15b7b5eecdc018341ac14fa">neorv32_neoled_enable</a> (void)</td></tr> +<tr class="separator:a8181d5c1d15b7b5eecdc018341ac14fa"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8daaa97a85e0eb94d4a38eb2119ea183" id="r_a8daaa97a85e0eb94d4a38eb2119ea183"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8daaa97a85e0eb94d4a38eb2119ea183">neorv32_neoled_disable</a> (void)</td></tr> +<tr class="separator:a8daaa97a85e0eb94d4a38eb2119ea183"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3ee5b3602da3ae982628e2802587e451" id="r_a3ee5b3602da3ae982628e2802587e451"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3ee5b3602da3ae982628e2802587e451">neorv32_neoled_write_blocking</a> (uint32_t data)</td></tr> +<tr class="separator:a3ee5b3602da3ae982628e2802587e451"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a81c2c49198531fb6551eb288e29c084e" id="r_a81c2c49198531fb6551eb288e29c084e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a81c2c49198531fb6551eb288e29c084e">neorv32_neoled_get_buffer_size</a> (void)</td></tr> +<tr class="separator:a81c2c49198531fb6551eb288e29c084e"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: Smart LED Hardware Interface (NEOLED)</h2></td></tr> +<tr class="memitem:a3ccc1097bc70f92235d693b612fa994a" id="r_a3ccc1097bc70f92235d693b612fa994a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3ccc1097bc70f92235d693b612fa994a">NEORV32_NEOLED</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__neoled__t.html">neorv32_neoled_t</a>*) (<a class="el" href="neorv32_8h.html#a559fdce92e8af5efc426c8fc48d14f99">NEORV32_NEOLED_BASE</a>))</td></tr> +<tr class="separator:a3ccc1097bc70f92235d693b612fa994a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab99c7fed050816eae0fa0315562e0412" id="r_ab99c7fed050816eae0fa0315562e0412"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab99c7fed050816eae0fa0315562e0412">NEORV32_NEOLED_CTRL_enum</a> { <br /> +&#160;&#160;<a class="el" href="#ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7">NEOLED_CTRL_EN</a> = 0 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865">NEOLED_CTRL_MODE</a> = 1 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5">NEOLED_CTRL_STROBE</a> = 2 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0">NEOLED_CTRL_PRSC0</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91">NEOLED_CTRL_PRSC1</a> = 4 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8">NEOLED_CTRL_PRSC2</a> = 5 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8">NEOLED_CTRL_BUFS_0</a> = 6 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368">NEOLED_CTRL_BUFS_1</a> = 7 +, <br /> +&#160;&#160;<a class="el" href="#ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156">NEOLED_CTRL_BUFS_2</a> = 8 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1">NEOLED_CTRL_BUFS_3</a> = 9 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b">NEOLED_CTRL_T_TOT_0</a> = 10 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2">NEOLED_CTRL_T_TOT_1</a> = 11 +, <br /> +&#160;&#160;<a class="el" href="#ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0">NEOLED_CTRL_T_TOT_2</a> = 12 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2">NEOLED_CTRL_T_TOT_3</a> = 13 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3">NEOLED_CTRL_T_TOT_4</a> = 14 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7">NEOLED_CTRL_T_ZERO_H_0</a> = 15 +, <br /> +&#160;&#160;<a class="el" href="#ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae">NEOLED_CTRL_T_ZERO_H_1</a> = 16 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b">NEOLED_CTRL_T_ZERO_H_2</a> = 17 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c">NEOLED_CTRL_T_ZERO_H_3</a> = 18 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad">NEOLED_CTRL_T_ZERO_H_4</a> = 19 +, <br /> +&#160;&#160;<a class="el" href="#ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8">NEOLED_CTRL_T_ONE_H_0</a> = 20 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6">NEOLED_CTRL_T_ONE_H_1</a> = 21 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e">NEOLED_CTRL_T_ONE_H_2</a> = 22 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6">NEOLED_CTRL_T_ONE_H_3</a> = 23 +, <br /> +&#160;&#160;<a class="el" href="#ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1">NEOLED_CTRL_T_ONE_H_4</a> = 24 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339">NEOLED_CTRL_IRQ_CONF</a> = 27 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23">NEOLED_CTRL_TX_EMPTY</a> = 28 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73">NEOLED_CTRL_TX_HALF</a> = 29 +, <br /> +&#160;&#160;<a class="el" href="#ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983">NEOLED_CTRL_TX_FULL</a> = 30 +, <a class="el" href="#ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e">NEOLED_CTRL_TX_BUSY</a> = 31 +<br /> + }</td></tr> +<tr class="separator:ab99c7fed050816eae0fa0315562e0412"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Smart LED Interface (NEOLED) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the NEOLED unit was synthesized (IO_NEOLED_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a3ccc1097bc70f92235d693b612fa994a" name="a3ccc1097bc70f92235d693b612fa994a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3ccc1097bc70f92235d693b612fa994a">&#9670;&#160;</a></span>NEORV32_NEOLED</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_NEOLED&#160;&#160;&#160;((<a class="el" href="structneorv32__neoled__t.html">neorv32_neoled_t</a>*) (<a class="el" href="neorv32_8h.html#a559fdce92e8af5efc426c8fc48d14f99">NEORV32_NEOLED_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEOLED module hardware access (<a class="el" href="structneorv32__neoled__t.html">neorv32_neoled_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="ab99c7fed050816eae0fa0315562e0412" name="ab99c7fed050816eae0fa0315562e0412"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab99c7fed050816eae0fa0315562e0412">&#9670;&#160;</a></span>NEORV32_NEOLED_CTRL_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#ab99c7fed050816eae0fa0315562e0412">NEORV32_NEOLED_CTRL_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEOLED control register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7" name="ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7"></a>NEOLED_CTRL_EN&#160;</td><td class="fielddoc"><p>NEOLED control register(0) (r/w): NEOLED global enable </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865" name="ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865"></a>NEOLED_CTRL_MODE&#160;</td><td class="fielddoc"><p>NEOLED control register(1) (r/w): TX mode (0=24-bit, 1=32-bit) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5" name="ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5"></a>NEOLED_CTRL_STROBE&#160;</td><td class="fielddoc"><p>NEOLED control register(2) (r/w): Strobe (0=send normal data, 1=send RESET command on data write) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0" name="ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0"></a>NEOLED_CTRL_PRSC0&#160;</td><td class="fielddoc"><p>NEOLED control register(3) (r/w): Clock prescaler select bit 0 (pulse-clock speed select) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91" name="ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91"></a>NEOLED_CTRL_PRSC1&#160;</td><td class="fielddoc"><p>NEOLED control register(4) (r/w): Clock prescaler select bit 1 (pulse-clock speed select) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8" name="ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8"></a>NEOLED_CTRL_PRSC2&#160;</td><td class="fielddoc"><p>NEOLED control register(5) (r/w): Clock prescaler select bit 2 (pulse-clock speed select) </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8" name="ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8"></a>NEOLED_CTRL_BUFS_0&#160;</td><td class="fielddoc"><p>NEOLED control register(6) (r/-): log2(tx buffer size) bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368" name="ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368"></a>NEOLED_CTRL_BUFS_1&#160;</td><td class="fielddoc"><p>NEOLED control register(7) (r/-): log2(tx buffer size) bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156" name="ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156"></a>NEOLED_CTRL_BUFS_2&#160;</td><td class="fielddoc"><p>NEOLED control register(8) (r/-): log2(tx buffer size) bit 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1" name="ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1"></a>NEOLED_CTRL_BUFS_3&#160;</td><td class="fielddoc"><p>NEOLED control register(9) (r/-): log2(tx buffer size) bit 3 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b" name="ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b"></a>NEOLED_CTRL_T_TOT_0&#160;</td><td class="fielddoc"><p>NEOLED control register(10) (r/w): pulse-clock ticks per total period bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2" name="ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2"></a>NEOLED_CTRL_T_TOT_1&#160;</td><td class="fielddoc"><p>NEOLED control register(11) (r/w): pulse-clock ticks per total period bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0" name="ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0"></a>NEOLED_CTRL_T_TOT_2&#160;</td><td class="fielddoc"><p>NEOLED control register(12) (r/w): pulse-clock ticks per total period bit 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2" name="ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2"></a>NEOLED_CTRL_T_TOT_3&#160;</td><td class="fielddoc"><p>NEOLED control register(13) (r/w): pulse-clock ticks per total period bit 3 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3" name="ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3"></a>NEOLED_CTRL_T_TOT_4&#160;</td><td class="fielddoc"><p>NEOLED control register(14) (r/w): pulse-clock ticks per total period bit 4 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7" name="ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7"></a>NEOLED_CTRL_T_ZERO_H_0&#160;</td><td class="fielddoc"><p>NEOLED control register(15) (r/w): pulse-clock ticks per ZERO high-time bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae" name="ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae"></a>NEOLED_CTRL_T_ZERO_H_1&#160;</td><td class="fielddoc"><p>NEOLED control register(16) (r/w): pulse-clock ticks per ZERO high-time bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b" name="ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b"></a>NEOLED_CTRL_T_ZERO_H_2&#160;</td><td class="fielddoc"><p>NEOLED control register(17) (r/w): pulse-clock ticks per ZERO high-time bit 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c" name="ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c"></a>NEOLED_CTRL_T_ZERO_H_3&#160;</td><td class="fielddoc"><p>NEOLED control register(18) (r/w): pulse-clock ticks per ZERO high-time bit 3 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad" name="ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad"></a>NEOLED_CTRL_T_ZERO_H_4&#160;</td><td class="fielddoc"><p>NEOLED control register(19) (r/w): pulse-clock ticks per ZERO high-time bit 4 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8" name="ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8"></a>NEOLED_CTRL_T_ONE_H_0&#160;</td><td class="fielddoc"><p>NEOLED control register(20) (r/w): pulse-clock ticks per ONE high-time bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6" name="ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6"></a>NEOLED_CTRL_T_ONE_H_1&#160;</td><td class="fielddoc"><p>NEOLED control register(21) (r/w): pulse-clock ticks per ONE high-time bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e" name="ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e"></a>NEOLED_CTRL_T_ONE_H_2&#160;</td><td class="fielddoc"><p>NEOLED control register(22) (r/w): pulse-clock ticks per ONE high-time bit 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6" name="ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6"></a>NEOLED_CTRL_T_ONE_H_3&#160;</td><td class="fielddoc"><p>NEOLED control register(23) (r/w): pulse-clock ticks per ONE high-time bit 3 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1" name="ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1"></a>NEOLED_CTRL_T_ONE_H_4&#160;</td><td class="fielddoc"><p>NEOLED control register(24) (r/w): pulse-clock ticks per ONE high-time bit 4 </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339" name="ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339"></a>NEOLED_CTRL_IRQ_CONF&#160;</td><td class="fielddoc"><p>NEOLED control register(27) (r/w): TX FIFO interrupt: 1=IRQ if FIFO is empty, 1=IRQ if FIFO is less than half-full </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23" name="ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23"></a>NEOLED_CTRL_TX_EMPTY&#160;</td><td class="fielddoc"><p>NEOLED control register(28) (r/-): TX FIFO is empty </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73" name="ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73"></a>NEOLED_CTRL_TX_HALF&#160;</td><td class="fielddoc"><p>NEOLED control register(29) (r/-): TX FIFO is at least half-full </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983" name="ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983"></a>NEOLED_CTRL_TX_FULL&#160;</td><td class="fielddoc"><p>NEOLED control register(30) (r/-): TX FIFO is full </p> +</td></tr> +<tr><td class="fieldname"><a id="ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e" name="ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e"></a>NEOLED_CTRL_TX_BUSY&#160;</td><td class="fielddoc"><p>NEOLED control register(31) (r/-): busy flag </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a57398d92fb4fc735b33e89271726e1d6" name="a57398d92fb4fc735b33e89271726e1d6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a57398d92fb4fc735b33e89271726e1d6">&#9670;&#160;</a></span>neorv32_neoled_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_neoled_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if NEOLED unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if NEOLED was not synthesized, 1 if NEOLED is available. </dd></dl> + +</div> +</div> +<a id="a8daaa97a85e0eb94d4a38eb2119ea183" name="a8daaa97a85e0eb94d4a38eb2119ea183"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8daaa97a85e0eb94d4a38eb2119ea183">&#9670;&#160;</a></span>neorv32_neoled_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable NEOLED controller. </p> + +</div> +</div> +<a id="a8181d5c1d15b7b5eecdc018341ac14fa" name="a8181d5c1d15b7b5eecdc018341ac14fa"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8181d5c1d15b7b5eecdc018341ac14fa">&#9670;&#160;</a></span>neorv32_neoled_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable NEOLED controller. </p> + +</div> +</div> +<a id="a81c2c49198531fb6551eb288e29c084e" name="a81c2c49198531fb6551eb288e29c084e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a81c2c49198531fb6551eb288e29c084e">&#9670;&#160;</a></span>neorv32_neoled_get_buffer_size()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_neoled_get_buffer_size </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get NEOLED hardware buffer size.</p> +<dl class="section return"><dt>Returns</dt><dd>Number of entries in NEOLED TX buffer. </dd></dl> + +</div> +</div> +<a id="a484fcc6797b6d9cef86192e9593ec33d" name="a484fcc6797b6d9cef86192e9593ec33d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a484fcc6797b6d9cef86192e9593ec33d">&#9670;&#160;</a></span>neorv32_neoled_set_mode()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_set_mode </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>mode</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set NEOLED mode (24-bit RGB / 32-bit RGBW).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">mode</td><td>0 = 24-bit mode (RGB), 1 = 32-bit mode (RGBW) </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac6e94602453779a2791bd0734465f5a3" name="ac6e94602453779a2791bd0734465f5a3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac6e94602453779a2791bd0734465f5a3">&#9670;&#160;</a></span>neorv32_neoled_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_setup </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>prsc</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>t_total</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>t_high_zero</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>t_high_one</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>irq_mode</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable and configure NEOLED controller. The NEOLED control register bits are listed in <a class="el" href="#ab99c7fed050816eae0fa0315562e0412">NEORV32_NEOLED_CTRL_enum</a>. This function performs a "raw" configuration (just configuring the according control register bit).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>Clock prescaler select (0..7). See <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">t_total</td><td>Number of pre-scaled clock ticks for total bit period (0..31). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">t_high_zero</td><td>Number of pre-scaled clock ticks to generate high-time for sending a '0' (0..31). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">t_high_one</td><td>Number of pre-scaled clock ticks to generate high-time for sending a '1' (0..31). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_mode</td><td>Interrupt condition (1=IRQ if FIFO is empty, 1=IRQ if FIFO is less than half-full). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="adade69c7368c28180b9992d5f0ab6031" name="adade69c7368c28180b9992d5f0ab6031"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adade69c7368c28180b9992d5f0ab6031">&#9670;&#160;</a></span>neorv32_neoled_setup_ws2812()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_setup_ws2812 </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>irq_mode</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Configure NEOLED controller for using WS2812 LEDs (NeoPixel-compatible). This function computes all the required timings and finally calls <a class="el" href="neorv32__neoled_8c.html#ac6e94602453779a2791bd0734465f5a3">neorv32_neoled_setup</a>.</p> +<dl class="section note"><dt>Note</dt><dd>WS2812 timing: T_period = 1.2us, T_high_zero = 0.4us, T_high_one = 0.8us. Change the constants if required. </dd> +<dd> +This function uses the SYSINFO_CLK value (from the SYSINFO HW module) to do the timing computations.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_mode</td><td>Interrupt condition (1=IRQ if FIFO is empty, 1=IRQ if FIFO is less than half-full). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a5aa9eb4dd3655fa08e1b61eb0f36589c" name="a5aa9eb4dd3655fa08e1b61eb0f36589c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5aa9eb4dd3655fa08e1b61eb0f36589c">&#9670;&#160;</a></span>neorv32_neoled_strobe_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_strobe_blocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Send strobe command ("RESET") - blocking. </p> + +</div> +</div> +<a id="abf7882b949373df0774fc9cc20c2bd2e" name="abf7882b949373df0774fc9cc20c2bd2e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abf7882b949373df0774fc9cc20c2bd2e">&#9670;&#160;</a></span>neorv32_neoled_strobe_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_strobe_nonblocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Send strobe command ("RESET") - non-blocking. </p> + +</div> +</div> +<a id="a3ee5b3602da3ae982628e2802587e451" name="a3ee5b3602da3ae982628e2802587e451"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3ee5b3602da3ae982628e2802587e451">&#9670;&#160;</a></span>neorv32_neoled_write_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_write_blocking </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Send single RGB(W) data word to NEOLED module (blocking).</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is blocking as it polls the NEOLED FIFO full flag.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>LSB-aligned 24-bit RGB or 32-bit RGBW data </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ad2a318bd59be12de34797ced0f7743c6" name="ad2a318bd59be12de34797ced0f7743c6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad2a318bd59be12de34797ced0f7743c6">&#9670;&#160;</a></span>neorv32_neoled_write_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_neoled_write_nonblocking </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Send single RGB(W) data word to NEOLED module (non-blocking).</p> +<dl class="section warning"><dt>Warning</dt><dd>This function uses NO busy/flag checks at all!</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>LSB-aligned 24-bit RGB or 32-bit RGBW data </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__neoled_8h_source.html b/sw/neorv32__neoled_8h_source.html new file mode 100644 index 0000000000..6df111f83d --- /dev/null +++ b/sw/neorv32__neoled_8h_source.html @@ -0,0 +1,227 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_neoled.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_neoled.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__neoled_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_neoled_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_neoled_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__neoled__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__neoled__t.html#adfe7618c002ff88dd22e65fcedfd6139"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__neoled__t.html#adfe7618c002ff88dd22e65fcedfd6139">CTRL</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__neoled__t.html#a995fb1d63a9dfb3f20d715932781c1de"> 31</a></span> uint32_t <a class="code hl_variable" href="structneorv32__neoled__t.html#a995fb1d63a9dfb3f20d715932781c1de">DATA</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>} <a class="code hl_struct" href="structneorv32__neoled__t.html">neorv32_neoled_t</a>;</div> +</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#a3ccc1097bc70f92235d693b612fa994a"> 35</a></span><span class="preprocessor">#define NEORV32_NEOLED ((neorv32_neoled_t*) (NEORV32_NEOLED_BASE))</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="foldopen" id="foldopen00038" data-start="{" data-end="};"> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412"> 38</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412">NEORV32_NEOLED_CTRL_enum</a> {</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7"> 39</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7">NEOLED_CTRL_EN</a> = 0, </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865"> 40</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865">NEOLED_CTRL_MODE</a> = 1, </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5">NEOLED_CTRL_STROBE</a> = 2, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0">NEOLED_CTRL_PRSC0</a> = 3, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91">NEOLED_CTRL_PRSC1</a> = 4, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8"> 44</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8">NEOLED_CTRL_PRSC2</a> = 5, </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8"> 46</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8">NEOLED_CTRL_BUFS_0</a> = 6, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368">NEOLED_CTRL_BUFS_1</a> = 7, </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156"> 48</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156">NEOLED_CTRL_BUFS_2</a> = 8, </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1"> 49</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1">NEOLED_CTRL_BUFS_3</a> = 9, </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b"> 51</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b">NEOLED_CTRL_T_TOT_0</a> = 10, </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2"> 52</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2">NEOLED_CTRL_T_TOT_1</a> = 11, </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0"> 53</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0">NEOLED_CTRL_T_TOT_2</a> = 12, </div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2"> 54</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2">NEOLED_CTRL_T_TOT_3</a> = 13, </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3"> 55</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3">NEOLED_CTRL_T_TOT_4</a> = 14, </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7"> 57</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7">NEOLED_CTRL_T_ZERO_H_0</a> = 15, </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae"> 58</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae">NEOLED_CTRL_T_ZERO_H_1</a> = 16, </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b"> 59</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b">NEOLED_CTRL_T_ZERO_H_2</a> = 17, </div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c"> 60</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c">NEOLED_CTRL_T_ZERO_H_3</a> = 18, </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad"> 61</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad">NEOLED_CTRL_T_ZERO_H_4</a> = 19, </div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8"> 63</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8">NEOLED_CTRL_T_ONE_H_0</a> = 20, </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6"> 64</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6">NEOLED_CTRL_T_ONE_H_1</a> = 21, </div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e"> 65</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e">NEOLED_CTRL_T_ONE_H_2</a> = 22, </div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6"> 66</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6">NEOLED_CTRL_T_ONE_H_3</a> = 23, </div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1"> 67</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1">NEOLED_CTRL_T_ONE_H_4</a> = 24, </div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339"> 69</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339">NEOLED_CTRL_IRQ_CONF</a> = 27, </div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23"> 70</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23">NEOLED_CTRL_TX_EMPTY</a> = 28, </div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73"> 71</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73">NEOLED_CTRL_TX_HALF</a> = 29, </div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983"> 72</a></span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983">NEOLED_CTRL_TX_FULL</a> = 30, </div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_enumvalue" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e">NEOLED_CTRL_TX_BUSY</a> = 31 </div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e"> 74</a></span>};</div> +</div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__neoled_8h.html#a57398d92fb4fc735b33e89271726e1d6">neorv32_neoled_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__neoled_8h.html#ac6e94602453779a2791bd0734465f5a3">neorv32_neoled_setup</a>(uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, <span class="keywordtype">int</span> irq_mode);</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__neoled_8h.html#adade69c7368c28180b9992d5f0ab6031">neorv32_neoled_setup_ws2812</a>(<span class="keywordtype">int</span> irq_mode);</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__neoled_8h.html#a484fcc6797b6d9cef86192e9593ec33d">neorv32_neoled_set_mode</a>(uint32_t mode);</div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__neoled_8h.html#a5aa9eb4dd3655fa08e1b61eb0f36589c">neorv32_neoled_strobe_blocking</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__neoled_8h.html#abf7882b949373df0774fc9cc20c2bd2e">neorv32_neoled_strobe_nonblocking</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__neoled_8h.html#a8181d5c1d15b7b5eecdc018341ac14fa">neorv32_neoled_enable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__neoled_8h.html#a8daaa97a85e0eb94d4a38eb2119ea183">neorv32_neoled_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__neoled_8h.html#a3ee5b3602da3ae982628e2802587e451">neorv32_neoled_write_blocking</a>(uint32_t data);</div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span>uint32_t <a class="code hl_function" href="neorv32__neoled_8h.html#a81c2c49198531fb6551eb288e29c084e">neorv32_neoled_get_buffer_size</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00102" data-start="{" data-end="}"> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"><a class="line" href="neorv32__neoled_8h.html#ad2a318bd59be12de34797ced0f7743c6"> 102</a></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __attribute__ ((always_inline)) <a class="code hl_function" href="neorv32__neoled_8h.html#ad2a318bd59be12de34797ced0f7743c6">neorv32_neoled_write_nonblocking</a>(uint32_t data) {</div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <a class="code hl_define" href="neorv32__neoled_8h.html#a3ccc1097bc70f92235d693b612fa994a">NEORV32_NEOLED</a>-&gt;DATA = data; <span class="comment">// send new LED data</span></div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span>}</div> +</div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_neoled_h</span></div> +<div class="ttc" id="aneorv32__neoled_8h_html_a3ccc1097bc70f92235d693b612fa994a"><div class="ttname"><a href="neorv32__neoled_8h.html#a3ccc1097bc70f92235d693b612fa994a">NEORV32_NEOLED</a></div><div class="ttdeci">#define NEORV32_NEOLED</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:35</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_a3ee5b3602da3ae982628e2802587e451"><div class="ttname"><a href="neorv32__neoled_8h.html#a3ee5b3602da3ae982628e2802587e451">neorv32_neoled_write_blocking</a></div><div class="ttdeci">void neorv32_neoled_write_blocking(uint32_t data)</div><div class="ttdef"><b>Definition</b> neorv32_neoled.c:193</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_a484fcc6797b6d9cef86192e9593ec33d"><div class="ttname"><a href="neorv32__neoled_8h.html#a484fcc6797b6d9cef86192e9593ec33d">neorv32_neoled_set_mode</a></div><div class="ttdeci">void neorv32_neoled_set_mode(uint32_t mode)</div><div class="ttdef"><b>Definition</b> neorv32_neoled.c:130</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_a57398d92fb4fc735b33e89271726e1d6"><div class="ttname"><a href="neorv32__neoled_8h.html#a57398d92fb4fc735b33e89271726e1d6">neorv32_neoled_available</a></div><div class="ttdeci">int neorv32_neoled_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_neoled.c:26</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_a5aa9eb4dd3655fa08e1b61eb0f36589c"><div class="ttname"><a href="neorv32__neoled_8h.html#a5aa9eb4dd3655fa08e1b61eb0f36589c">neorv32_neoled_strobe_blocking</a></div><div class="ttdeci">void neorv32_neoled_strobe_blocking(void)</div><div class="ttdef"><b>Definition</b> neorv32_neoled.c:142</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_a8181d5c1d15b7b5eecdc018341ac14fa"><div class="ttname"><a href="neorv32__neoled_8h.html#a8181d5c1d15b7b5eecdc018341ac14fa">neorv32_neoled_enable</a></div><div class="ttdeci">void neorv32_neoled_enable(void)</div><div class="ttdef"><b>Definition</b> neorv32_neoled.c:171</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_a81c2c49198531fb6551eb288e29c084e"><div class="ttname"><a href="neorv32__neoled_8h.html#a81c2c49198531fb6551eb288e29c084e">neorv32_neoled_get_buffer_size</a></div><div class="ttdeci">uint32_t neorv32_neoled_get_buffer_size(void)</div><div class="ttdef"><b>Definition</b> neorv32_neoled.c:210</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_a8daaa97a85e0eb94d4a38eb2119ea183"><div class="ttname"><a href="neorv32__neoled_8h.html#a8daaa97a85e0eb94d4a38eb2119ea183">neorv32_neoled_disable</a></div><div class="ttdeci">void neorv32_neoled_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_neoled.c:180</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412">NEORV32_NEOLED_CTRL_enum</a></div><div class="ttdeci">NEORV32_NEOLED_CTRL_enum</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:38</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1">NEOLED_CTRL_T_ONE_H_4</a></div><div class="ttdeci">@ NEOLED_CTRL_T_ONE_H_4</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:67</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad">NEOLED_CTRL_T_ZERO_H_4</a></div><div class="ttdeci">@ NEOLED_CTRL_T_ZERO_H_4</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:61</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91">NEOLED_CTRL_PRSC1</a></div><div class="ttdeci">@ NEOLED_CTRL_PRSC1</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:43</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0">NEOLED_CTRL_PRSC0</a></div><div class="ttdeci">@ NEOLED_CTRL_PRSC0</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:42</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73">NEOLED_CTRL_TX_HALF</a></div><div class="ttdeci">@ NEOLED_CTRL_TX_HALF</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:71</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae">NEOLED_CTRL_T_ZERO_H_1</a></div><div class="ttdeci">@ NEOLED_CTRL_T_ZERO_H_1</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:58</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23">NEOLED_CTRL_TX_EMPTY</a></div><div class="ttdeci">@ NEOLED_CTRL_TX_EMPTY</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:70</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6">NEOLED_CTRL_T_ONE_H_3</a></div><div class="ttdeci">@ NEOLED_CTRL_T_ONE_H_3</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:66</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339">NEOLED_CTRL_IRQ_CONF</a></div><div class="ttdeci">@ NEOLED_CTRL_IRQ_CONF</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:69</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8">NEOLED_CTRL_BUFS_0</a></div><div class="ttdeci">@ NEOLED_CTRL_BUFS_0</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:46</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8">NEOLED_CTRL_PRSC2</a></div><div class="ttdeci">@ NEOLED_CTRL_PRSC2</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:44</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3">NEOLED_CTRL_T_TOT_4</a></div><div class="ttdeci">@ NEOLED_CTRL_T_TOT_4</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:55</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0">NEOLED_CTRL_T_TOT_2</a></div><div class="ttdeci">@ NEOLED_CTRL_T_TOT_2</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:53</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5">NEOLED_CTRL_STROBE</a></div><div class="ttdeci">@ NEOLED_CTRL_STROBE</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:41</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b">NEOLED_CTRL_T_TOT_0</a></div><div class="ttdeci">@ NEOLED_CTRL_T_TOT_0</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:51</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e">NEOLED_CTRL_T_ONE_H_2</a></div><div class="ttdeci">@ NEOLED_CTRL_T_ONE_H_2</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:65</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e">NEOLED_CTRL_TX_BUSY</a></div><div class="ttdeci">@ NEOLED_CTRL_TX_BUSY</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:73</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7">NEOLED_CTRL_T_ZERO_H_0</a></div><div class="ttdeci">@ NEOLED_CTRL_T_ZERO_H_0</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:57</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8">NEOLED_CTRL_T_ONE_H_0</a></div><div class="ttdeci">@ NEOLED_CTRL_T_ONE_H_0</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:63</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b">NEOLED_CTRL_T_ZERO_H_2</a></div><div class="ttdeci">@ NEOLED_CTRL_T_ZERO_H_2</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:59</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c">NEOLED_CTRL_T_ZERO_H_3</a></div><div class="ttdeci">@ NEOLED_CTRL_T_ZERO_H_3</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:60</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865">NEOLED_CTRL_MODE</a></div><div class="ttdeci">@ NEOLED_CTRL_MODE</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:40</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1">NEOLED_CTRL_BUFS_3</a></div><div class="ttdeci">@ NEOLED_CTRL_BUFS_3</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:49</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2">NEOLED_CTRL_T_TOT_3</a></div><div class="ttdeci">@ NEOLED_CTRL_T_TOT_3</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:54</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983">NEOLED_CTRL_TX_FULL</a></div><div class="ttdeci">@ NEOLED_CTRL_TX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:72</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2">NEOLED_CTRL_T_TOT_1</a></div><div class="ttdeci">@ NEOLED_CTRL_T_TOT_1</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:52</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156">NEOLED_CTRL_BUFS_2</a></div><div class="ttdeci">@ NEOLED_CTRL_BUFS_2</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:48</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6">NEOLED_CTRL_T_ONE_H_1</a></div><div class="ttdeci">@ NEOLED_CTRL_T_ONE_H_1</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:64</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368">NEOLED_CTRL_BUFS_1</a></div><div class="ttdeci">@ NEOLED_CTRL_BUFS_1</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:47</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7"><div class="ttname"><a href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7">NEOLED_CTRL_EN</a></div><div class="ttdeci">@ NEOLED_CTRL_EN</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:39</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_abf7882b949373df0774fc9cc20c2bd2e"><div class="ttname"><a href="neorv32__neoled_8h.html#abf7882b949373df0774fc9cc20c2bd2e">neorv32_neoled_strobe_nonblocking</a></div><div class="ttdeci">void neorv32_neoled_strobe_nonblocking(void)</div><div class="ttdef"><b>Definition</b> neorv32_neoled.c:157</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ac6e94602453779a2791bd0734465f5a3"><div class="ttname"><a href="neorv32__neoled_8h.html#ac6e94602453779a2791bd0734465f5a3">neorv32_neoled_setup</a></div><div class="ttdeci">void neorv32_neoled_setup(uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode)</div><div class="ttdef"><b>Definition</b> neorv32_neoled.c:47</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_ad2a318bd59be12de34797ced0f7743c6"><div class="ttname"><a href="neorv32__neoled_8h.html#ad2a318bd59be12de34797ced0f7743c6">neorv32_neoled_write_nonblocking</a></div><div class="ttdeci">void neorv32_neoled_write_nonblocking(uint32_t data)</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:102</div></div> +<div class="ttc" id="aneorv32__neoled_8h_html_adade69c7368c28180b9992d5f0ab6031"><div class="ttname"><a href="neorv32__neoled_8h.html#adade69c7368c28180b9992d5f0ab6031">neorv32_neoled_setup_ws2812</a></div><div class="ttdeci">void neorv32_neoled_setup_ws2812(int irq_mode)</div><div class="ttdef"><b>Definition</b> neorv32_neoled.c:71</div></div> +<div class="ttc" id="astructneorv32__neoled__t_html"><div class="ttname"><a href="structneorv32__neoled__t.html">neorv32_neoled_t</a></div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:29</div></div> +<div class="ttc" id="astructneorv32__neoled__t_html_a995fb1d63a9dfb3f20d715932781c1de"><div class="ttname"><a href="structneorv32__neoled__t.html#a995fb1d63a9dfb3f20d715932781c1de">neorv32_neoled_t::DATA</a></div><div class="ttdeci">uint32_t DATA</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:31</div></div> +<div class="ttc" id="astructneorv32__neoled__t_html_adfe7618c002ff88dd22e65fcedfd6139"><div class="ttname"><a href="structneorv32__neoled__t.html#adfe7618c002ff88dd22e65fcedfd6139">neorv32_neoled_t::CTRL</a></div><div class="ttdeci">uint32_t CTRL</div><div class="ttdef"><b>Definition</b> neorv32_neoled.h:30</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__newlib_8c.html b/sw/neorv32__newlib_8c.html new file mode 100644 index 0000000000..69126f8a96 --- /dev/null +++ b/sw/neorv32__newlib_8c.html @@ -0,0 +1,167 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_newlib.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">neorv32_newlib.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>NEORV32-specific Newlib system calls. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +<code>#include &lt;newlib.h&gt;</code><br /> +<code>#include &lt;sys/stat.h&gt;</code><br /> +<code>#include &lt;sys/timeb.h&gt;</code><br /> +<code>#include &lt;sys/times.h&gt;</code><br /> +<code>#include &lt;sys/time.h&gt;</code><br /> +<code>#include &lt;time.h&gt;</code><br /> +<code>#include &lt;unistd.h&gt;</code><br /> +<code>#include &lt;errno.h&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a38f8394eee3a086b87ff6d431e1e5343" id="r_a38f8394eee3a086b87ff6d431e1e5343"><td class="memItemLeft" align="right" valign="top"><a id="a38f8394eee3a086b87ff6d431e1e5343" name="a38f8394eee3a086b87ff6d431e1e5343"></a> +void *&#160;</td><td class="memItemRight" valign="bottom"><b>_sbrk</b> (int incr)</td></tr> +<tr class="separator:a38f8394eee3a086b87ff6d431e1e5343"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5aab5e2acfd600e3667dc915a2bbc7cb" id="r_a5aab5e2acfd600e3667dc915a2bbc7cb"><td class="memItemLeft" align="right" valign="top"><a id="a5aab5e2acfd600e3667dc915a2bbc7cb" name="a5aab5e2acfd600e3667dc915a2bbc7cb"></a> +int&#160;</td><td class="memItemRight" valign="bottom"><b>_close</b> (int file)</td></tr> +<tr class="separator:a5aab5e2acfd600e3667dc915a2bbc7cb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a41eef54307912a82d20e71c3d47315aa" id="r_a41eef54307912a82d20e71c3d47315aa"><td class="memItemLeft" align="right" valign="top"><a id="a41eef54307912a82d20e71c3d47315aa" name="a41eef54307912a82d20e71c3d47315aa"></a> +int&#160;</td><td class="memItemRight" valign="bottom"><b>_fstat</b> (int file, struct stat *st)</td></tr> +<tr class="separator:a41eef54307912a82d20e71c3d47315aa"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad3134a3dc296622b8d1c5456e481505b" id="r_ad3134a3dc296622b8d1c5456e481505b"><td class="memItemLeft" align="right" valign="top"><a id="ad3134a3dc296622b8d1c5456e481505b" name="ad3134a3dc296622b8d1c5456e481505b"></a> +int&#160;</td><td class="memItemRight" valign="bottom"><b>_isatty</b> (int file)</td></tr> +<tr class="separator:ad3134a3dc296622b8d1c5456e481505b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7a61311bdf1cb025fc07dc2bdae22ce4" id="r_a7a61311bdf1cb025fc07dc2bdae22ce4"><td class="memItemLeft" align="right" valign="top"><a id="a7a61311bdf1cb025fc07dc2bdae22ce4" name="a7a61311bdf1cb025fc07dc2bdae22ce4"></a> +int&#160;</td><td class="memItemRight" valign="bottom"><b>_lseek</b> (int file, int ptr, int dir)</td></tr> +<tr class="separator:a7a61311bdf1cb025fc07dc2bdae22ce4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abc96bd69b58b2deaddb484478d911c1b" id="r_abc96bd69b58b2deaddb484478d911c1b"><td class="memItemLeft" align="right" valign="top"><a id="abc96bd69b58b2deaddb484478d911c1b" name="abc96bd69b58b2deaddb484478d911c1b"></a> +void&#160;</td><td class="memItemRight" valign="bottom"><b>_exit</b> (int status)</td></tr> +<tr class="separator:abc96bd69b58b2deaddb484478d911c1b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3ada001944b574974184d2377be0bec3" id="r_a3ada001944b574974184d2377be0bec3"><td class="memItemLeft" align="right" valign="top"><a id="a3ada001944b574974184d2377be0bec3" name="a3ada001944b574974184d2377be0bec3"></a> +void&#160;</td><td class="memItemRight" valign="bottom"><b>_kill</b> (int pid, int sig)</td></tr> +<tr class="separator:a3ada001944b574974184d2377be0bec3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0ebe0c689c80a2bca135fd157da50fbf" id="r_a0ebe0c689c80a2bca135fd157da50fbf"><td class="memItemLeft" align="right" valign="top"><a id="a0ebe0c689c80a2bca135fd157da50fbf" name="a0ebe0c689c80a2bca135fd157da50fbf"></a> +int&#160;</td><td class="memItemRight" valign="bottom"><b>_getpid</b> ()</td></tr> +<tr class="separator:a0ebe0c689c80a2bca135fd157da50fbf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa025a12d45f60c7d0eae249e61f0c7f9" id="r_aa025a12d45f60c7d0eae249e61f0c7f9"><td class="memItemLeft" align="right" valign="top"><a id="aa025a12d45f60c7d0eae249e61f0c7f9" name="aa025a12d45f60c7d0eae249e61f0c7f9"></a> +int&#160;</td><td class="memItemRight" valign="bottom"><b>_write</b> (int file, char *ptr, int len)</td></tr> +<tr class="separator:aa025a12d45f60c7d0eae249e61f0c7f9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4f9bf1e1602f2828e0a54e70c3b2dccb" id="r_a4f9bf1e1602f2828e0a54e70c3b2dccb"><td class="memItemLeft" align="right" valign="top"><a id="a4f9bf1e1602f2828e0a54e70c3b2dccb" name="a4f9bf1e1602f2828e0a54e70c3b2dccb"></a> +int&#160;</td><td class="memItemRight" valign="bottom"><b>_read</b> (int file, char *ptr, int len)</td></tr> +<tr class="separator:a4f9bf1e1602f2828e0a54e70c3b2dccb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adb34f735d9a9fc1e9d1acc68a6c05d8c" id="r_adb34f735d9a9fc1e9d1acc68a6c05d8c"><td class="memItemLeft" align="right" valign="top"><a id="adb34f735d9a9fc1e9d1acc68a6c05d8c" name="adb34f735d9a9fc1e9d1acc68a6c05d8c"></a> +int&#160;</td><td class="memItemRight" valign="bottom"><b>_gettimeofday</b> (struct timeval *tp, void *tzp)</td></tr> +<tr class="separator:adb34f735d9a9fc1e9d1acc68a6c05d8c"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:ad65a8842cc674e3ddf69355898c0ecbf" id="r_ad65a8842cc674e3ddf69355898c0ecbf"><td class="memItemLeft" align="right" valign="top"><a id="ad65a8842cc674e3ddf69355898c0ecbf" name="ad65a8842cc674e3ddf69355898c0ecbf"></a> +int&#160;</td><td class="memItemRight" valign="bottom"><b>errno</b></td></tr> +<tr class="separator:ad65a8842cc674e3ddf69355898c0ecbf"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>NEORV32-specific Newlib system calls. </p> +<dl class="section note"><dt>Note</dt><dd>Original source file: <a href="https://github.com/openhwgroup/cv32e40p/blob/master/example_tb/core/custom/syscalls.c">https://github.com/openhwgroup/cv32e40p/blob/master/example_tb/core/custom/syscalls.c</a> </dd> +<dd> +More information was derived from: <a href="https://interrupt.memfault.com/blog/boostrapping-libc-with-newlib#implementing-newlib">https://interrupt.memfault.com/blog/boostrapping-libc-with-newlib#implementing-newlib</a></dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__onewire_8c.html b/sw/neorv32__onewire_8c.html new file mode 100644 index 0000000000..471e2eea37 --- /dev/null +++ b/sw/neorv32__onewire_8c.html @@ -0,0 +1,592 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_onewire.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_onewire.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>1-Wire Interface Controller (ONEWIRE) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a865e5c381fd3c27c6981a589a5124d1e" id="r_a865e5c381fd3c27c6981a589a5124d1e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a865e5c381fd3c27c6981a589a5124d1e">neorv32_onewire_available</a> (void)</td></tr> +<tr class="separator:a865e5c381fd3c27c6981a589a5124d1e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a32128bfcea4d8c8e31b0b59498e59798" id="r_a32128bfcea4d8c8e31b0b59498e59798"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a32128bfcea4d8c8e31b0b59498e59798">neorv32_onewire_get_fifo_depth</a> (void)</td></tr> +<tr class="separator:a32128bfcea4d8c8e31b0b59498e59798"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a224005037387484dfa510a1355a62828" id="r_a224005037387484dfa510a1355a62828"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a224005037387484dfa510a1355a62828">neorv32_onewire_setup</a> (uint32_t t_base)</td></tr> +<tr class="separator:a224005037387484dfa510a1355a62828"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae6fe766e7decf18869cfb86bba741ca4" id="r_ae6fe766e7decf18869cfb86bba741ca4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae6fe766e7decf18869cfb86bba741ca4">neorv32_onewire_enable</a> (void)</td></tr> +<tr class="separator:ae6fe766e7decf18869cfb86bba741ca4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7e329eeb1cd98301a53b271a6a102385" id="r_a7e329eeb1cd98301a53b271a6a102385"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7e329eeb1cd98301a53b271a6a102385">neorv32_onewire_disable</a> (void)</td></tr> +<tr class="separator:a7e329eeb1cd98301a53b271a6a102385"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a05e220711255e82460bc92010199eb53" id="r_a05e220711255e82460bc92010199eb53"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a05e220711255e82460bc92010199eb53">neorv32_onewire_flush</a> (void)</td></tr> +<tr class="separator:a05e220711255e82460bc92010199eb53"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a122531c7154126858c46d89e003d838d" id="r_a122531c7154126858c46d89e003d838d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a122531c7154126858c46d89e003d838d">neorv32_onewire_sense</a> (void)</td></tr> +<tr class="separator:a122531c7154126858c46d89e003d838d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a01b6236b89c045ddbd58398361c6ee0a" id="r_a01b6236b89c045ddbd58398361c6ee0a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a01b6236b89c045ddbd58398361c6ee0a">neorv32_onewire_busy</a> (void)</td></tr> +<tr class="separator:a01b6236b89c045ddbd58398361c6ee0a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3072f7167831edc95dee44ecfef6a0d4" id="r_a3072f7167831edc95dee44ecfef6a0d4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3072f7167831edc95dee44ecfef6a0d4">neorv32_onewire_reset</a> (void)</td></tr> +<tr class="separator:a3072f7167831edc95dee44ecfef6a0d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a43eb8a08eeaa83e3d7e9aa5058a4269f" id="r_a43eb8a08eeaa83e3d7e9aa5058a4269f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a43eb8a08eeaa83e3d7e9aa5058a4269f">neorv32_onewire_reset_get_presence</a> (void)</td></tr> +<tr class="separator:a43eb8a08eeaa83e3d7e9aa5058a4269f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aace8398062b759256a516e6245aced83" id="r_aace8398062b759256a516e6245aced83"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aace8398062b759256a516e6245aced83">neorv32_onewire_read_bit</a> (void)</td></tr> +<tr class="separator:aace8398062b759256a516e6245aced83"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa4a19d2d8dc3b3401307615aec201190" id="r_aa4a19d2d8dc3b3401307615aec201190"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa4a19d2d8dc3b3401307615aec201190">neorv32_onewire_read_bit_get</a> (void)</td></tr> +<tr class="separator:aa4a19d2d8dc3b3401307615aec201190"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a49d0a2a386f129fd2f4fed880bba31d4" id="r_a49d0a2a386f129fd2f4fed880bba31d4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a49d0a2a386f129fd2f4fed880bba31d4">neorv32_onewire_write_bit</a> (uint8_t bit)</td></tr> +<tr class="separator:a49d0a2a386f129fd2f4fed880bba31d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a01ddba7a9148be542b5c52e39e6f46d6" id="r_a01ddba7a9148be542b5c52e39e6f46d6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a01ddba7a9148be542b5c52e39e6f46d6">neorv32_onewire_read_byte</a> (void)</td></tr> +<tr class="separator:a01ddba7a9148be542b5c52e39e6f46d6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4c7eec15c095c97c939163f631f51dab" id="r_a4c7eec15c095c97c939163f631f51dab"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4c7eec15c095c97c939163f631f51dab">neorv32_onewire_read_byte_get</a> (void)</td></tr> +<tr class="separator:a4c7eec15c095c97c939163f631f51dab"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a23b96b68c3214b188525eb102cafb620" id="r_a23b96b68c3214b188525eb102cafb620"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a23b96b68c3214b188525eb102cafb620">neorv32_onewire_write_byte</a> (uint8_t byte)</td></tr> +<tr class="separator:a23b96b68c3214b188525eb102cafb620"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af8ca6be495176797b7da3857e2f794f9" id="r_af8ca6be495176797b7da3857e2f794f9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af8ca6be495176797b7da3857e2f794f9">neorv32_onewire_reset_blocking</a> (void)</td></tr> +<tr class="separator:af8ca6be495176797b7da3857e2f794f9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ace8b7cf697b068b6b51676d84dec5960" id="r_ace8b7cf697b068b6b51676d84dec5960"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ace8b7cf697b068b6b51676d84dec5960">neorv32_onewire_read_bit_blocking</a> (void)</td></tr> +<tr class="separator:ace8b7cf697b068b6b51676d84dec5960"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6f7b6690a2437e0b574a8a9a23dc0eaa" id="r_a6f7b6690a2437e0b574a8a9a23dc0eaa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6f7b6690a2437e0b574a8a9a23dc0eaa">neorv32_onewire_write_bit_blocking</a> (uint8_t bit)</td></tr> +<tr class="separator:a6f7b6690a2437e0b574a8a9a23dc0eaa"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7510e65a26aeefb40e994fd00667537e" id="r_a7510e65a26aeefb40e994fd00667537e"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7510e65a26aeefb40e994fd00667537e">neorv32_onewire_read_byte_blocking</a> (void)</td></tr> +<tr class="separator:a7510e65a26aeefb40e994fd00667537e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac78557c77482b59394677f42fda4fdf1" id="r_ac78557c77482b59394677f42fda4fdf1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac78557c77482b59394677f42fda4fdf1">neorv32_onewire_write_byte_blocking</a> (uint8_t byte)</td></tr> +<tr class="separator:ac78557c77482b59394677f42fda4fdf1"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>1-Wire Interface Controller (ONEWIRE) HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the ONEWIRE unit was synthesized (IO_ONEWIRE_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a865e5c381fd3c27c6981a589a5124d1e" name="a865e5c381fd3c27c6981a589a5124d1e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a865e5c381fd3c27c6981a589a5124d1e">&#9670;&#160;</a></span>neorv32_onewire_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if ONEWIRE controller was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if ONEWIRE was not synthesized, 1 if ONEWIRE is available. </dd></dl> + +</div> +</div> +<a id="a01b6236b89c045ddbd58398361c6ee0a" name="a01b6236b89c045ddbd58398361c6ee0a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a01b6236b89c045ddbd58398361c6ee0a">&#9670;&#160;</a></span>neorv32_onewire_busy()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_busy </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if ONEWIRE module is busy.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if not busy, 1 if busy. </dd></dl> + +</div> +</div> +<a id="a7e329eeb1cd98301a53b271a6a102385" name="a7e329eeb1cd98301a53b271a6a102385"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7e329eeb1cd98301a53b271a6a102385">&#9670;&#160;</a></span>neorv32_onewire_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable ONEWIRE controller. </p> + +</div> +</div> +<a id="ae6fe766e7decf18869cfb86bba741ca4" name="ae6fe766e7decf18869cfb86bba741ca4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae6fe766e7decf18869cfb86bba741ca4">&#9670;&#160;</a></span>neorv32_onewire_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable ONEWIRE controller. </p> + +</div> +</div> +<a id="a05e220711255e82460bc92010199eb53" name="a05e220711255e82460bc92010199eb53"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a05e220711255e82460bc92010199eb53">&#9670;&#160;</a></span>neorv32_onewire_flush()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_flush </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear RTX FIFO. </p> + +</div> +</div> +<a id="a32128bfcea4d8c8e31b0b59498e59798" name="a32128bfcea4d8c8e31b0b59498e59798"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a32128bfcea4d8c8e31b0b59498e59798">&#9670;&#160;</a></span>neorv32_onewire_get_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_get_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get ONEWIRE FIFO depth.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries), zero if no FIFO implemented </dd></dl> + +</div> +</div> +<a id="aace8398062b759256a516e6245aced83" name="aace8398062b759256a516e6245aced83"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aace8398062b759256a516e6245aced83">&#9670;&#160;</a></span>neorv32_onewire_read_bit()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_read_bit </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initiate single-bit read.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking. </dd></dl> + +</div> +</div> +<a id="ace8b7cf697b068b6b51676d84dec5960" name="ace8b7cf697b068b6b51676d84dec5960"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ace8b7cf697b068b6b51676d84dec5960">&#9670;&#160;</a></span>neorv32_onewire_read_bit_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_onewire_read_bit_blocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Read single bit.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is blocking!</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Read bit in bit 0. </dd></dl> + +</div> +</div> +<a id="aa4a19d2d8dc3b3401307615aec201190" name="aa4a19d2d8dc3b3401307615aec201190"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa4a19d2d8dc3b3401307615aec201190">&#9670;&#160;</a></span>neorv32_onewire_read_bit_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_onewire_read_bit_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get bit from previous single-bit read operation</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Read bit in bit 0. </dd></dl> + +</div> +</div> +<a id="a01ddba7a9148be542b5c52e39e6f46d6" name="a01ddba7a9148be542b5c52e39e6f46d6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a01ddba7a9148be542b5c52e39e6f46d6">&#9670;&#160;</a></span>neorv32_onewire_read_byte()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_read_byte </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initiate read byte.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking. </dd></dl> + +</div> +</div> +<a id="a7510e65a26aeefb40e994fd00667537e" name="a7510e65a26aeefb40e994fd00667537e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7510e65a26aeefb40e994fd00667537e">&#9670;&#160;</a></span>neorv32_onewire_read_byte_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_onewire_read_byte_blocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Read byte.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is blocking!</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Read byte. </dd></dl> + +</div> +</div> +<a id="a4c7eec15c095c97c939163f631f51dab" name="a4c7eec15c095c97c939163f631f51dab"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4c7eec15c095c97c939163f631f51dab">&#9670;&#160;</a></span>neorv32_onewire_read_byte_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_onewire_read_byte_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get data from previous read byte operation.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Read byte. </dd></dl> + +</div> +</div> +<a id="a3072f7167831edc95dee44ecfef6a0d4" name="a3072f7167831edc95dee44ecfef6a0d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3072f7167831edc95dee44ecfef6a0d4">&#9670;&#160;</a></span>neorv32_onewire_reset()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_reset </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initiate reset pulse.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking. </dd></dl> + +</div> +</div> +<a id="af8ca6be495176797b7da3857e2f794f9" name="af8ca6be495176797b7da3857e2f794f9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af8ca6be495176797b7da3857e2f794f9">&#9670;&#160;</a></span>neorv32_onewire_reset_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_reset_blocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Generate reset pulse and check if any bus device is present.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is blocking!</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if at lest one device is present, -1 otherwise </dd></dl> + +</div> +</div> +<a id="a43eb8a08eeaa83e3d7e9aa5058a4269f" name="a43eb8a08eeaa83e3d7e9aa5058a4269f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a43eb8a08eeaa83e3d7e9aa5058a4269f">&#9670;&#160;</a></span>neorv32_onewire_reset_get_presence()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_reset_get_presence </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get bus presence (after RESET).</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if at lest one device is present, -1 otherwise </dd></dl> + +</div> +</div> +<a id="a122531c7154126858c46d89e003d838d" name="a122531c7154126858c46d89e003d838d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a122531c7154126858c46d89e003d838d">&#9670;&#160;</a></span>neorv32_onewire_sense()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_sense </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current bus state.</p> +<dl class="section return"><dt>Returns</dt><dd>1 if bus is high, 0 if bus is low. </dd></dl> + +</div> +</div> +<a id="a224005037387484dfa510a1355a62828" name="a224005037387484dfa510a1355a62828"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a224005037387484dfa510a1355a62828">&#9670;&#160;</a></span>neorv32_onewire_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_setup </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>t_base</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset, configure and enable ONEWIRE interface controller.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">t_base</td><td>Base tick time in ns. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if configuration failed, otherwise the actual t_base time in ns is returned. </dd></dl> + +</div> +</div> +<a id="a49d0a2a386f129fd2f4fed880bba31d4" name="a49d0a2a386f129fd2f4fed880bba31d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a49d0a2a386f129fd2f4fed880bba31d4">&#9670;&#160;</a></span>neorv32_onewire_write_bit()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_write_bit </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>bit</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initiate single-bit write.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">bit</td><td>Bit to be send. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a6f7b6690a2437e0b574a8a9a23dc0eaa" name="a6f7b6690a2437e0b574a8a9a23dc0eaa"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6f7b6690a2437e0b574a8a9a23dc0eaa">&#9670;&#160;</a></span>neorv32_onewire_write_bit_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_write_bit_blocking </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>bit</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Write single bit.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is blocking!</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">bit</td><td>Bit to be send. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a23b96b68c3214b188525eb102cafb620" name="a23b96b68c3214b188525eb102cafb620"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a23b96b68c3214b188525eb102cafb620">&#9670;&#160;</a></span>neorv32_onewire_write_byte()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_write_byte </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>byte</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initiate write byte.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">byte</td><td>Byte to be send. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac78557c77482b59394677f42fda4fdf1" name="ac78557c77482b59394677f42fda4fdf1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac78557c77482b59394677f42fda4fdf1">&#9670;&#160;</a></span>neorv32_onewire_write_byte_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_write_byte_blocking </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>byte</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Write byte.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is blocking!</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">byte</td><td>Byte to be send. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__onewire_8h.html b/sw/neorv32__onewire_8h.html new file mode 100644 index 0000000000..e432036398 --- /dev/null +++ b/sw/neorv32__onewire_8h.html @@ -0,0 +1,733 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_onewire.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_onewire.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>1-Wire Interface Controller (ONEWIRE) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__onewire_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__onewire__t.html">neorv32_onewire_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">ONEWIRE DCMD commands</div></td></tr> +<tr class="memitem:ac6e4becce95856b4138b0017159c88eb" id="r_ac6e4becce95856b4138b0017159c88eb"><td class="memItemLeft" align="right" valign="top"><a id="ac6e4becce95856b4138b0017159c88eb" name="ac6e4becce95856b4138b0017159c88eb"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>ONEWIRE_CMD_NOP</b>&#160;&#160;&#160;(0b00)</td></tr> +<tr class="separator:ac6e4becce95856b4138b0017159c88eb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a07a46d4282a695a977255a5311c2600e" id="r_a07a46d4282a695a977255a5311c2600e"><td class="memItemLeft" align="right" valign="top"><a id="a07a46d4282a695a977255a5311c2600e" name="a07a46d4282a695a977255a5311c2600e"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>ONEWIRE_CMD_BIT</b>&#160;&#160;&#160;(0b01)</td></tr> +<tr class="separator:a07a46d4282a695a977255a5311c2600e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa16adb3dba0ef01a2af447871bcaf62e" id="r_aa16adb3dba0ef01a2af447871bcaf62e"><td class="memItemLeft" align="right" valign="top"><a id="aa16adb3dba0ef01a2af447871bcaf62e" name="aa16adb3dba0ef01a2af447871bcaf62e"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>ONEWIRE_CMD_BYTE</b>&#160;&#160;&#160;(0b10)</td></tr> +<tr class="separator:aa16adb3dba0ef01a2af447871bcaf62e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a82f804be8b05b1f44564efc0cb41d9fe" id="r_a82f804be8b05b1f44564efc0cb41d9fe"><td class="memItemLeft" align="right" valign="top"><a id="a82f804be8b05b1f44564efc0cb41d9fe" name="a82f804be8b05b1f44564efc0cb41d9fe"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>ONEWIRE_CMD_RESET</b>&#160;&#160;&#160;(0b11)</td></tr> +<tr class="separator:a82f804be8b05b1f44564efc0cb41d9fe"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:a865e5c381fd3c27c6981a589a5124d1e" id="r_a865e5c381fd3c27c6981a589a5124d1e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a865e5c381fd3c27c6981a589a5124d1e">neorv32_onewire_available</a> (void)</td></tr> +<tr class="separator:a865e5c381fd3c27c6981a589a5124d1e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a32128bfcea4d8c8e31b0b59498e59798" id="r_a32128bfcea4d8c8e31b0b59498e59798"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a32128bfcea4d8c8e31b0b59498e59798">neorv32_onewire_get_fifo_depth</a> (void)</td></tr> +<tr class="separator:a32128bfcea4d8c8e31b0b59498e59798"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a224005037387484dfa510a1355a62828" id="r_a224005037387484dfa510a1355a62828"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a224005037387484dfa510a1355a62828">neorv32_onewire_setup</a> (uint32_t t_base)</td></tr> +<tr class="separator:a224005037387484dfa510a1355a62828"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae6fe766e7decf18869cfb86bba741ca4" id="r_ae6fe766e7decf18869cfb86bba741ca4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae6fe766e7decf18869cfb86bba741ca4">neorv32_onewire_enable</a> (void)</td></tr> +<tr class="separator:ae6fe766e7decf18869cfb86bba741ca4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7e329eeb1cd98301a53b271a6a102385" id="r_a7e329eeb1cd98301a53b271a6a102385"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7e329eeb1cd98301a53b271a6a102385">neorv32_onewire_disable</a> (void)</td></tr> +<tr class="separator:a7e329eeb1cd98301a53b271a6a102385"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a05e220711255e82460bc92010199eb53" id="r_a05e220711255e82460bc92010199eb53"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a05e220711255e82460bc92010199eb53">neorv32_onewire_flush</a> (void)</td></tr> +<tr class="separator:a05e220711255e82460bc92010199eb53"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a122531c7154126858c46d89e003d838d" id="r_a122531c7154126858c46d89e003d838d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a122531c7154126858c46d89e003d838d">neorv32_onewire_sense</a> (void)</td></tr> +<tr class="separator:a122531c7154126858c46d89e003d838d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a01b6236b89c045ddbd58398361c6ee0a" id="r_a01b6236b89c045ddbd58398361c6ee0a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a01b6236b89c045ddbd58398361c6ee0a">neorv32_onewire_busy</a> (void)</td></tr> +<tr class="separator:a01b6236b89c045ddbd58398361c6ee0a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3072f7167831edc95dee44ecfef6a0d4" id="r_a3072f7167831edc95dee44ecfef6a0d4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3072f7167831edc95dee44ecfef6a0d4">neorv32_onewire_reset</a> (void)</td></tr> +<tr class="separator:a3072f7167831edc95dee44ecfef6a0d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a43eb8a08eeaa83e3d7e9aa5058a4269f" id="r_a43eb8a08eeaa83e3d7e9aa5058a4269f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a43eb8a08eeaa83e3d7e9aa5058a4269f">neorv32_onewire_reset_get_presence</a> (void)</td></tr> +<tr class="separator:a43eb8a08eeaa83e3d7e9aa5058a4269f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aace8398062b759256a516e6245aced83" id="r_aace8398062b759256a516e6245aced83"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aace8398062b759256a516e6245aced83">neorv32_onewire_read_bit</a> (void)</td></tr> +<tr class="separator:aace8398062b759256a516e6245aced83"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa4a19d2d8dc3b3401307615aec201190" id="r_aa4a19d2d8dc3b3401307615aec201190"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa4a19d2d8dc3b3401307615aec201190">neorv32_onewire_read_bit_get</a> (void)</td></tr> +<tr class="separator:aa4a19d2d8dc3b3401307615aec201190"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a49d0a2a386f129fd2f4fed880bba31d4" id="r_a49d0a2a386f129fd2f4fed880bba31d4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a49d0a2a386f129fd2f4fed880bba31d4">neorv32_onewire_write_bit</a> (uint8_t bit)</td></tr> +<tr class="separator:a49d0a2a386f129fd2f4fed880bba31d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a01ddba7a9148be542b5c52e39e6f46d6" id="r_a01ddba7a9148be542b5c52e39e6f46d6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a01ddba7a9148be542b5c52e39e6f46d6">neorv32_onewire_read_byte</a> (void)</td></tr> +<tr class="separator:a01ddba7a9148be542b5c52e39e6f46d6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4c7eec15c095c97c939163f631f51dab" id="r_a4c7eec15c095c97c939163f631f51dab"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4c7eec15c095c97c939163f631f51dab">neorv32_onewire_read_byte_get</a> (void)</td></tr> +<tr class="separator:a4c7eec15c095c97c939163f631f51dab"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a23b96b68c3214b188525eb102cafb620" id="r_a23b96b68c3214b188525eb102cafb620"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a23b96b68c3214b188525eb102cafb620">neorv32_onewire_write_byte</a> (uint8_t byte)</td></tr> +<tr class="separator:a23b96b68c3214b188525eb102cafb620"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af8ca6be495176797b7da3857e2f794f9" id="r_af8ca6be495176797b7da3857e2f794f9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af8ca6be495176797b7da3857e2f794f9">neorv32_onewire_reset_blocking</a> (void)</td></tr> +<tr class="separator:af8ca6be495176797b7da3857e2f794f9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ace8b7cf697b068b6b51676d84dec5960" id="r_ace8b7cf697b068b6b51676d84dec5960"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ace8b7cf697b068b6b51676d84dec5960">neorv32_onewire_read_bit_blocking</a> (void)</td></tr> +<tr class="separator:ace8b7cf697b068b6b51676d84dec5960"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6f7b6690a2437e0b574a8a9a23dc0eaa" id="r_a6f7b6690a2437e0b574a8a9a23dc0eaa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6f7b6690a2437e0b574a8a9a23dc0eaa">neorv32_onewire_write_bit_blocking</a> (uint8_t bit)</td></tr> +<tr class="separator:a6f7b6690a2437e0b574a8a9a23dc0eaa"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7510e65a26aeefb40e994fd00667537e" id="r_a7510e65a26aeefb40e994fd00667537e"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7510e65a26aeefb40e994fd00667537e">neorv32_onewire_read_byte_blocking</a> (void)</td></tr> +<tr class="separator:a7510e65a26aeefb40e994fd00667537e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac78557c77482b59394677f42fda4fdf1" id="r_ac78557c77482b59394677f42fda4fdf1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac78557c77482b59394677f42fda4fdf1">neorv32_onewire_write_byte_blocking</a> (uint8_t byte)</td></tr> +<tr class="separator:ac78557c77482b59394677f42fda4fdf1"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: 1-Wire Interface Controller (ONEWIRE)</h2></td></tr> +<tr class="memitem:a6f119e35d7ac01f110987508ff3becc9" id="r_a6f119e35d7ac01f110987508ff3becc9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6f119e35d7ac01f110987508ff3becc9">NEORV32_ONEWIRE</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__onewire__t.html">neorv32_onewire_t</a>*) (<a class="el" href="neorv32_8h.html#a8d0b612e52b77395a05d4f18af6fcf00">NEORV32_ONEWIRE_BASE</a>))</td></tr> +<tr class="separator:a6f119e35d7ac01f110987508ff3becc9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ade1a01f533843880868ec7496d116831" id="r_ade1a01f533843880868ec7496d116831"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ade1a01f533843880868ec7496d116831">NEORV32_ONEWIRE_CTRL_enum</a> { <br /> +&#160;&#160;<a class="el" href="#ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da">ONEWIRE_CTRL_EN</a> = 0 +, <a class="el" href="#ade1a01f533843880868ec7496d116831adfe5373712e0c02da3aa5dfd8ca5e51e">ONEWIRE_CTRL_CLEAR</a> = 1 +, <a class="el" href="#ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393">ONEWIRE_CTRL_PRSC0</a> = 2 +, <a class="el" href="#ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74">ONEWIRE_CTRL_PRSC1</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5">ONEWIRE_CTRL_CLKDIV0</a> = 4 +, <a class="el" href="#ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40">ONEWIRE_CTRL_CLKDIV7</a> = 11 +, <a class="el" href="#ade1a01f533843880868ec7496d116831a3903370331c6ae15cd37381bc64b6016">ONEWIRE_CTRL_FIFO_LSB</a> = 15 +, <a class="el" href="#ade1a01f533843880868ec7496d116831a101cd15b58450d9740ab92bb5c40ba63">ONEWIRE_CTRL_FIFO_MSB</a> = 18 +, <br /> +&#160;&#160;<a class="el" href="#ade1a01f533843880868ec7496d116831a5db9e3557d447c62039ad3437caa9884">ONEWIRE_CTRL_TX_FULL</a> = 28 +, <a class="el" href="#ade1a01f533843880868ec7496d116831a74d1259bee8e3e1d18cc69a2d8ce4749">ONEWIRE_CTRL_RX_AVAIL</a> = 29 +, <a class="el" href="#ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6">ONEWIRE_CTRL_SENSE</a> = 30 +, <a class="el" href="#ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9">ONEWIRE_CTRL_BUSY</a> = 31 +<br /> + }</td></tr> +<tr class="separator:ade1a01f533843880868ec7496d116831"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac3323eb579bade663856055d7aa04e26" id="r_ac3323eb579bade663856055d7aa04e26"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac3323eb579bade663856055d7aa04e26">NEORV32_ONEWIRE_DCMD_enum</a> { <br /> +&#160;&#160;<a class="el" href="#ac3323eb579bade663856055d7aa04e26a035b3e4021a1959a7cbd8954e838c324">ONEWIRE_DCMD_DATA_LSB</a> = 0 +, <a class="el" href="#ac3323eb579bade663856055d7aa04e26a36fe4def67f02a3d06dbe47231d6f21d">ONEWIRE_DCMD_DATA_MSB</a> = 7 +, <a class="el" href="#ac3323eb579bade663856055d7aa04e26ac095ac82ef2be6e67b5c9f6b9f5c4379">ONEWIRE_DCMD_CMD_LO</a> = 8 +, <a class="el" href="#ac3323eb579bade663856055d7aa04e26aeb1f95a9b6f3b4a295578e874a1ad5d0">ONEWIRE_DCMD_CMD_HI</a> = 9 +, <br /> +&#160;&#160;<a class="el" href="#ac3323eb579bade663856055d7aa04e26aa4cd11972bbc09f7a7eab8e129b280b4">ONEWIRE_DCMD_PRESENCE</a> = 10 +<br /> + }</td></tr> +<tr class="separator:ac3323eb579bade663856055d7aa04e26"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>1-Wire Interface Controller (ONEWIRE) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the ONEWIRE unit was synthesized (IO_ONEWIRE_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a6f119e35d7ac01f110987508ff3becc9" name="a6f119e35d7ac01f110987508ff3becc9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6f119e35d7ac01f110987508ff3becc9">&#9670;&#160;</a></span>NEORV32_ONEWIRE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_ONEWIRE&#160;&#160;&#160;((<a class="el" href="structneorv32__onewire__t.html">neorv32_onewire_t</a>*) (<a class="el" href="neorv32_8h.html#a8d0b612e52b77395a05d4f18af6fcf00">NEORV32_ONEWIRE_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>ONEWIRE module hardware access (<a class="el" href="structneorv32__onewire__t.html">neorv32_onewire_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="ade1a01f533843880868ec7496d116831" name="ade1a01f533843880868ec7496d116831"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ade1a01f533843880868ec7496d116831">&#9670;&#160;</a></span>NEORV32_ONEWIRE_CTRL_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#ade1a01f533843880868ec7496d116831">NEORV32_ONEWIRE_CTRL_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>ONEWIRE control register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da" name="ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da"></a>ONEWIRE_CTRL_EN&#160;</td><td class="fielddoc"><p>ONEWIRE control register(0) (r/w): ONEWIRE controller enable </p> +</td></tr> +<tr><td class="fieldname"><a id="ade1a01f533843880868ec7496d116831adfe5373712e0c02da3aa5dfd8ca5e51e" name="ade1a01f533843880868ec7496d116831adfe5373712e0c02da3aa5dfd8ca5e51e"></a>ONEWIRE_CTRL_CLEAR&#160;</td><td class="fielddoc"><p>ONEWIRE control register(1) (-/w): Clear RXT FIFO, auto-clears </p> +</td></tr> +<tr><td class="fieldname"><a id="ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393" name="ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393"></a>ONEWIRE_CTRL_PRSC0&#160;</td><td class="fielddoc"><p>ONEWIRE control register(2) (r/w): Clock prescaler select bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74" name="ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74"></a>ONEWIRE_CTRL_PRSC1&#160;</td><td class="fielddoc"><p>ONEWIRE control register(3) (r/w): Clock prescaler select bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5" name="ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5"></a>ONEWIRE_CTRL_CLKDIV0&#160;</td><td class="fielddoc"><p>ONEWIRE control register(4) (r/w): Clock divider bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40" name="ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40"></a>ONEWIRE_CTRL_CLKDIV7&#160;</td><td class="fielddoc"><p>ONEWIRE control register(11) (r/w): Clock divider bit 7 </p> +</td></tr> +<tr><td class="fieldname"><a id="ade1a01f533843880868ec7496d116831a3903370331c6ae15cd37381bc64b6016" name="ade1a01f533843880868ec7496d116831a3903370331c6ae15cd37381bc64b6016"></a>ONEWIRE_CTRL_FIFO_LSB&#160;</td><td class="fielddoc"><p>ONEWIRE control register(15) (r/-): log2(FIFO size), LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="ade1a01f533843880868ec7496d116831a101cd15b58450d9740ab92bb5c40ba63" name="ade1a01f533843880868ec7496d116831a101cd15b58450d9740ab92bb5c40ba63"></a>ONEWIRE_CTRL_FIFO_MSB&#160;</td><td class="fielddoc"><p>ONEWIRE control register(18) (r/-): log2(FIFO size), MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="ade1a01f533843880868ec7496d116831a5db9e3557d447c62039ad3437caa9884" name="ade1a01f533843880868ec7496d116831a5db9e3557d447c62039ad3437caa9884"></a>ONEWIRE_CTRL_TX_FULL&#160;</td><td class="fielddoc"><p>ONEWIRE control register(28) (r/-): TX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="ade1a01f533843880868ec7496d116831a74d1259bee8e3e1d18cc69a2d8ce4749" name="ade1a01f533843880868ec7496d116831a74d1259bee8e3e1d18cc69a2d8ce4749"></a>ONEWIRE_CTRL_RX_AVAIL&#160;</td><td class="fielddoc"><p>ONEWIRE control register(29) (r/-): RX FIFO data available </p> +</td></tr> +<tr><td class="fieldname"><a id="ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6" name="ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6"></a>ONEWIRE_CTRL_SENSE&#160;</td><td class="fielddoc"><p>ONEWIRE control register(30) (r/-): Current state of the bus line </p> +</td></tr> +<tr><td class="fieldname"><a id="ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9" name="ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9"></a>ONEWIRE_CTRL_BUSY&#160;</td><td class="fielddoc"><p>ONEWIRE control register(31) (r/-): Operation in progress when set </p> +</td></tr> +</table> + +</div> +</div> +<a id="ac3323eb579bade663856055d7aa04e26" name="ac3323eb579bade663856055d7aa04e26"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac3323eb579bade663856055d7aa04e26">&#9670;&#160;</a></span>NEORV32_ONEWIRE_DCMD_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#ac3323eb579bade663856055d7aa04e26">NEORV32_ONEWIRE_DCMD_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>ONEWIRE command and data register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ac3323eb579bade663856055d7aa04e26a035b3e4021a1959a7cbd8954e838c324" name="ac3323eb579bade663856055d7aa04e26a035b3e4021a1959a7cbd8954e838c324"></a>ONEWIRE_DCMD_DATA_LSB&#160;</td><td class="fielddoc"><p>ONEWIRE data/data register(0) (r/w): Receive/transmit data (8-bit) LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="ac3323eb579bade663856055d7aa04e26a36fe4def67f02a3d06dbe47231d6f21d" name="ac3323eb579bade663856055d7aa04e26a36fe4def67f02a3d06dbe47231d6f21d"></a>ONEWIRE_DCMD_DATA_MSB&#160;</td><td class="fielddoc"><p>ONEWIRE data/data register(7) (r/w): Receive/transmit data (8-bit) MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="ac3323eb579bade663856055d7aa04e26ac095ac82ef2be6e67b5c9f6b9f5c4379" name="ac3323eb579bade663856055d7aa04e26ac095ac82ef2be6e67b5c9f6b9f5c4379"></a>ONEWIRE_DCMD_CMD_LO&#160;</td><td class="fielddoc"><p>ONEWIRE data/data register(8) (-/w): Operation command LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="ac3323eb579bade663856055d7aa04e26aeb1f95a9b6f3b4a295578e874a1ad5d0" name="ac3323eb579bade663856055d7aa04e26aeb1f95a9b6f3b4a295578e874a1ad5d0"></a>ONEWIRE_DCMD_CMD_HI&#160;</td><td class="fielddoc"><p>ONEWIRE data/data register(9) (-/w): Operation command MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="ac3323eb579bade663856055d7aa04e26aa4cd11972bbc09f7a7eab8e129b280b4" name="ac3323eb579bade663856055d7aa04e26aa4cd11972bbc09f7a7eab8e129b280b4"></a>ONEWIRE_DCMD_PRESENCE&#160;</td><td class="fielddoc"><p>ONEWIRE data/data register(10) (r/-): Bus presence detected </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a865e5c381fd3c27c6981a589a5124d1e" name="a865e5c381fd3c27c6981a589a5124d1e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a865e5c381fd3c27c6981a589a5124d1e">&#9670;&#160;</a></span>neorv32_onewire_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if ONEWIRE controller was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if ONEWIRE was not synthesized, 1 if ONEWIRE is available. </dd></dl> + +</div> +</div> +<a id="a01b6236b89c045ddbd58398361c6ee0a" name="a01b6236b89c045ddbd58398361c6ee0a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a01b6236b89c045ddbd58398361c6ee0a">&#9670;&#160;</a></span>neorv32_onewire_busy()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_busy </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if ONEWIRE module is busy.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if not busy, 1 if busy. </dd></dl> + +</div> +</div> +<a id="a7e329eeb1cd98301a53b271a6a102385" name="a7e329eeb1cd98301a53b271a6a102385"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7e329eeb1cd98301a53b271a6a102385">&#9670;&#160;</a></span>neorv32_onewire_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable ONEWIRE controller. </p> + +</div> +</div> +<a id="ae6fe766e7decf18869cfb86bba741ca4" name="ae6fe766e7decf18869cfb86bba741ca4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae6fe766e7decf18869cfb86bba741ca4">&#9670;&#160;</a></span>neorv32_onewire_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable ONEWIRE controller. </p> + +</div> +</div> +<a id="a05e220711255e82460bc92010199eb53" name="a05e220711255e82460bc92010199eb53"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a05e220711255e82460bc92010199eb53">&#9670;&#160;</a></span>neorv32_onewire_flush()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_flush </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear RTX FIFO. </p> + +</div> +</div> +<a id="a32128bfcea4d8c8e31b0b59498e59798" name="a32128bfcea4d8c8e31b0b59498e59798"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a32128bfcea4d8c8e31b0b59498e59798">&#9670;&#160;</a></span>neorv32_onewire_get_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_get_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get ONEWIRE FIFO depth.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries), zero if no FIFO implemented </dd></dl> + +</div> +</div> +<a id="aace8398062b759256a516e6245aced83" name="aace8398062b759256a516e6245aced83"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aace8398062b759256a516e6245aced83">&#9670;&#160;</a></span>neorv32_onewire_read_bit()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_read_bit </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initiate single-bit read.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking. </dd></dl> + +</div> +</div> +<a id="ace8b7cf697b068b6b51676d84dec5960" name="ace8b7cf697b068b6b51676d84dec5960"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ace8b7cf697b068b6b51676d84dec5960">&#9670;&#160;</a></span>neorv32_onewire_read_bit_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_onewire_read_bit_blocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Read single bit.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is blocking!</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Read bit in bit 0. </dd></dl> + +</div> +</div> +<a id="aa4a19d2d8dc3b3401307615aec201190" name="aa4a19d2d8dc3b3401307615aec201190"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa4a19d2d8dc3b3401307615aec201190">&#9670;&#160;</a></span>neorv32_onewire_read_bit_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_onewire_read_bit_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get bit from previous single-bit read operation</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Read bit in bit 0. </dd></dl> + +</div> +</div> +<a id="a01ddba7a9148be542b5c52e39e6f46d6" name="a01ddba7a9148be542b5c52e39e6f46d6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a01ddba7a9148be542b5c52e39e6f46d6">&#9670;&#160;</a></span>neorv32_onewire_read_byte()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_read_byte </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initiate read byte.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking. </dd></dl> + +</div> +</div> +<a id="a7510e65a26aeefb40e994fd00667537e" name="a7510e65a26aeefb40e994fd00667537e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7510e65a26aeefb40e994fd00667537e">&#9670;&#160;</a></span>neorv32_onewire_read_byte_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_onewire_read_byte_blocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Read byte.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is blocking!</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Read byte. </dd></dl> + +</div> +</div> +<a id="a4c7eec15c095c97c939163f631f51dab" name="a4c7eec15c095c97c939163f631f51dab"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4c7eec15c095c97c939163f631f51dab">&#9670;&#160;</a></span>neorv32_onewire_read_byte_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_onewire_read_byte_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get data from previous read byte operation.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Read byte. </dd></dl> + +</div> +</div> +<a id="a3072f7167831edc95dee44ecfef6a0d4" name="a3072f7167831edc95dee44ecfef6a0d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3072f7167831edc95dee44ecfef6a0d4">&#9670;&#160;</a></span>neorv32_onewire_reset()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_reset </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initiate reset pulse.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking. </dd></dl> + +</div> +</div> +<a id="af8ca6be495176797b7da3857e2f794f9" name="af8ca6be495176797b7da3857e2f794f9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af8ca6be495176797b7da3857e2f794f9">&#9670;&#160;</a></span>neorv32_onewire_reset_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_reset_blocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Generate reset pulse and check if any bus device is present.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is blocking!</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if at lest one device is present, -1 otherwise </dd></dl> + +</div> +</div> +<a id="a43eb8a08eeaa83e3d7e9aa5058a4269f" name="a43eb8a08eeaa83e3d7e9aa5058a4269f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a43eb8a08eeaa83e3d7e9aa5058a4269f">&#9670;&#160;</a></span>neorv32_onewire_reset_get_presence()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_reset_get_presence </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get bus presence (after RESET).</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if at lest one device is present, -1 otherwise </dd></dl> + +</div> +</div> +<a id="a122531c7154126858c46d89e003d838d" name="a122531c7154126858c46d89e003d838d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a122531c7154126858c46d89e003d838d">&#9670;&#160;</a></span>neorv32_onewire_sense()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_sense </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current bus state.</p> +<dl class="section return"><dt>Returns</dt><dd>1 if bus is high, 0 if bus is low. </dd></dl> + +</div> +</div> +<a id="a224005037387484dfa510a1355a62828" name="a224005037387484dfa510a1355a62828"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a224005037387484dfa510a1355a62828">&#9670;&#160;</a></span>neorv32_onewire_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_onewire_setup </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>t_base</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset, configure and enable ONEWIRE interface controller.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">t_base</td><td>Base tick time in ns. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if configuration failed, otherwise the actual t_base time in ns is returned. </dd></dl> + +</div> +</div> +<a id="a49d0a2a386f129fd2f4fed880bba31d4" name="a49d0a2a386f129fd2f4fed880bba31d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a49d0a2a386f129fd2f4fed880bba31d4">&#9670;&#160;</a></span>neorv32_onewire_write_bit()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_write_bit </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>bit</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initiate single-bit write.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">bit</td><td>Bit to be send. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a6f7b6690a2437e0b574a8a9a23dc0eaa" name="a6f7b6690a2437e0b574a8a9a23dc0eaa"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6f7b6690a2437e0b574a8a9a23dc0eaa">&#9670;&#160;</a></span>neorv32_onewire_write_bit_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_write_bit_blocking </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>bit</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Write single bit.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is blocking!</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">bit</td><td>Bit to be send. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a23b96b68c3214b188525eb102cafb620" name="a23b96b68c3214b188525eb102cafb620"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a23b96b68c3214b188525eb102cafb620">&#9670;&#160;</a></span>neorv32_onewire_write_byte()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_write_byte </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>byte</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initiate write byte.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">byte</td><td>Byte to be send. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac78557c77482b59394677f42fda4fdf1" name="ac78557c77482b59394677f42fda4fdf1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac78557c77482b59394677f42fda4fdf1">&#9670;&#160;</a></span>neorv32_onewire_write_byte_blocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_onewire_write_byte_blocking </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>byte</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Write byte.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is blocking!</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">byte</td><td>Byte to be send. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__onewire_8h_source.html b/sw/neorv32__onewire_8h_source.html new file mode 100644 index 0000000000..ee31f87a38 --- /dev/null +++ b/sw/neorv32__onewire_8h_source.html @@ -0,0 +1,226 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_onewire.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_onewire.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__onewire_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_onewire_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_onewire_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__onewire__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__onewire__t.html#a310df3bab43e4438417b2ff948f4712a"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__onewire__t.html#a310df3bab43e4438417b2ff948f4712a">CTRL</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__onewire__t.html#ab8f4e61ac777c55cd1e5805eb03d3d4b"> 31</a></span> uint32_t <a class="code hl_variable" href="structneorv32__onewire__t.html#ab8f4e61ac777c55cd1e5805eb03d3d4b">DCMD</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>} <a class="code hl_struct" href="structneorv32__onewire__t.html">neorv32_onewire_t</a>;</div> +</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#a6f119e35d7ac01f110987508ff3becc9"> 35</a></span><span class="preprocessor">#define NEORV32_ONEWIRE ((neorv32_onewire_t*) (NEORV32_ONEWIRE_BASE))</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="foldopen" id="foldopen00038" data-start="{" data-end="};"> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831"> 38</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831">NEORV32_ONEWIRE_CTRL_enum</a> {</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da"> 39</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da">ONEWIRE_CTRL_EN</a> = 0, </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831adfe5373712e0c02da3aa5dfd8ca5e51e"> 40</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831adfe5373712e0c02da3aa5dfd8ca5e51e">ONEWIRE_CTRL_CLEAR</a> = 1, </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393">ONEWIRE_CTRL_PRSC0</a> = 2, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74">ONEWIRE_CTRL_PRSC1</a> = 3, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5">ONEWIRE_CTRL_CLKDIV0</a> = 4, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40"> 44</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40">ONEWIRE_CTRL_CLKDIV7</a> = 11, </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a3903370331c6ae15cd37381bc64b6016"> 46</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a3903370331c6ae15cd37381bc64b6016">ONEWIRE_CTRL_FIFO_LSB</a> = 15, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a101cd15b58450d9740ab92bb5c40ba63"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a101cd15b58450d9740ab92bb5c40ba63">ONEWIRE_CTRL_FIFO_MSB</a> = 18, </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a5db9e3557d447c62039ad3437caa9884"> 49</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a5db9e3557d447c62039ad3437caa9884">ONEWIRE_CTRL_TX_FULL</a> = 28, </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a74d1259bee8e3e1d18cc69a2d8ce4749"> 50</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a74d1259bee8e3e1d18cc69a2d8ce4749">ONEWIRE_CTRL_RX_AVAIL</a> = 29, </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6"> 51</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6">ONEWIRE_CTRL_SENSE</a> = 30, </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9"> 52</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9">ONEWIRE_CTRL_BUSY</a> = 31, </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span>};</div> +</div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div> +<div class="foldopen" id="foldopen00056" data-start="{" data-end="};"> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26"> 56</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26">NEORV32_ONEWIRE_DCMD_enum</a> {</div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a035b3e4021a1959a7cbd8954e838c324"> 57</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a035b3e4021a1959a7cbd8954e838c324">ONEWIRE_DCMD_DATA_LSB</a> = 0, </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a36fe4def67f02a3d06dbe47231d6f21d"> 58</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a36fe4def67f02a3d06dbe47231d6f21d">ONEWIRE_DCMD_DATA_MSB</a> = 7, </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26ac095ac82ef2be6e67b5c9f6b9f5c4379"> 59</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26ac095ac82ef2be6e67b5c9f6b9f5c4379">ONEWIRE_DCMD_CMD_LO</a> = 8, </div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aeb1f95a9b6f3b4a295578e874a1ad5d0"> 60</a></span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aeb1f95a9b6f3b4a295578e874a1ad5d0">ONEWIRE_DCMD_CMD_HI</a> = 9, </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <a class="code hl_enumvalue" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aa4cd11972bbc09f7a7eab8e129b280b4">ONEWIRE_DCMD_PRESENCE</a> = 10 </div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aa4cd11972bbc09f7a7eab8e129b280b4"> 62</a></span>};</div> +</div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="preprocessor">#define ONEWIRE_CMD_NOP (0b00) </span><span class="comment">// no operation</span></div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="preprocessor">#define ONEWIRE_CMD_BIT (0b01) </span><span class="comment">// read/write single bit</span></div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="preprocessor">#define ONEWIRE_CMD_BYTE (0b10) </span><span class="comment">// read/write full byte</span></div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="preprocessor">#define ONEWIRE_CMD_RESET (0b11) </span><span class="comment">// generate reset pulse and check for presence</span></div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment">/**********************************************************************/</span><span class="preprocessor"></span></div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__onewire_8h.html#a865e5c381fd3c27c6981a589a5124d1e">neorv32_onewire_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__onewire_8h.html#a32128bfcea4d8c8e31b0b59498e59798">neorv32_onewire_get_fifo_depth</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__onewire_8h.html#a224005037387484dfa510a1355a62828">neorv32_onewire_setup</a>(uint32_t t_base);</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__onewire_8h.html#ae6fe766e7decf18869cfb86bba741ca4">neorv32_onewire_enable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__onewire_8h.html#a7e329eeb1cd98301a53b271a6a102385">neorv32_onewire_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__onewire_8h.html#a05e220711255e82460bc92010199eb53">neorv32_onewire_flush</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__onewire_8h.html#a122531c7154126858c46d89e003d838d">neorv32_onewire_sense</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__onewire_8h.html#a01b6236b89c045ddbd58398361c6ee0a">neorv32_onewire_busy</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__onewire_8h.html#a3072f7167831edc95dee44ecfef6a0d4">neorv32_onewire_reset</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__onewire_8h.html#a43eb8a08eeaa83e3d7e9aa5058a4269f">neorv32_onewire_reset_get_presence</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__onewire_8h.html#aace8398062b759256a516e6245aced83">neorv32_onewire_read_bit</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span>uint8_t <a class="code hl_function" href="neorv32__onewire_8h.html#aa4a19d2d8dc3b3401307615aec201190">neorv32_onewire_read_bit_get</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__onewire_8h.html#a49d0a2a386f129fd2f4fed880bba31d4">neorv32_onewire_write_bit</a>(uint8_t bit);</div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__onewire_8h.html#a01ddba7a9148be542b5c52e39e6f46d6">neorv32_onewire_read_byte</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span>uint8_t <a class="code hl_function" href="neorv32__onewire_8h.html#a4c7eec15c095c97c939163f631f51dab">neorv32_onewire_read_byte_get</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__onewire_8h.html#a23b96b68c3214b188525eb102cafb620">neorv32_onewire_write_byte</a>(uint8_t <span class="keywordtype">byte</span>);</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__onewire_8h.html#af8ca6be495176797b7da3857e2f794f9">neorv32_onewire_reset_blocking</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span>uint8_t <a class="code hl_function" href="neorv32__onewire_8h.html#ace8b7cf697b068b6b51676d84dec5960">neorv32_onewire_read_bit_blocking</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__onewire_8h.html#a6f7b6690a2437e0b574a8a9a23dc0eaa">neorv32_onewire_write_bit_blocking</a>(uint8_t bit);</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span>uint8_t <a class="code hl_function" href="neorv32__onewire_8h.html#a7510e65a26aeefb40e994fd00667537e">neorv32_onewire_read_byte_blocking</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__onewire_8h.html#ac78557c77482b59394677f42fda4fdf1">neorv32_onewire_write_byte_blocking</a>(uint8_t <span class="keywordtype">byte</span>);</div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_onewire_h</span></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a01b6236b89c045ddbd58398361c6ee0a"><div class="ttname"><a href="neorv32__onewire_8h.html#a01b6236b89c045ddbd58398361c6ee0a">neorv32_onewire_busy</a></div><div class="ttdeci">int neorv32_onewire_busy(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:142</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a01ddba7a9148be542b5c52e39e6f46d6"><div class="ttname"><a href="neorv32__onewire_8h.html#a01ddba7a9148be542b5c52e39e6f46d6">neorv32_onewire_read_byte</a></div><div class="ttdeci">void neorv32_onewire_read_byte(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:245</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a05e220711255e82460bc92010199eb53"><div class="ttname"><a href="neorv32__onewire_8h.html#a05e220711255e82460bc92010199eb53">neorv32_onewire_flush</a></div><div class="ttdeci">void neorv32_onewire_flush(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:116</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a122531c7154126858c46d89e003d838d"><div class="ttname"><a href="neorv32__onewire_8h.html#a122531c7154126858c46d89e003d838d">neorv32_onewire_sense</a></div><div class="ttdeci">int neorv32_onewire_sense(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:127</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a224005037387484dfa510a1355a62828"><div class="ttname"><a href="neorv32__onewire_8h.html#a224005037387484dfa510a1355a62828">neorv32_onewire_setup</a></div><div class="ttdeci">int neorv32_onewire_setup(uint32_t t_base)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:55</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a23b96b68c3214b188525eb102cafb620"><div class="ttname"><a href="neorv32__onewire_8h.html#a23b96b68c3214b188525eb102cafb620">neorv32_onewire_write_byte</a></div><div class="ttdeci">void neorv32_onewire_write_byte(uint8_t byte)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:273</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a3072f7167831edc95dee44ecfef6a0d4"><div class="ttname"><a href="neorv32__onewire_8h.html#a3072f7167831edc95dee44ecfef6a0d4">neorv32_onewire_reset</a></div><div class="ttdeci">void neorv32_onewire_reset(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:164</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a32128bfcea4d8c8e31b0b59498e59798"><div class="ttname"><a href="neorv32__onewire_8h.html#a32128bfcea4d8c8e31b0b59498e59798">neorv32_onewire_get_fifo_depth</a></div><div class="ttdeci">int neorv32_onewire_get_fifo_depth(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:42</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a43eb8a08eeaa83e3d7e9aa5058a4269f"><div class="ttname"><a href="neorv32__onewire_8h.html#a43eb8a08eeaa83e3d7e9aa5058a4269f">neorv32_onewire_reset_get_presence</a></div><div class="ttdeci">int neorv32_onewire_reset_get_presence(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:178</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a49d0a2a386f129fd2f4fed880bba31d4"><div class="ttname"><a href="neorv32__onewire_8h.html#a49d0a2a386f129fd2f4fed880bba31d4">neorv32_onewire_write_bit</a></div><div class="ttdeci">void neorv32_onewire_write_bit(uint8_t bit)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:228</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a4c7eec15c095c97c939163f631f51dab"><div class="ttname"><a href="neorv32__onewire_8h.html#a4c7eec15c095c97c939163f631f51dab">neorv32_onewire_read_byte_get</a></div><div class="ttdeci">uint8_t neorv32_onewire_read_byte_get(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:259</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a6f7b6690a2437e0b574a8a9a23dc0eaa"><div class="ttname"><a href="neorv32__onewire_8h.html#a6f7b6690a2437e0b574a8a9a23dc0eaa">neorv32_onewire_write_bit_blocking</a></div><div class="ttdeci">void neorv32_onewire_write_bit_blocking(uint8_t bit)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:332</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a7510e65a26aeefb40e994fd00667537e"><div class="ttname"><a href="neorv32__onewire_8h.html#a7510e65a26aeefb40e994fd00667537e">neorv32_onewire_read_byte_blocking</a></div><div class="ttdeci">uint8_t neorv32_onewire_read_byte_blocking(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:352</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a7e329eeb1cd98301a53b271a6a102385"><div class="ttname"><a href="neorv32__onewire_8h.html#a7e329eeb1cd98301a53b271a6a102385">neorv32_onewire_disable</a></div><div class="ttdeci">void neorv32_onewire_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:107</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_a865e5c381fd3c27c6981a589a5124d1e"><div class="ttname"><a href="neorv32__onewire_8h.html#a865e5c381fd3c27c6981a589a5124d1e">neorv32_onewire_available</a></div><div class="ttdeci">int neorv32_onewire_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:26</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_aa4a19d2d8dc3b3401307615aec201190"><div class="ttname"><a href="neorv32__onewire_8h.html#aa4a19d2d8dc3b3401307615aec201190">neorv32_onewire_read_bit_get</a></div><div class="ttdeci">uint8_t neorv32_onewire_read_bit_get(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:209</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_aace8398062b759256a516e6245aced83"><div class="ttname"><a href="neorv32__onewire_8h.html#aace8398062b759256a516e6245aced83">neorv32_onewire_read_bit</a></div><div class="ttdeci">void neorv32_onewire_read_bit(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:195</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ac3323eb579bade663856055d7aa04e26"><div class="ttname"><a href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26">NEORV32_ONEWIRE_DCMD_enum</a></div><div class="ttdeci">NEORV32_ONEWIRE_DCMD_enum</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:56</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ac3323eb579bade663856055d7aa04e26a035b3e4021a1959a7cbd8954e838c324"><div class="ttname"><a href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a035b3e4021a1959a7cbd8954e838c324">ONEWIRE_DCMD_DATA_LSB</a></div><div class="ttdeci">@ ONEWIRE_DCMD_DATA_LSB</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:57</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ac3323eb579bade663856055d7aa04e26a36fe4def67f02a3d06dbe47231d6f21d"><div class="ttname"><a href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a36fe4def67f02a3d06dbe47231d6f21d">ONEWIRE_DCMD_DATA_MSB</a></div><div class="ttdeci">@ ONEWIRE_DCMD_DATA_MSB</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:58</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ac3323eb579bade663856055d7aa04e26aa4cd11972bbc09f7a7eab8e129b280b4"><div class="ttname"><a href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aa4cd11972bbc09f7a7eab8e129b280b4">ONEWIRE_DCMD_PRESENCE</a></div><div class="ttdeci">@ ONEWIRE_DCMD_PRESENCE</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:61</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ac3323eb579bade663856055d7aa04e26ac095ac82ef2be6e67b5c9f6b9f5c4379"><div class="ttname"><a href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26ac095ac82ef2be6e67b5c9f6b9f5c4379">ONEWIRE_DCMD_CMD_LO</a></div><div class="ttdeci">@ ONEWIRE_DCMD_CMD_LO</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:59</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ac3323eb579bade663856055d7aa04e26aeb1f95a9b6f3b4a295578e874a1ad5d0"><div class="ttname"><a href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aeb1f95a9b6f3b4a295578e874a1ad5d0">ONEWIRE_DCMD_CMD_HI</a></div><div class="ttdeci">@ ONEWIRE_DCMD_CMD_HI</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:60</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ac78557c77482b59394677f42fda4fdf1"><div class="ttname"><a href="neorv32__onewire_8h.html#ac78557c77482b59394677f42fda4fdf1">neorv32_onewire_write_byte_blocking</a></div><div class="ttdeci">void neorv32_onewire_write_byte_blocking(uint8_t byte)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:372</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ace8b7cf697b068b6b51676d84dec5960"><div class="ttname"><a href="neorv32__onewire_8h.html#ace8b7cf697b068b6b51676d84dec5960">neorv32_onewire_read_bit_blocking</a></div><div class="ttdeci">uint8_t neorv32_onewire_read_bit_blocking(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:312</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ade1a01f533843880868ec7496d116831"><div class="ttname"><a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831">NEORV32_ONEWIRE_CTRL_enum</a></div><div class="ttdeci">NEORV32_ONEWIRE_CTRL_enum</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:38</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ade1a01f533843880868ec7496d116831a101cd15b58450d9740ab92bb5c40ba63"><div class="ttname"><a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a101cd15b58450d9740ab92bb5c40ba63">ONEWIRE_CTRL_FIFO_MSB</a></div><div class="ttdeci">@ ONEWIRE_CTRL_FIFO_MSB</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:47</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ade1a01f533843880868ec7496d116831a3903370331c6ae15cd37381bc64b6016"><div class="ttname"><a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a3903370331c6ae15cd37381bc64b6016">ONEWIRE_CTRL_FIFO_LSB</a></div><div class="ttdeci">@ ONEWIRE_CTRL_FIFO_LSB</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:46</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ade1a01f533843880868ec7496d116831a5db9e3557d447c62039ad3437caa9884"><div class="ttname"><a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a5db9e3557d447c62039ad3437caa9884">ONEWIRE_CTRL_TX_FULL</a></div><div class="ttdeci">@ ONEWIRE_CTRL_TX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:49</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ade1a01f533843880868ec7496d116831a74d1259bee8e3e1d18cc69a2d8ce4749"><div class="ttname"><a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a74d1259bee8e3e1d18cc69a2d8ce4749">ONEWIRE_CTRL_RX_AVAIL</a></div><div class="ttdeci">@ ONEWIRE_CTRL_RX_AVAIL</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:50</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40"><div class="ttname"><a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40">ONEWIRE_CTRL_CLKDIV7</a></div><div class="ttdeci">@ ONEWIRE_CTRL_CLKDIV7</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:44</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9"><div class="ttname"><a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9">ONEWIRE_CTRL_BUSY</a></div><div class="ttdeci">@ ONEWIRE_CTRL_BUSY</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:52</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da"><div class="ttname"><a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da">ONEWIRE_CTRL_EN</a></div><div class="ttdeci">@ ONEWIRE_CTRL_EN</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:39</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393"><div class="ttname"><a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393">ONEWIRE_CTRL_PRSC0</a></div><div class="ttdeci">@ ONEWIRE_CTRL_PRSC0</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:41</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5"><div class="ttname"><a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5">ONEWIRE_CTRL_CLKDIV0</a></div><div class="ttdeci">@ ONEWIRE_CTRL_CLKDIV0</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:43</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ade1a01f533843880868ec7496d116831adfe5373712e0c02da3aa5dfd8ca5e51e"><div class="ttname"><a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831adfe5373712e0c02da3aa5dfd8ca5e51e">ONEWIRE_CTRL_CLEAR</a></div><div class="ttdeci">@ ONEWIRE_CTRL_CLEAR</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:40</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74"><div class="ttname"><a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74">ONEWIRE_CTRL_PRSC1</a></div><div class="ttdeci">@ ONEWIRE_CTRL_PRSC1</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:42</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6"><div class="ttname"><a href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6">ONEWIRE_CTRL_SENSE</a></div><div class="ttdeci">@ ONEWIRE_CTRL_SENSE</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:51</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_ae6fe766e7decf18869cfb86bba741ca4"><div class="ttname"><a href="neorv32__onewire_8h.html#ae6fe766e7decf18869cfb86bba741ca4">neorv32_onewire_enable</a></div><div class="ttdeci">void neorv32_onewire_enable(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:98</div></div> +<div class="ttc" id="aneorv32__onewire_8h_html_af8ca6be495176797b7da3857e2f794f9"><div class="ttname"><a href="neorv32__onewire_8h.html#af8ca6be495176797b7da3857e2f794f9">neorv32_onewire_reset_blocking</a></div><div class="ttdeci">int neorv32_onewire_reset_blocking(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:292</div></div> +<div class="ttc" id="astructneorv32__onewire__t_html"><div class="ttname"><a href="structneorv32__onewire__t.html">neorv32_onewire_t</a></div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:29</div></div> +<div class="ttc" id="astructneorv32__onewire__t_html_a310df3bab43e4438417b2ff948f4712a"><div class="ttname"><a href="structneorv32__onewire__t.html#a310df3bab43e4438417b2ff948f4712a">neorv32_onewire_t::CTRL</a></div><div class="ttdeci">uint32_t CTRL</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:30</div></div> +<div class="ttc" id="astructneorv32__onewire__t_html_ab8f4e61ac777c55cd1e5805eb03d3d4b"><div class="ttname"><a href="structneorv32__onewire__t.html#ab8f4e61ac777c55cd1e5805eb03d3d4b">neorv32_onewire_t::DCMD</a></div><div class="ttdeci">uint32_t DCMD</div><div class="ttdef"><b>Definition</b> neorv32_onewire.h:31</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__pwm_8c.html b/sw/neorv32__pwm_8c.html new file mode 100644 index 0000000000..dcee4d3c29 --- /dev/null +++ b/sw/neorv32__pwm_8c.html @@ -0,0 +1,280 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_pwm.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_pwm.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Pulse-Width Modulation Controller (PWM) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:afb12c860b2f7fa6cd1e069ea540da41c" id="r_afb12c860b2f7fa6cd1e069ea540da41c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afb12c860b2f7fa6cd1e069ea540da41c">neorv32_pwm_available</a> (void)</td></tr> +<tr class="separator:afb12c860b2f7fa6cd1e069ea540da41c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a43d8a47dc79ebac24c8a7d2d8247d2a5" id="r_a43d8a47dc79ebac24c8a7d2d8247d2a5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a43d8a47dc79ebac24c8a7d2d8247d2a5">neorv32_pmw_get_num_channels</a> (void)</td></tr> +<tr class="separator:a43d8a47dc79ebac24c8a7d2d8247d2a5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af00e67388ef9186e051e518883ad9a40" id="r_af00e67388ef9186e051e518883ad9a40"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af00e67388ef9186e051e518883ad9a40">neorv32_pwm_ch_enable</a> (int channel)</td></tr> +<tr class="separator:af00e67388ef9186e051e518883ad9a40"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7bc39afa807b7c2e06d6fd8b4dc7506c" id="r_a7bc39afa807b7c2e06d6fd8b4dc7506c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7bc39afa807b7c2e06d6fd8b4dc7506c">neorv32_pwm_ch_disable</a> (int channel)</td></tr> +<tr class="separator:a7bc39afa807b7c2e06d6fd8b4dc7506c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a784672443179a7c1e604f23854e001f4" id="r_a784672443179a7c1e604f23854e001f4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a784672443179a7c1e604f23854e001f4">neorv32_pwm_ch_set_clock</a> (int channel, int prsc, int cdiv)</td></tr> +<tr class="separator:a784672443179a7c1e604f23854e001f4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a518bad33405039fadd668d16276acb14" id="r_a518bad33405039fadd668d16276acb14"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a518bad33405039fadd668d16276acb14">neorv32_pwm_ch_set_duty</a> (int channel, int duty)</td></tr> +<tr class="separator:a518bad33405039fadd668d16276acb14"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Pulse-Width Modulation Controller (PWM) HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the PWM unit was synthesized (IO_PWM_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a43d8a47dc79ebac24c8a7d2d8247d2a5" name="a43d8a47dc79ebac24c8a7d2d8247d2a5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a43d8a47dc79ebac24c8a7d2d8247d2a5">&#9670;&#160;</a></span>neorv32_pmw_get_num_channels()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_pmw_get_num_channels </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get number of implemented PWM channels. </p><dl class="section warning"><dt>Warning</dt><dd>This function will override all channel configuration registers.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Number of implemented PWM channels. </dd></dl> + +</div> +</div> +<a id="afb12c860b2f7fa6cd1e069ea540da41c" name="afb12c860b2f7fa6cd1e069ea540da41c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afb12c860b2f7fa6cd1e069ea540da41c">&#9670;&#160;</a></span>neorv32_pwm_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_pwm_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if PWM unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if PWM was not synthesized, 1 if PWM is available. </dd></dl> + +</div> +</div> +<a id="a7bc39afa807b7c2e06d6fd8b4dc7506c" name="a7bc39afa807b7c2e06d6fd8b4dc7506c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7bc39afa807b7c2e06d6fd8b4dc7506c">&#9670;&#160;</a></span>neorv32_pwm_ch_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_pwm_ch_disable </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable PWM channel.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>Channel select (0..15). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="af00e67388ef9186e051e518883ad9a40" name="af00e67388ef9186e051e518883ad9a40"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af00e67388ef9186e051e518883ad9a40">&#9670;&#160;</a></span>neorv32_pwm_ch_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_pwm_ch_enable </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable PWM channel.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>Channel select (0..15). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a784672443179a7c1e604f23854e001f4" name="a784672443179a7c1e604f23854e001f4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a784672443179a7c1e604f23854e001f4">&#9670;&#160;</a></span>neorv32_pwm_ch_set_clock()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_pwm_ch_set_clock </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>prsc</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cdiv</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set PWM channel's clock configuration.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>Channel select (0..15). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>Coarse clock prescaler select (3-bit, LSB-aligned). See <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">cdiv</td><td>Fine clock divider value (10-bit, LSB-aligned). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a518bad33405039fadd668d16276acb14" name="a518bad33405039fadd668d16276acb14"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a518bad33405039fadd668d16276acb14">&#9670;&#160;</a></span>neorv32_pwm_ch_set_duty()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_pwm_ch_set_duty </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>duty</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set PWM channel's duty cycle.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>Channel select (0..15). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">duty</td><td>Duty cycle (8-bit, LSB-aligned). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__pwm_8h.html b/sw/neorv32__pwm_8h.html new file mode 100644 index 0000000000..bfd9fec584 --- /dev/null +++ b/sw/neorv32__pwm_8h.html @@ -0,0 +1,352 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_pwm.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_pwm.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Pulse-Width Modulation Controller (PWM) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__pwm_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__pwm__t.html">neorv32_pwm_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:afb12c860b2f7fa6cd1e069ea540da41c" id="r_afb12c860b2f7fa6cd1e069ea540da41c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afb12c860b2f7fa6cd1e069ea540da41c">neorv32_pwm_available</a> (void)</td></tr> +<tr class="separator:afb12c860b2f7fa6cd1e069ea540da41c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a43d8a47dc79ebac24c8a7d2d8247d2a5" id="r_a43d8a47dc79ebac24c8a7d2d8247d2a5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a43d8a47dc79ebac24c8a7d2d8247d2a5">neorv32_pmw_get_num_channels</a> (void)</td></tr> +<tr class="separator:a43d8a47dc79ebac24c8a7d2d8247d2a5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af00e67388ef9186e051e518883ad9a40" id="r_af00e67388ef9186e051e518883ad9a40"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af00e67388ef9186e051e518883ad9a40">neorv32_pwm_ch_enable</a> (int channel)</td></tr> +<tr class="separator:af00e67388ef9186e051e518883ad9a40"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7bc39afa807b7c2e06d6fd8b4dc7506c" id="r_a7bc39afa807b7c2e06d6fd8b4dc7506c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7bc39afa807b7c2e06d6fd8b4dc7506c">neorv32_pwm_ch_disable</a> (int channel)</td></tr> +<tr class="separator:a7bc39afa807b7c2e06d6fd8b4dc7506c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a784672443179a7c1e604f23854e001f4" id="r_a784672443179a7c1e604f23854e001f4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a784672443179a7c1e604f23854e001f4">neorv32_pwm_ch_set_clock</a> (int channel, int prsc, int cdiv)</td></tr> +<tr class="separator:a784672443179a7c1e604f23854e001f4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a518bad33405039fadd668d16276acb14" id="r_a518bad33405039fadd668d16276acb14"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a518bad33405039fadd668d16276acb14">neorv32_pwm_ch_set_duty</a> (int channel, int duty)</td></tr> +<tr class="separator:a518bad33405039fadd668d16276acb14"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: Pulse Width Modulation Controller (PWM)</h2></td></tr> +<tr class="memitem:ad4cb534c29e26fa56c10bef7afab8f51" id="r_ad4cb534c29e26fa56c10bef7afab8f51"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad4cb534c29e26fa56c10bef7afab8f51">NEORV32_PWM</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__pwm__t.html">neorv32_pwm_t</a>*) (<a class="el" href="neorv32_8h.html#afef7a6b121a788560b29e2ee2a58c725">NEORV32_PWM_BASE</a>))</td></tr> +<tr class="separator:ad4cb534c29e26fa56c10bef7afab8f51"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acbcb6d5d80029fb404efcd7123ff5175" id="r_acbcb6d5d80029fb404efcd7123ff5175"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acbcb6d5d80029fb404efcd7123ff5175">CHANNEL_CFG_enum</a> { <br /> +&#160;&#160;<a class="el" href="#acbcb6d5d80029fb404efcd7123ff5175a9aa8249716b15c92368c93b36bf7db43">PWM_CFG_DUTY_LSB</a> = 0 +, <a class="el" href="#acbcb6d5d80029fb404efcd7123ff5175af5d9dcb5740c39cfe8f9bfb5c1b66341">PWM_CFG_DUTY_MSB</a> = 7 +, <a class="el" href="#acbcb6d5d80029fb404efcd7123ff5175acc7e31e4b3f0e7ab0a0306a107109b4f">PWM_CFG_CDIV_LSB</a> = 8 +, <a class="el" href="#acbcb6d5d80029fb404efcd7123ff5175a6f741e102b7e15e946714360e81f4bb2">PWM_CFG_CDIV_MSB</a> = 17 +, <br /> +&#160;&#160;<a class="el" href="#acbcb6d5d80029fb404efcd7123ff5175aefe2211fe39acffb40ca738639b3d5f5">PWM_CFG_PRSC_LSB</a> = 28 +, <a class="el" href="#acbcb6d5d80029fb404efcd7123ff5175aa100b419699cd3c6787a9168a3ffec3d">PWM_CFG_PRSC_MSB</a> = 30 +, <a class="el" href="#acbcb6d5d80029fb404efcd7123ff5175a2b766bfa9653705025b745e0809c432a">PWM_CFG_EN</a> = 31 +<br /> + }</td></tr> +<tr class="separator:acbcb6d5d80029fb404efcd7123ff5175"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Pulse-Width Modulation Controller (PWM) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the PWM unit was synthesized (IO_PWM_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad4cb534c29e26fa56c10bef7afab8f51" name="ad4cb534c29e26fa56c10bef7afab8f51"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad4cb534c29e26fa56c10bef7afab8f51">&#9670;&#160;</a></span>NEORV32_PWM</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_PWM&#160;&#160;&#160;((<a class="el" href="structneorv32__pwm__t.html">neorv32_pwm_t</a>*) (<a class="el" href="neorv32_8h.html#afef7a6b121a788560b29e2ee2a58c725">NEORV32_PWM_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>PWM module hardware access (<a class="el" href="structneorv32__pwm__t.html">neorv32_pwm_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="acbcb6d5d80029fb404efcd7123ff5175" name="acbcb6d5d80029fb404efcd7123ff5175"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acbcb6d5d80029fb404efcd7123ff5175">&#9670;&#160;</a></span>CHANNEL_CFG_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#acbcb6d5d80029fb404efcd7123ff5175">CHANNEL_CFG_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>PWM channel configuration bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="acbcb6d5d80029fb404efcd7123ff5175a9aa8249716b15c92368c93b36bf7db43" name="acbcb6d5d80029fb404efcd7123ff5175a9aa8249716b15c92368c93b36bf7db43"></a>PWM_CFG_DUTY_LSB&#160;</td><td class="fielddoc"><p>PWM configuration register(0) (r/w): Duty cycle (8-bit), LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="acbcb6d5d80029fb404efcd7123ff5175af5d9dcb5740c39cfe8f9bfb5c1b66341" name="acbcb6d5d80029fb404efcd7123ff5175af5d9dcb5740c39cfe8f9bfb5c1b66341"></a>PWM_CFG_DUTY_MSB&#160;</td><td class="fielddoc"><p>PWM configuration register(7) (r/w): Duty cycle (8-bit), MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="acbcb6d5d80029fb404efcd7123ff5175acc7e31e4b3f0e7ab0a0306a107109b4f" name="acbcb6d5d80029fb404efcd7123ff5175acc7e31e4b3f0e7ab0a0306a107109b4f"></a>PWM_CFG_CDIV_LSB&#160;</td><td class="fielddoc"><p>PWM configuration register(8) (r/w): Clock divider (10-bit), LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="acbcb6d5d80029fb404efcd7123ff5175a6f741e102b7e15e946714360e81f4bb2" name="acbcb6d5d80029fb404efcd7123ff5175a6f741e102b7e15e946714360e81f4bb2"></a>PWM_CFG_CDIV_MSB&#160;</td><td class="fielddoc"><p>PWM configuration register(17) (r/w): Clock divider (10-bit), MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="acbcb6d5d80029fb404efcd7123ff5175aefe2211fe39acffb40ca738639b3d5f5" name="acbcb6d5d80029fb404efcd7123ff5175aefe2211fe39acffb40ca738639b3d5f5"></a>PWM_CFG_PRSC_LSB&#160;</td><td class="fielddoc"><p>PWM configuration register(28) (r/w): Clock prescaler select (3-bit), LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="acbcb6d5d80029fb404efcd7123ff5175aa100b419699cd3c6787a9168a3ffec3d" name="acbcb6d5d80029fb404efcd7123ff5175aa100b419699cd3c6787a9168a3ffec3d"></a>PWM_CFG_PRSC_MSB&#160;</td><td class="fielddoc"><p>PWM configuration register(30) (r/w): Clock prescaler select (3-bit), MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="acbcb6d5d80029fb404efcd7123ff5175a2b766bfa9653705025b745e0809c432a" name="acbcb6d5d80029fb404efcd7123ff5175a2b766bfa9653705025b745e0809c432a"></a>PWM_CFG_EN&#160;</td><td class="fielddoc"><p>PWM configuration register(31) (r/w): channel enable </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a43d8a47dc79ebac24c8a7d2d8247d2a5" name="a43d8a47dc79ebac24c8a7d2d8247d2a5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a43d8a47dc79ebac24c8a7d2d8247d2a5">&#9670;&#160;</a></span>neorv32_pmw_get_num_channels()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_pmw_get_num_channels </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get number of implemented PWM channels. </p><dl class="section warning"><dt>Warning</dt><dd>This function will override all channel configuration registers.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Number of implemented PWM channels. </dd></dl> + +</div> +</div> +<a id="afb12c860b2f7fa6cd1e069ea540da41c" name="afb12c860b2f7fa6cd1e069ea540da41c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afb12c860b2f7fa6cd1e069ea540da41c">&#9670;&#160;</a></span>neorv32_pwm_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_pwm_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if PWM unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if PWM was not synthesized, 1 if PWM is available. </dd></dl> + +</div> +</div> +<a id="a7bc39afa807b7c2e06d6fd8b4dc7506c" name="a7bc39afa807b7c2e06d6fd8b4dc7506c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7bc39afa807b7c2e06d6fd8b4dc7506c">&#9670;&#160;</a></span>neorv32_pwm_ch_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_pwm_ch_disable </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable PWM channel.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>Channel select (0..15). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="af00e67388ef9186e051e518883ad9a40" name="af00e67388ef9186e051e518883ad9a40"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af00e67388ef9186e051e518883ad9a40">&#9670;&#160;</a></span>neorv32_pwm_ch_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_pwm_ch_enable </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable PWM channel.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>Channel select (0..15). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a784672443179a7c1e604f23854e001f4" name="a784672443179a7c1e604f23854e001f4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a784672443179a7c1e604f23854e001f4">&#9670;&#160;</a></span>neorv32_pwm_ch_set_clock()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_pwm_ch_set_clock </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>prsc</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cdiv</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set PWM channel's clock configuration.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>Channel select (0..15). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>Coarse clock prescaler select (3-bit, LSB-aligned). See <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">cdiv</td><td>Fine clock divider value (10-bit, LSB-aligned). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a518bad33405039fadd668d16276acb14" name="a518bad33405039fadd668d16276acb14"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a518bad33405039fadd668d16276acb14">&#9670;&#160;</a></span>neorv32_pwm_ch_set_duty()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_pwm_ch_set_duty </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>duty</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set PWM channel's duty cycle.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>Channel select (0..15). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">duty</td><td>Duty cycle (8-bit, LSB-aligned). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__pwm_8h_source.html b/sw/neorv32__pwm_8h_source.html new file mode 100644 index 0000000000..2d9e8023dc --- /dev/null +++ b/sw/neorv32__pwm_8h_source.html @@ -0,0 +1,160 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_pwm.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_pwm.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__pwm_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_pwm_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_pwm_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__pwm__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__pwm__t.html#a5df0cf6c7c250365db3ada8db7cc19e9"> 30</a></span> uint32_t CHANNEL_CFG[16]; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span>} <a class="code hl_struct" href="structneorv32__pwm__t.html">neorv32_pwm_t</a>;</div> +</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="neorv32__pwm_8h.html#ad4cb534c29e26fa56c10bef7afab8f51"> 34</a></span><span class="preprocessor">#define NEORV32_PWM ((neorv32_pwm_t*) (NEORV32_PWM_BASE))</span></div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="foldopen" id="foldopen00037" data-start="{" data-end="};"> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175"> 37</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175">CHANNEL_CFG_enum</a> {</div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a9aa8249716b15c92368c93b36bf7db43"> 38</a></span> <a class="code hl_enumvalue" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a9aa8249716b15c92368c93b36bf7db43">PWM_CFG_DUTY_LSB</a> = 0, </div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175af5d9dcb5740c39cfe8f9bfb5c1b66341"> 39</a></span> <a class="code hl_enumvalue" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175af5d9dcb5740c39cfe8f9bfb5c1b66341">PWM_CFG_DUTY_MSB</a> = 7, </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175acc7e31e4b3f0e7ab0a0306a107109b4f"> 40</a></span> <a class="code hl_enumvalue" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175acc7e31e4b3f0e7ab0a0306a107109b4f">PWM_CFG_CDIV_LSB</a> = 8, </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a6f741e102b7e15e946714360e81f4bb2"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a6f741e102b7e15e946714360e81f4bb2">PWM_CFG_CDIV_MSB</a> = 17, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aefe2211fe39acffb40ca738639b3d5f5"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aefe2211fe39acffb40ca738639b3d5f5">PWM_CFG_PRSC_LSB</a> = 28, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aa100b419699cd3c6787a9168a3ffec3d"> 44</a></span> <a class="code hl_enumvalue" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aa100b419699cd3c6787a9168a3ffec3d">PWM_CFG_PRSC_MSB</a> = 30, </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <a class="code hl_enumvalue" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a2b766bfa9653705025b745e0809c432a">PWM_CFG_EN</a> = 31 </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a2b766bfa9653705025b745e0809c432a"> 46</a></span>};</div> +</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__pwm_8h.html#afb12c860b2f7fa6cd1e069ea540da41c">neorv32_pwm_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__pwm_8h.html#a43d8a47dc79ebac24c8a7d2d8247d2a5">neorv32_pmw_get_num_channels</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__pwm_8h.html#af00e67388ef9186e051e518883ad9a40">neorv32_pwm_ch_enable</a>(<span class="keywordtype">int</span> channel);</div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__pwm_8h.html#a7bc39afa807b7c2e06d6fd8b4dc7506c">neorv32_pwm_ch_disable</a>(<span class="keywordtype">int</span> channel);</div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__pwm_8h.html#a784672443179a7c1e604f23854e001f4">neorv32_pwm_ch_set_clock</a>(<span class="keywordtype">int</span> channel, <span class="keywordtype">int</span> prsc, <span class="keywordtype">int</span> cdiv);</div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__pwm_8h.html#a518bad33405039fadd668d16276acb14">neorv32_pwm_ch_set_duty</a>(<span class="keywordtype">int</span> channel, <span class="keywordtype">int</span> duty);</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_pwm_h</span></div> +<div class="ttc" id="aneorv32__pwm_8h_html_a43d8a47dc79ebac24c8a7d2d8247d2a5"><div class="ttname"><a href="neorv32__pwm_8h.html#a43d8a47dc79ebac24c8a7d2d8247d2a5">neorv32_pmw_get_num_channels</a></div><div class="ttdeci">int neorv32_pmw_get_num_channels(void)</div><div class="ttdef"><b>Definition</b> neorv32_pwm.c:43</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html_a518bad33405039fadd668d16276acb14"><div class="ttname"><a href="neorv32__pwm_8h.html#a518bad33405039fadd668d16276acb14">neorv32_pwm_ch_set_duty</a></div><div class="ttdeci">void neorv32_pwm_ch_set_duty(int channel, int duty)</div><div class="ttdef"><b>Definition</b> neorv32_pwm.c:108</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html_a784672443179a7c1e604f23854e001f4"><div class="ttname"><a href="neorv32__pwm_8h.html#a784672443179a7c1e604f23854e001f4">neorv32_pwm_ch_set_clock</a></div><div class="ttdeci">void neorv32_pwm_ch_set_clock(int channel, int prsc, int cdiv)</div><div class="ttdef"><b>Definition</b> neorv32_pwm.c:90</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html_a7bc39afa807b7c2e06d6fd8b4dc7506c"><div class="ttname"><a href="neorv32__pwm_8h.html#a7bc39afa807b7c2e06d6fd8b4dc7506c">neorv32_pwm_ch_disable</a></div><div class="ttdeci">void neorv32_pwm_ch_disable(int channel)</div><div class="ttdef"><b>Definition</b> neorv32_pwm.c:75</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html_acbcb6d5d80029fb404efcd7123ff5175"><div class="ttname"><a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175">CHANNEL_CFG_enum</a></div><div class="ttdeci">CHANNEL_CFG_enum</div><div class="ttdef"><b>Definition</b> neorv32_pwm.h:37</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html_acbcb6d5d80029fb404efcd7123ff5175a2b766bfa9653705025b745e0809c432a"><div class="ttname"><a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a2b766bfa9653705025b745e0809c432a">PWM_CFG_EN</a></div><div class="ttdeci">@ PWM_CFG_EN</div><div class="ttdef"><b>Definition</b> neorv32_pwm.h:45</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html_acbcb6d5d80029fb404efcd7123ff5175a6f741e102b7e15e946714360e81f4bb2"><div class="ttname"><a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a6f741e102b7e15e946714360e81f4bb2">PWM_CFG_CDIV_MSB</a></div><div class="ttdeci">@ PWM_CFG_CDIV_MSB</div><div class="ttdef"><b>Definition</b> neorv32_pwm.h:41</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html_acbcb6d5d80029fb404efcd7123ff5175a9aa8249716b15c92368c93b36bf7db43"><div class="ttname"><a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a9aa8249716b15c92368c93b36bf7db43">PWM_CFG_DUTY_LSB</a></div><div class="ttdeci">@ PWM_CFG_DUTY_LSB</div><div class="ttdef"><b>Definition</b> neorv32_pwm.h:38</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html_acbcb6d5d80029fb404efcd7123ff5175aa100b419699cd3c6787a9168a3ffec3d"><div class="ttname"><a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aa100b419699cd3c6787a9168a3ffec3d">PWM_CFG_PRSC_MSB</a></div><div class="ttdeci">@ PWM_CFG_PRSC_MSB</div><div class="ttdef"><b>Definition</b> neorv32_pwm.h:44</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html_acbcb6d5d80029fb404efcd7123ff5175acc7e31e4b3f0e7ab0a0306a107109b4f"><div class="ttname"><a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175acc7e31e4b3f0e7ab0a0306a107109b4f">PWM_CFG_CDIV_LSB</a></div><div class="ttdeci">@ PWM_CFG_CDIV_LSB</div><div class="ttdef"><b>Definition</b> neorv32_pwm.h:40</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html_acbcb6d5d80029fb404efcd7123ff5175aefe2211fe39acffb40ca738639b3d5f5"><div class="ttname"><a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aefe2211fe39acffb40ca738639b3d5f5">PWM_CFG_PRSC_LSB</a></div><div class="ttdeci">@ PWM_CFG_PRSC_LSB</div><div class="ttdef"><b>Definition</b> neorv32_pwm.h:43</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html_acbcb6d5d80029fb404efcd7123ff5175af5d9dcb5740c39cfe8f9bfb5c1b66341"><div class="ttname"><a href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175af5d9dcb5740c39cfe8f9bfb5c1b66341">PWM_CFG_DUTY_MSB</a></div><div class="ttdeci">@ PWM_CFG_DUTY_MSB</div><div class="ttdef"><b>Definition</b> neorv32_pwm.h:39</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html_af00e67388ef9186e051e518883ad9a40"><div class="ttname"><a href="neorv32__pwm_8h.html#af00e67388ef9186e051e518883ad9a40">neorv32_pwm_ch_enable</a></div><div class="ttdeci">void neorv32_pwm_ch_enable(int channel)</div><div class="ttdef"><b>Definition</b> neorv32_pwm.c:62</div></div> +<div class="ttc" id="aneorv32__pwm_8h_html_afb12c860b2f7fa6cd1e069ea540da41c"><div class="ttname"><a href="neorv32__pwm_8h.html#afb12c860b2f7fa6cd1e069ea540da41c">neorv32_pwm_available</a></div><div class="ttdeci">int neorv32_pwm_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_pwm.c:26</div></div> +<div class="ttc" id="astructneorv32__pwm__t_html"><div class="ttname"><a href="structneorv32__pwm__t.html">neorv32_pwm_t</a></div><div class="ttdef"><b>Definition</b> neorv32_pwm.h:29</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__rte_8c.html b/sw/neorv32__rte_8c.html new file mode 100644 index 0000000000..25bd0c675f --- /dev/null +++ b/sw/neorv32__rte_8c.html @@ -0,0 +1,460 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_rte.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">neorv32_rte.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>NEORV32 Runtime Environment. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a01bf6c01f5a8cda2132b9ac98824edc1" id="r_a01bf6c01f5a8cda2132b9ac98824edc1"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a01bf6c01f5a8cda2132b9ac98824edc1">__neorv32_rte_print_hex_word</a> (uint32_t num)</td></tr> +<tr class="separator:a01bf6c01f5a8cda2132b9ac98824edc1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a343e1913bdc37db9b168fb4def0e6170" id="r_a343e1913bdc37db9b168fb4def0e6170"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a343e1913bdc37db9b168fb4def0e6170">neorv32_rte_setup</a> (void)</td></tr> +<tr class="separator:a343e1913bdc37db9b168fb4def0e6170"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2cf31cfa569a03a20d554b6400c4c5e2" id="r_a2cf31cfa569a03a20d554b6400c4c5e2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2cf31cfa569a03a20d554b6400c4c5e2">neorv32_rte_handler_install</a> (int id, void(*handler)(void))</td></tr> +<tr class="separator:a2cf31cfa569a03a20d554b6400c4c5e2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a10fde6229bf391e46148405616404a65" id="r_a10fde6229bf391e46148405616404a65"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a10fde6229bf391e46148405616404a65">neorv32_rte_handler_uninstall</a> (int id)</td></tr> +<tr class="separator:a10fde6229bf391e46148405616404a65"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad6ab21f2218a3e88e0cc50d0643dafad" id="r_ad6ab21f2218a3e88e0cc50d0643dafad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad6ab21f2218a3e88e0cc50d0643dafad">neorv32_rte_core</a> (void)</td></tr> +<tr class="separator:ad6ab21f2218a3e88e0cc50d0643dafad"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a65e71acc8916b42b59dc2cf6bba30ba3" id="r_a65e71acc8916b42b59dc2cf6bba30ba3"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a65e71acc8916b42b59dc2cf6bba30ba3">neorv32_rte_context_get</a> (int x)</td></tr> +<tr class="separator:a65e71acc8916b42b59dc2cf6bba30ba3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae13a9c1fd59ad71afb0d47cf9a0b303e" id="r_ae13a9c1fd59ad71afb0d47cf9a0b303e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae13a9c1fd59ad71afb0d47cf9a0b303e">neorv32_rte_context_put</a> (int x, uint32_t data)</td></tr> +<tr class="separator:ae13a9c1fd59ad71afb0d47cf9a0b303e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a65422bb44f1e7bc011e9bfc5d8451ebe" id="r_a65422bb44f1e7bc011e9bfc5d8451ebe"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a65422bb44f1e7bc011e9bfc5d8451ebe">neorv32_rte_debug_handler</a> (void)</td></tr> +<tr class="separator:a65422bb44f1e7bc011e9bfc5d8451ebe"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a05e8304963e402d228a76aff1868771c" id="r_a05e8304963e402d228a76aff1868771c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a05e8304963e402d228a76aff1868771c">neorv32_rte_print_hw_config</a> (void)</td></tr> +<tr class="separator:a05e8304963e402d228a76aff1868771c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aad6f5256a265807c4cde163bcba8dae9" id="r_aad6f5256a265807c4cde163bcba8dae9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aad6f5256a265807c4cde163bcba8dae9">neorv32_rte_print_hw_version</a> (void)</td></tr> +<tr class="separator:aad6f5256a265807c4cde163bcba8dae9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa442c0e39f9156a131c3432fda587692" id="r_aa442c0e39f9156a131c3432fda587692"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa442c0e39f9156a131c3432fda587692">neorv32_rte_print_about</a> (void)</td></tr> +<tr class="separator:aa442c0e39f9156a131c3432fda587692"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a16df1b48f2e1258a51d3bb7f49531cf3" id="r_a16df1b48f2e1258a51d3bb7f49531cf3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a16df1b48f2e1258a51d3bb7f49531cf3">neorv32_rte_print_logo</a> (void)</td></tr> +<tr class="separator:a16df1b48f2e1258a51d3bb7f49531cf3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acd96aa73eebe6d4bbc9aabe1230cbabc" id="r_acd96aa73eebe6d4bbc9aabe1230cbabc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acd96aa73eebe6d4bbc9aabe1230cbabc">neorv32_rte_print_license</a> (void)</td></tr> +<tr class="separator:acd96aa73eebe6d4bbc9aabe1230cbabc"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:a2c8272b4628edddb943bcfad829b561a" id="r_a2c8272b4628edddb943bcfad829b561a"><td class="memItemLeft" align="right" valign="top">static uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2c8272b4628edddb943bcfad829b561a">__neorv32_rte_vector_lut</a> [<a class="el" href="neorv32__rte_8h.html#ad14a1ca41df1e9300bfd01aef07dce59">NEORV32_RTE_NUM_TRAPS</a>]</td></tr> +<tr class="separator:a2c8272b4628edddb943bcfad829b561a"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>NEORV32 Runtime Environment. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a01bf6c01f5a8cda2132b9ac98824edc1" name="a01bf6c01f5a8cda2132b9ac98824edc1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a01bf6c01f5a8cda2132b9ac98824edc1">&#9670;&#160;</a></span>__neorv32_rte_print_hex_word()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void __neorv32_rte_print_hex_word </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>num</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">static</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Private function to print 32-bit number as 8-digit hexadecimal value (with "0x" suffix).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">num</td><td>Number to print as hexadecimal via UART0. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a65e71acc8916b42b59dc2cf6bba30ba3" name="a65e71acc8916b42b59dc2cf6bba30ba3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a65e71acc8916b42b59dc2cf6bba30ba3">&#9670;&#160;</a></span>neorv32_rte_context_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_rte_context_get </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>x</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Read register from application context (on stack).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>Register number (0..31, corresponds to register x0..x31). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Content of register x. </dd></dl> + +</div> +</div> +<a id="ae13a9c1fd59ad71afb0d47cf9a0b303e" name="ae13a9c1fd59ad71afb0d47cf9a0b303e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae13a9c1fd59ad71afb0d47cf9a0b303e">&#9670;&#160;</a></span>neorv32_rte_context_put()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_context_put </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>x</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>data</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Write register to application context (on stack).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>Register number (0..31, corresponds to register x0..x31). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Data to be written to register x. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ad6ab21f2218a3e88e0cc50d0643dafad" name="ad6ab21f2218a3e88e0cc50d0643dafad"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad6ab21f2218a3e88e0cc50d0643dafad">&#9670;&#160;</a></span>neorv32_rte_core()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_core </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): This is the core of the NEORV32 RTE (first-level trap handler, executed in machine mode). </p> + +</div> +</div> +<a id="a65422bb44f1e7bc011e9bfc5d8451ebe" name="a65422bb44f1e7bc011e9bfc5d8451ebe"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a65422bb44f1e7bc011e9bfc5d8451ebe">&#9670;&#160;</a></span>neorv32_rte_debug_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_debug_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Debug trap handler, printing information via UART0. </p> + +</div> +</div> +<a id="a2cf31cfa569a03a20d554b6400c4c5e2" name="a2cf31cfa569a03a20d554b6400c4c5e2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2cf31cfa569a03a20d554b6400c4c5e2">&#9670;&#160;</a></span>neorv32_rte_handler_install()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_rte_handler_install </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>id</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">void(*</td> <td class="paramname"><span class="paramname"><em>handler&#160;</em></span>)(void)&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Install trap handler function (second-level trap handler).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">id</td><td>Identifier (type) of the targeted trap. See <a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">handler</td><td>The actual handler function for the specified trap (function MUST be of type "void function(void);"). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if success, -1 if error (invalid id or targeted trap not supported). </dd></dl> + +</div> +</div> +<a id="a10fde6229bf391e46148405616404a65" name="a10fde6229bf391e46148405616404a65"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a10fde6229bf391e46148405616404a65">&#9670;&#160;</a></span>neorv32_rte_handler_uninstall()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_rte_handler_uninstall </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>id</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Uninstall trap handler function from NEORV32 runtime environment, which was previously installed via neorv32_rte_handler_install(uint8_t id, void (*handler)(void)).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">id</td><td>Identifier (type) of the targeted trap. See <a class="el" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if success, -1 if error (invalid id or targeted trap not supported). </dd></dl> + +</div> +</div> +<a id="aa442c0e39f9156a131c3432fda587692" name="aa442c0e39f9156a131c3432fda587692"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa442c0e39f9156a131c3432fda587692">&#9670;&#160;</a></span>neorv32_rte_print_about()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_print_about </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Print project info via UART0. </p> + +</div> +</div> +<a id="a05e8304963e402d228a76aff1868771c" name="a05e8304963e402d228a76aff1868771c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a05e8304963e402d228a76aff1868771c">&#9670;&#160;</a></span>neorv32_rte_print_hw_config()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_print_hw_config </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Print hardware configuration information via UART0.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function overrides several CSR, CNT and HPM CSRs! </dd></dl> + +</div> +</div> +<a id="aad6f5256a265807c4cde163bcba8dae9" name="aad6f5256a265807c4cde163bcba8dae9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aad6f5256a265807c4cde163bcba8dae9">&#9670;&#160;</a></span>neorv32_rte_print_hw_version()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_print_hw_version </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Print the processor version in human-readable format via UART0. </p> + +</div> +</div> +<a id="acd96aa73eebe6d4bbc9aabe1230cbabc" name="acd96aa73eebe6d4bbc9aabe1230cbabc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acd96aa73eebe6d4bbc9aabe1230cbabc">&#9670;&#160;</a></span>neorv32_rte_print_license()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_print_license </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Print project license via UART0. </p> + +</div> +</div> +<a id="a16df1b48f2e1258a51d3bb7f49531cf3" name="a16df1b48f2e1258a51d3bb7f49531cf3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a16df1b48f2e1258a51d3bb7f49531cf3">&#9670;&#160;</a></span>neorv32_rte_print_logo()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_print_logo </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Print project logo via UART0. </p> + +</div> +</div> +<a id="a343e1913bdc37db9b168fb4def0e6170" name="a343e1913bdc37db9b168fb4def0e6170"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a343e1913bdc37db9b168fb4def0e6170">&#9670;&#160;</a></span>neorv32_rte_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_setup </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Setup RTE.</p> +<dl class="section note"><dt>Note</dt><dd>This function installs a debug handler for ALL trap sources, which gives detailed information about the trap. Actual handlers can be installed afterwards via neorv32_rte_handler_install(uint8_t id, void (*handler)(void)). </dd></dl> + +</div> +</div> +<h2 class="groupheader">Variable Documentation</h2> +<a id="a2c8272b4628edddb943bcfad829b561a" name="a2c8272b4628edddb943bcfad829b561a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2c8272b4628edddb943bcfad829b561a">&#9670;&#160;</a></span>__neorv32_rte_vector_lut</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t __neorv32_rte_vector_lut[<a class="el" href="neorv32__rte_8h.html#ad14a1ca41df1e9300bfd01aef07dce59">NEORV32_RTE_NUM_TRAPS</a>]</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">static</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): The &gt;private&lt; trap vector look-up table of the NEORV32 RTE. </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__rte_8h.html b/sw/neorv32__rte_8h.html new file mode 100644 index 0000000000..5ceefd056e --- /dev/null +++ b/sw/neorv32__rte_8h.html @@ -0,0 +1,540 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_rte.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#define-members">Macros</a> &#124; +<a href="#enum-members">Enumerations</a> </div> + <div class="headertitle"><div class="title">neorv32_rte.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>NEORV32 Runtime Environment. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__rte_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr class="memitem:ad14a1ca41df1e9300bfd01aef07dce59" id="r_ad14a1ca41df1e9300bfd01aef07dce59"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad14a1ca41df1e9300bfd01aef07dce59">NEORV32_RTE_NUM_TRAPS</a>&#160;&#160;&#160;29</td></tr> +<tr class="separator:ad14a1ca41df1e9300bfd01aef07dce59"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a> +Enumerations</h2></td></tr> +<tr class="memitem:ad28f86ab02d89ade2f0bc12e0a8ca70a" id="r_ad28f86ab02d89ade2f0bc12e0a8ca70a"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a> { <br /> +&#160;&#160;<a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4">RTE_TRAP_I_ACCESS</a> = 0 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2">RTE_TRAP_I_ILLEGAL</a> = 1 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81">RTE_TRAP_I_MISALIGNED</a> = 2 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2">RTE_TRAP_BREAKPOINT</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f">RTE_TRAP_L_MISALIGNED</a> = 4 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab">RTE_TRAP_L_ACCESS</a> = 5 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232">RTE_TRAP_S_MISALIGNED</a> = 6 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7">RTE_TRAP_S_ACCESS</a> = 7 +, <br /> +&#160;&#160;<a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc">RTE_TRAP_UENV_CALL</a> = 8 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d">RTE_TRAP_MENV_CALL</a> = 9 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174">RTE_TRAP_MSI</a> = 10 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff">RTE_TRAP_MTI</a> = 11 +, <br /> +&#160;&#160;<a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff">RTE_TRAP_MEI</a> = 12 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922">RTE_TRAP_FIRQ_0</a> = 13 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd">RTE_TRAP_FIRQ_1</a> = 14 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489">RTE_TRAP_FIRQ_2</a> = 15 +, <br /> +&#160;&#160;<a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be">RTE_TRAP_FIRQ_3</a> = 16 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff">RTE_TRAP_FIRQ_4</a> = 17 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9">RTE_TRAP_FIRQ_5</a> = 18 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998">RTE_TRAP_FIRQ_6</a> = 19 +, <br /> +&#160;&#160;<a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb">RTE_TRAP_FIRQ_7</a> = 20 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308">RTE_TRAP_FIRQ_8</a> = 21 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76">RTE_TRAP_FIRQ_9</a> = 22 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52">RTE_TRAP_FIRQ_10</a> = 23 +, <br /> +&#160;&#160;<a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0">RTE_TRAP_FIRQ_11</a> = 24 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9">RTE_TRAP_FIRQ_12</a> = 25 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220">RTE_TRAP_FIRQ_13</a> = 26 +, <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313">RTE_TRAP_FIRQ_14</a> = 27 +, <br /> +&#160;&#160;<a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe">RTE_TRAP_FIRQ_15</a> = 28 +<br /> + }</td></tr> +<tr class="separator:ad28f86ab02d89ade2f0bc12e0a8ca70a"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:a343e1913bdc37db9b168fb4def0e6170" id="r_a343e1913bdc37db9b168fb4def0e6170"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a343e1913bdc37db9b168fb4def0e6170">neorv32_rte_setup</a> (void)</td></tr> +<tr class="separator:a343e1913bdc37db9b168fb4def0e6170"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad6ab21f2218a3e88e0cc50d0643dafad" id="r_ad6ab21f2218a3e88e0cc50d0643dafad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad6ab21f2218a3e88e0cc50d0643dafad">neorv32_rte_core</a> (void)</td></tr> +<tr class="separator:ad6ab21f2218a3e88e0cc50d0643dafad"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2cf31cfa569a03a20d554b6400c4c5e2" id="r_a2cf31cfa569a03a20d554b6400c4c5e2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2cf31cfa569a03a20d554b6400c4c5e2">neorv32_rte_handler_install</a> (int id, void(*handler)(void))</td></tr> +<tr class="separator:a2cf31cfa569a03a20d554b6400c4c5e2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a10fde6229bf391e46148405616404a65" id="r_a10fde6229bf391e46148405616404a65"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a10fde6229bf391e46148405616404a65">neorv32_rte_handler_uninstall</a> (int id)</td></tr> +<tr class="separator:a10fde6229bf391e46148405616404a65"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a65422bb44f1e7bc011e9bfc5d8451ebe" id="r_a65422bb44f1e7bc011e9bfc5d8451ebe"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a65422bb44f1e7bc011e9bfc5d8451ebe">neorv32_rte_debug_handler</a> (void)</td></tr> +<tr class="separator:a65422bb44f1e7bc011e9bfc5d8451ebe"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a65e71acc8916b42b59dc2cf6bba30ba3" id="r_a65e71acc8916b42b59dc2cf6bba30ba3"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a65e71acc8916b42b59dc2cf6bba30ba3">neorv32_rte_context_get</a> (int x)</td></tr> +<tr class="separator:a65e71acc8916b42b59dc2cf6bba30ba3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae13a9c1fd59ad71afb0d47cf9a0b303e" id="r_ae13a9c1fd59ad71afb0d47cf9a0b303e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae13a9c1fd59ad71afb0d47cf9a0b303e">neorv32_rte_context_put</a> (int x, uint32_t data)</td></tr> +<tr class="separator:ae13a9c1fd59ad71afb0d47cf9a0b303e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a05e8304963e402d228a76aff1868771c" id="r_a05e8304963e402d228a76aff1868771c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a05e8304963e402d228a76aff1868771c">neorv32_rte_print_hw_config</a> (void)</td></tr> +<tr class="separator:a05e8304963e402d228a76aff1868771c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aad6f5256a265807c4cde163bcba8dae9" id="r_aad6f5256a265807c4cde163bcba8dae9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aad6f5256a265807c4cde163bcba8dae9">neorv32_rte_print_hw_version</a> (void)</td></tr> +<tr class="separator:aad6f5256a265807c4cde163bcba8dae9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa442c0e39f9156a131c3432fda587692" id="r_aa442c0e39f9156a131c3432fda587692"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa442c0e39f9156a131c3432fda587692">neorv32_rte_print_about</a> (void)</td></tr> +<tr class="separator:aa442c0e39f9156a131c3432fda587692"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a16df1b48f2e1258a51d3bb7f49531cf3" id="r_a16df1b48f2e1258a51d3bb7f49531cf3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a16df1b48f2e1258a51d3bb7f49531cf3">neorv32_rte_print_logo</a> (void)</td></tr> +<tr class="separator:a16df1b48f2e1258a51d3bb7f49531cf3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acd96aa73eebe6d4bbc9aabe1230cbabc" id="r_acd96aa73eebe6d4bbc9aabe1230cbabc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acd96aa73eebe6d4bbc9aabe1230cbabc">neorv32_rte_print_license</a> (void)</td></tr> +<tr class="separator:acd96aa73eebe6d4bbc9aabe1230cbabc"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>NEORV32 Runtime Environment. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ad14a1ca41df1e9300bfd01aef07dce59" name="ad14a1ca41df1e9300bfd01aef07dce59"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad14a1ca41df1e9300bfd01aef07dce59">&#9670;&#160;</a></span>NEORV32_RTE_NUM_TRAPS</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_RTE_NUM_TRAPS&#160;&#160;&#160;29</td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment: Number of available traps. </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="ad28f86ab02d89ade2f0bc12e0a8ca70a" name="ad28f86ab02d89ade2f0bc12e0a8ca70a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad28f86ab02d89ade2f0bc12e0a8ca70a">&#9670;&#160;</a></span>NEORV32_RTE_TRAP_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment trap IDs. </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4"></a>RTE_TRAP_I_ACCESS&#160;</td><td class="fielddoc"><p>Instruction access fault </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2"></a>RTE_TRAP_I_ILLEGAL&#160;</td><td class="fielddoc"><p>Illegal instruction </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81" name="ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81"></a>RTE_TRAP_I_MISALIGNED&#160;</td><td class="fielddoc"><p>Instruction address misaligned </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2"></a>RTE_TRAP_BREAKPOINT&#160;</td><td class="fielddoc"><p>Breakpoint (EBREAK instruction) </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f"></a>RTE_TRAP_L_MISALIGNED&#160;</td><td class="fielddoc"><p>Load address misaligned </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab"></a>RTE_TRAP_L_ACCESS&#160;</td><td class="fielddoc"><p>Load access fault </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232"></a>RTE_TRAP_S_MISALIGNED&#160;</td><td class="fielddoc"><p>Store address misaligned </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7" name="ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7"></a>RTE_TRAP_S_ACCESS&#160;</td><td class="fielddoc"><p>Store access fault </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc"></a>RTE_TRAP_UENV_CALL&#160;</td><td class="fielddoc"><p>Environment call from user mode (ECALL instruction) </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d" name="ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d"></a>RTE_TRAP_MENV_CALL&#160;</td><td class="fielddoc"><p>Environment call from machine mode (ECALL instruction) </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174" name="ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174"></a>RTE_TRAP_MSI&#160;</td><td class="fielddoc"><p>Machine software interrupt </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff" name="ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff"></a>RTE_TRAP_MTI&#160;</td><td class="fielddoc"><p>Machine timer interrupt </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff" name="ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff"></a>RTE_TRAP_MEI&#160;</td><td class="fielddoc"><p>Machine external interrupt </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922" name="ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922"></a>RTE_TRAP_FIRQ_0&#160;</td><td class="fielddoc"><p>Fast interrupt channel 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd" name="ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd"></a>RTE_TRAP_FIRQ_1&#160;</td><td class="fielddoc"><p>Fast interrupt channel 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489"></a>RTE_TRAP_FIRQ_2&#160;</td><td class="fielddoc"><p>Fast interrupt channel 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be"></a>RTE_TRAP_FIRQ_3&#160;</td><td class="fielddoc"><p>Fast interrupt channel 3 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff"></a>RTE_TRAP_FIRQ_4&#160;</td><td class="fielddoc"><p>Fast interrupt channel 4 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9"></a>RTE_TRAP_FIRQ_5&#160;</td><td class="fielddoc"><p>Fast interrupt channel 5 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998" name="ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998"></a>RTE_TRAP_FIRQ_6&#160;</td><td class="fielddoc"><p>Fast interrupt channel 6 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb"></a>RTE_TRAP_FIRQ_7&#160;</td><td class="fielddoc"><p>Fast interrupt channel 7 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308"></a>RTE_TRAP_FIRQ_8&#160;</td><td class="fielddoc"><p>Fast interrupt channel 8 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76"></a>RTE_TRAP_FIRQ_9&#160;</td><td class="fielddoc"><p>Fast interrupt channel 9 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52" name="ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52"></a>RTE_TRAP_FIRQ_10&#160;</td><td class="fielddoc"><p>Fast interrupt channel 10 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0" name="ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0"></a>RTE_TRAP_FIRQ_11&#160;</td><td class="fielddoc"><p>Fast interrupt channel 11 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9" name="ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9"></a>RTE_TRAP_FIRQ_12&#160;</td><td class="fielddoc"><p>Fast interrupt channel 12 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220"></a>RTE_TRAP_FIRQ_13&#160;</td><td class="fielddoc"><p>Fast interrupt channel 13 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313" name="ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313"></a>RTE_TRAP_FIRQ_14&#160;</td><td class="fielddoc"><p>Fast interrupt channel 14 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe" name="ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe"></a>RTE_TRAP_FIRQ_15&#160;</td><td class="fielddoc"><p>Fast interrupt channel 15 </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a65e71acc8916b42b59dc2cf6bba30ba3" name="a65e71acc8916b42b59dc2cf6bba30ba3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a65e71acc8916b42b59dc2cf6bba30ba3">&#9670;&#160;</a></span>neorv32_rte_context_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_rte_context_get </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>x</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Read register from application context (on stack).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>Register number (0..31, corresponds to register x0..x31). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Content of register x. </dd></dl> + +</div> +</div> +<a id="ae13a9c1fd59ad71afb0d47cf9a0b303e" name="ae13a9c1fd59ad71afb0d47cf9a0b303e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae13a9c1fd59ad71afb0d47cf9a0b303e">&#9670;&#160;</a></span>neorv32_rte_context_put()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_context_put </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>x</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>data</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Write register to application context (on stack).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>Register number (0..31, corresponds to register x0..x31). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Data to be written to register x. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ad6ab21f2218a3e88e0cc50d0643dafad" name="ad6ab21f2218a3e88e0cc50d0643dafad"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad6ab21f2218a3e88e0cc50d0643dafad">&#9670;&#160;</a></span>neorv32_rte_core()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_core </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): This is the core of the NEORV32 RTE (first-level trap handler, executed in machine mode). </p> + +</div> +</div> +<a id="a65422bb44f1e7bc011e9bfc5d8451ebe" name="a65422bb44f1e7bc011e9bfc5d8451ebe"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a65422bb44f1e7bc011e9bfc5d8451ebe">&#9670;&#160;</a></span>neorv32_rte_debug_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_debug_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Debug trap handler, printing information via UART0. </p> + +</div> +</div> +<a id="a2cf31cfa569a03a20d554b6400c4c5e2" name="a2cf31cfa569a03a20d554b6400c4c5e2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2cf31cfa569a03a20d554b6400c4c5e2">&#9670;&#160;</a></span>neorv32_rte_handler_install()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_rte_handler_install </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>id</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">void(*</td> <td class="paramname"><span class="paramname"><em>handler&#160;</em></span>)(void)&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Install trap handler function (second-level trap handler).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">id</td><td>Identifier (type) of the targeted trap. See <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">handler</td><td>The actual handler function for the specified trap (function MUST be of type "void function(void);"). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if success, -1 if error (invalid id or targeted trap not supported). </dd></dl> + +</div> +</div> +<a id="a10fde6229bf391e46148405616404a65" name="a10fde6229bf391e46148405616404a65"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a10fde6229bf391e46148405616404a65">&#9670;&#160;</a></span>neorv32_rte_handler_uninstall()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_rte_handler_uninstall </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>id</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Uninstall trap handler function from NEORV32 runtime environment, which was previously installed via neorv32_rte_handler_install(uint8_t id, void (*handler)(void)).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">id</td><td>Identifier (type) of the targeted trap. See <a class="el" href="#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if success, -1 if error (invalid id or targeted trap not supported). </dd></dl> + +</div> +</div> +<a id="aa442c0e39f9156a131c3432fda587692" name="aa442c0e39f9156a131c3432fda587692"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa442c0e39f9156a131c3432fda587692">&#9670;&#160;</a></span>neorv32_rte_print_about()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_print_about </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Print project info via UART0. </p> + +</div> +</div> +<a id="a05e8304963e402d228a76aff1868771c" name="a05e8304963e402d228a76aff1868771c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a05e8304963e402d228a76aff1868771c">&#9670;&#160;</a></span>neorv32_rte_print_hw_config()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_print_hw_config </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Print hardware configuration information via UART0.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function overrides several CSR, CNT and HPM CSRs! </dd></dl> + +</div> +</div> +<a id="aad6f5256a265807c4cde163bcba8dae9" name="aad6f5256a265807c4cde163bcba8dae9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aad6f5256a265807c4cde163bcba8dae9">&#9670;&#160;</a></span>neorv32_rte_print_hw_version()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_print_hw_version </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Print the processor version in human-readable format via UART0. </p> + +</div> +</div> +<a id="acd96aa73eebe6d4bbc9aabe1230cbabc" name="acd96aa73eebe6d4bbc9aabe1230cbabc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acd96aa73eebe6d4bbc9aabe1230cbabc">&#9670;&#160;</a></span>neorv32_rte_print_license()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_print_license </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Print project license via UART0. </p> + +</div> +</div> +<a id="a16df1b48f2e1258a51d3bb7f49531cf3" name="a16df1b48f2e1258a51d3bb7f49531cf3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a16df1b48f2e1258a51d3bb7f49531cf3">&#9670;&#160;</a></span>neorv32_rte_print_logo()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_print_logo </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Print project logo via UART0. </p> + +</div> +</div> +<a id="a343e1913bdc37db9b168fb4def0e6170" name="a343e1913bdc37db9b168fb4def0e6170"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a343e1913bdc37db9b168fb4def0e6170">&#9670;&#160;</a></span>neorv32_rte_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_rte_setup </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32 runtime environment (RTE): Setup RTE.</p> +<dl class="section note"><dt>Note</dt><dd>This function installs a debug handler for ALL trap sources, which gives detailed information about the trap. Actual handlers can be installed afterwards via neorv32_rte_handler_install(uint8_t id, void (*handler)(void)). </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__rte_8h_source.html b/sw/neorv32__rte_8h_source.html new file mode 100644 index 0000000000..de2fddb226 --- /dev/null +++ b/sw/neorv32__rte_8h_source.html @@ -0,0 +1,214 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_rte.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_rte.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__rte_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef neorv32_rte_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define neorv32_rte_h</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad14a1ca41df1e9300bfd01aef07dce59"> 25</a></span><span class="preprocessor">#define NEORV32_RTE_NUM_TRAPS 29</span></div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00031" data-start="{" data-end="};"> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a"> 31</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a> {</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4"> 32</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4">RTE_TRAP_I_ACCESS</a> = 0, </div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2"> 33</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2">RTE_TRAP_I_ILLEGAL</a> = 1, </div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81"> 34</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81">RTE_TRAP_I_MISALIGNED</a> = 2, </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2"> 35</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2">RTE_TRAP_BREAKPOINT</a> = 3, </div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f"> 36</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f">RTE_TRAP_L_MISALIGNED</a> = 4, </div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab"> 37</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab">RTE_TRAP_L_ACCESS</a> = 5, </div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232"> 38</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232">RTE_TRAP_S_MISALIGNED</a> = 6, </div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7"> 39</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7">RTE_TRAP_S_ACCESS</a> = 7, </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc"> 40</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc">RTE_TRAP_UENV_CALL</a> = 8, </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d">RTE_TRAP_MENV_CALL</a> = 9, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174">RTE_TRAP_MSI</a> = 10, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff">RTE_TRAP_MTI</a> = 11, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff"> 44</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff">RTE_TRAP_MEI</a> = 12, </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922"> 45</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922">RTE_TRAP_FIRQ_0</a> = 13, </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd"> 46</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd">RTE_TRAP_FIRQ_1</a> = 14, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489">RTE_TRAP_FIRQ_2</a> = 15, </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be"> 48</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be">RTE_TRAP_FIRQ_3</a> = 16, </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff"> 49</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff">RTE_TRAP_FIRQ_4</a> = 17, </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9"> 50</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9">RTE_TRAP_FIRQ_5</a> = 18, </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998"> 51</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998">RTE_TRAP_FIRQ_6</a> = 19, </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb"> 52</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb">RTE_TRAP_FIRQ_7</a> = 20, </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308"> 53</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308">RTE_TRAP_FIRQ_8</a> = 21, </div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76"> 54</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76">RTE_TRAP_FIRQ_9</a> = 22, </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52"> 55</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52">RTE_TRAP_FIRQ_10</a> = 23, </div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0"> 56</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0">RTE_TRAP_FIRQ_11</a> = 24, </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9"> 57</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9">RTE_TRAP_FIRQ_12</a> = 25, </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220"> 58</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220">RTE_TRAP_FIRQ_13</a> = 26, </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313"> 59</a></span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313">RTE_TRAP_FIRQ_14</a> = 27, </div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_enumvalue" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe">RTE_TRAP_FIRQ_15</a> = 28 </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe"> 61</a></span>};</div> +</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__rte_8h.html#a343e1913bdc37db9b168fb4def0e6170">neorv32_rte_setup</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__rte_8h.html#ad6ab21f2218a3e88e0cc50d0643dafad">neorv32_rte_core</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__rte_8h.html#a2cf31cfa569a03a20d554b6400c4c5e2">neorv32_rte_handler_install</a>(<span class="keywordtype">int</span> <span class="keywordtype">id</span>, <span class="keywordtype">void</span> (*handler)(<span class="keywordtype">void</span>));</div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__rte_8h.html#a10fde6229bf391e46148405616404a65">neorv32_rte_handler_uninstall</a>(<span class="keywordtype">int</span> <span class="keywordtype">id</span>);</div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__rte_8h.html#a65422bb44f1e7bc011e9bfc5d8451ebe">neorv32_rte_debug_handler</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>uint32_t <a class="code hl_function" href="neorv32__rte_8h.html#a65e71acc8916b42b59dc2cf6bba30ba3">neorv32_rte_context_get</a>(<span class="keywordtype">int</span> x);</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__rte_8h.html#ae13a9c1fd59ad71afb0d47cf9a0b303e">neorv32_rte_context_put</a>(<span class="keywordtype">int</span> x, uint32_t data);</div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__rte_8h.html#a05e8304963e402d228a76aff1868771c">neorv32_rte_print_hw_config</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__rte_8h.html#aad6f5256a265807c4cde163bcba8dae9">neorv32_rte_print_hw_version</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__rte_8h.html#aa442c0e39f9156a131c3432fda587692">neorv32_rte_print_about</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__rte_8h.html#a16df1b48f2e1258a51d3bb7f49531cf3">neorv32_rte_print_logo</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__rte_8h.html#acd96aa73eebe6d4bbc9aabe1230cbabc">neorv32_rte_print_license</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_rte_h</span></div> +<div class="ttc" id="aneorv32__rte_8h_html_a05e8304963e402d228a76aff1868771c"><div class="ttname"><a href="neorv32__rte_8h.html#a05e8304963e402d228a76aff1868771c">neorv32_rte_print_hw_config</a></div><div class="ttdeci">void neorv32_rte_print_hw_config(void)</div><div class="ttdef"><b>Definition</b> neorv32_rte.c:386</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_a10fde6229bf391e46148405616404a65"><div class="ttname"><a href="neorv32__rte_8h.html#a10fde6229bf391e46148405616404a65">neorv32_rte_handler_uninstall</a></div><div class="ttdeci">int neorv32_rte_handler_uninstall(int id)</div><div class="ttdef"><b>Definition</b> neorv32_rte.c:84</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_a16df1b48f2e1258a51d3bb7f49531cf3"><div class="ttname"><a href="neorv32__rte_8h.html#a16df1b48f2e1258a51d3bb7f49531cf3">neorv32_rte_print_logo</a></div><div class="ttdeci">void neorv32_rte_print_logo(void)</div><div class="ttdef"><b>Definition</b> neorv32_rte.c:740</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_a2cf31cfa569a03a20d554b6400c4c5e2"><div class="ttname"><a href="neorv32__rte_8h.html#a2cf31cfa569a03a20d554b6400c4c5e2">neorv32_rte_handler_install</a></div><div class="ttdeci">int neorv32_rte_handler_install(int id, void(*handler)(void))</div><div class="ttdef"><b>Definition</b> neorv32_rte.c:64</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_a343e1913bdc37db9b168fb4def0e6170"><div class="ttname"><a href="neorv32__rte_8h.html#a343e1913bdc37db9b168fb4def0e6170">neorv32_rte_setup</a></div><div class="ttdeci">void neorv32_rte_setup(void)</div><div class="ttdef"><b>Definition</b> neorv32_rte.c:37</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_a65422bb44f1e7bc011e9bfc5d8451ebe"><div class="ttname"><a href="neorv32__rte_8h.html#a65422bb44f1e7bc011e9bfc5d8451ebe">neorv32_rte_debug_handler</a></div><div class="ttdeci">void neorv32_rte_debug_handler(void)</div><div class="ttdef"><b>Definition</b> neorv32_rte.c:296</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_a65e71acc8916b42b59dc2cf6bba30ba3"><div class="ttname"><a href="neorv32__rte_8h.html#a65e71acc8916b42b59dc2cf6bba30ba3">neorv32_rte_context_get</a></div><div class="ttdeci">uint32_t neorv32_rte_context_get(int x)</div><div class="ttdef"><b>Definition</b> neorv32_rte.c:259</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_aa442c0e39f9156a131c3432fda587692"><div class="ttname"><a href="neorv32__rte_8h.html#aa442c0e39f9156a131c3432fda587692">neorv32_rte_print_about</a></div><div class="ttdeci">void neorv32_rte_print_about(void)</div><div class="ttdef"><b>Definition</b> neorv32_rte.c:725</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_aad6f5256a265807c4cde163bcba8dae9"><div class="ttname"><a href="neorv32__rte_8h.html#aad6f5256a265807c4cde163bcba8dae9">neorv32_rte_print_hw_version</a></div><div class="ttdeci">void neorv32_rte_print_hw_version(void)</div><div class="ttdef"><b>Definition</b> neorv32_rte.c:692</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_acd96aa73eebe6d4bbc9aabe1230cbabc"><div class="ttname"><a href="neorv32__rte_8h.html#acd96aa73eebe6d4bbc9aabe1230cbabc">neorv32_rte_print_license</a></div><div class="ttdeci">void neorv32_rte_print_license(void)</div><div class="ttdef"><b>Definition</b> neorv32_rte.c:782</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70a"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a">NEORV32_RTE_TRAP_enum</a></div><div class="ttdeci">NEORV32_RTE_TRAP_enum</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:31</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9">RTE_TRAP_FIRQ_5</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_5</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:50</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc">RTE_TRAP_UENV_CALL</a></div><div class="ttdeci">@ RTE_TRAP_UENV_CALL</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:40</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe">RTE_TRAP_FIRQ_15</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_15</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:60</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489">RTE_TRAP_FIRQ_2</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_2</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:47</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76">RTE_TRAP_FIRQ_9</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_9</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:54</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308">RTE_TRAP_FIRQ_8</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_8</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:53</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2">RTE_TRAP_BREAKPOINT</a></div><div class="ttdeci">@ RTE_TRAP_BREAKPOINT</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:35</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2">RTE_TRAP_I_ILLEGAL</a></div><div class="ttdeci">@ RTE_TRAP_I_ILLEGAL</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:33</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be">RTE_TRAP_FIRQ_3</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_3</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:48</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220">RTE_TRAP_FIRQ_13</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_13</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:58</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb">RTE_TRAP_FIRQ_7</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_7</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:52</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232">RTE_TRAP_S_MISALIGNED</a></div><div class="ttdeci">@ RTE_TRAP_S_MISALIGNED</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:38</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff">RTE_TRAP_FIRQ_4</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_4</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:49</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f">RTE_TRAP_L_MISALIGNED</a></div><div class="ttdeci">@ RTE_TRAP_L_MISALIGNED</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:36</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4">RTE_TRAP_I_ACCESS</a></div><div class="ttdeci">@ RTE_TRAP_I_ACCESS</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:32</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab">RTE_TRAP_L_ACCESS</a></div><div class="ttdeci">@ RTE_TRAP_L_ACCESS</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:37</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7">RTE_TRAP_S_ACCESS</a></div><div class="ttdeci">@ RTE_TRAP_S_ACCESS</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:39</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313">RTE_TRAP_FIRQ_14</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_14</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:59</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd">RTE_TRAP_FIRQ_1</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_1</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:46</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922">RTE_TRAP_FIRQ_0</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_0</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:45</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0">RTE_TRAP_FIRQ_11</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_11</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:56</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998">RTE_TRAP_FIRQ_6</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_6</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:51</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff">RTE_TRAP_MTI</a></div><div class="ttdeci">@ RTE_TRAP_MTI</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:43</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff">RTE_TRAP_MEI</a></div><div class="ttdeci">@ RTE_TRAP_MEI</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:44</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174">RTE_TRAP_MSI</a></div><div class="ttdeci">@ RTE_TRAP_MSI</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:42</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52">RTE_TRAP_FIRQ_10</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_10</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:55</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d">RTE_TRAP_MENV_CALL</a></div><div class="ttdeci">@ RTE_TRAP_MENV_CALL</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:41</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9">RTE_TRAP_FIRQ_12</a></div><div class="ttdeci">@ RTE_TRAP_FIRQ_12</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:57</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81"><div class="ttname"><a href="neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81">RTE_TRAP_I_MISALIGNED</a></div><div class="ttdeci">@ RTE_TRAP_I_MISALIGNED</div><div class="ttdef"><b>Definition</b> neorv32_rte.h:34</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ad6ab21f2218a3e88e0cc50d0643dafad"><div class="ttname"><a href="neorv32__rte_8h.html#ad6ab21f2218a3e88e0cc50d0643dafad">neorv32_rte_core</a></div><div class="ttdeci">void neorv32_rte_core(void)</div><div class="ttdef"><b>Definition</b> neorv32_rte.c:100</div></div> +<div class="ttc" id="aneorv32__rte_8h_html_ae13a9c1fd59ad71afb0d47cf9a0b303e"><div class="ttname"><a href="neorv32__rte_8h.html#ae13a9c1fd59ad71afb0d47cf9a0b303e">neorv32_rte_context_put</a></div><div class="ttdeci">void neorv32_rte_context_put(int x, uint32_t data)</div><div class="ttdef"><b>Definition</b> neorv32_rte.c:279</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__sdi_8c.html b/sw/neorv32__sdi_8c.html new file mode 100644 index 0000000000..d2b7bebfc1 --- /dev/null +++ b/sw/neorv32__sdi_8c.html @@ -0,0 +1,301 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_sdi.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_sdi.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Serial data interface controller (SDI) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a51412722efdb18cd09667622b215e825" id="r_a51412722efdb18cd09667622b215e825"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a51412722efdb18cd09667622b215e825">neorv32_sdi_available</a> (void)</td></tr> +<tr class="separator:a51412722efdb18cd09667622b215e825"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3246118dc0d7e1f61bc2485bbab44149" id="r_a3246118dc0d7e1f61bc2485bbab44149"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3246118dc0d7e1f61bc2485bbab44149">neorv32_sdi_setup</a> (uint32_t irq_mask)</td></tr> +<tr class="separator:a3246118dc0d7e1f61bc2485bbab44149"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8bd54bca8aea6147651c8115ee616f54" id="r_a8bd54bca8aea6147651c8115ee616f54"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8bd54bca8aea6147651c8115ee616f54">neorv32_sdi_disable</a> (void)</td></tr> +<tr class="separator:a8bd54bca8aea6147651c8115ee616f54"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5d68b9b1642baf3519076e55a22a8f61" id="r_a5d68b9b1642baf3519076e55a22a8f61"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5d68b9b1642baf3519076e55a22a8f61">neorv32_sdi_enable</a> (void)</td></tr> +<tr class="separator:a5d68b9b1642baf3519076e55a22a8f61"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7390faeb01b4de3dd5ac18335736b90c" id="r_a7390faeb01b4de3dd5ac18335736b90c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7390faeb01b4de3dd5ac18335736b90c">neorv32_sdi_get_fifo_depth</a> (void)</td></tr> +<tr class="separator:a7390faeb01b4de3dd5ac18335736b90c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac7a262d16c42bbac27723ff779545569" id="r_ac7a262d16c42bbac27723ff779545569"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac7a262d16c42bbac27723ff779545569">neorv32_sdi_put</a> (uint8_t data)</td></tr> +<tr class="separator:ac7a262d16c42bbac27723ff779545569"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4d54ce22ec97eb83da118439576e3277" id="r_a4d54ce22ec97eb83da118439576e3277"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4d54ce22ec97eb83da118439576e3277">neorv32_sdi_get</a> (uint8_t *data)</td></tr> +<tr class="separator:a4d54ce22ec97eb83da118439576e3277"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2636cf1959ce1f3eb4b77c00ca2e2707" id="r_a2636cf1959ce1f3eb4b77c00ca2e2707"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2636cf1959ce1f3eb4b77c00ca2e2707">neorv32_sdi_check_cs</a> (void)</td></tr> +<tr class="separator:a2636cf1959ce1f3eb4b77c00ca2e2707"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Serial data interface controller (SDI) HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the SDI unit was synthesized (IO_SDI_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a51412722efdb18cd09667622b215e825" name="a51412722efdb18cd09667622b215e825"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a51412722efdb18cd09667622b215e825">&#9670;&#160;</a></span>neorv32_sdi_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_sdi_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if SDI unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if SDI was not synthesized, 1 if SPI is available. </dd></dl> + +</div> +</div> +<a id="a2636cf1959ce1f3eb4b77c00ca2e2707" name="a2636cf1959ce1f3eb4b77c00ca2e2707"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2636cf1959ce1f3eb4b77c00ca2e2707">&#9670;&#160;</a></span>neorv32_sdi_check_cs()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_sdi_check_cs </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get status of chip-select line.</p> +<dl class="section return"><dt>Returns</dt><dd>1 if chip-select line is enabled/active (driven low), 0 otherwise. </dd></dl> + +</div> +</div> +<a id="a8bd54bca8aea6147651c8115ee616f54" name="a8bd54bca8aea6147651c8115ee616f54"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8bd54bca8aea6147651c8115ee616f54">&#9670;&#160;</a></span>neorv32_sdi_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_sdi_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable SDI controller. </p> + +</div> +</div> +<a id="a5d68b9b1642baf3519076e55a22a8f61" name="a5d68b9b1642baf3519076e55a22a8f61"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5d68b9b1642baf3519076e55a22a8f61">&#9670;&#160;</a></span>neorv32_sdi_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_sdi_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable SDI controller. </p> + +</div> +</div> +<a id="a4d54ce22ec97eb83da118439576e3277" name="a4d54ce22ec97eb83da118439576e3277"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4d54ce22ec97eb83da118439576e3277">&#9670;&#160;</a></span>neorv32_sdi_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_sdi_get </td> + <td>(</td> + <td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get data from SDI input FIFO.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">Pointer</td><td>fro data byte read from RX FIFO. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>-1 if RX FIFO is empty, 0 if success. </dd></dl> + +</div> +</div> +<a id="a7390faeb01b4de3dd5ac18335736b90c" name="a7390faeb01b4de3dd5ac18335736b90c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7390faeb01b4de3dd5ac18335736b90c">&#9670;&#160;</a></span>neorv32_sdi_get_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_sdi_get_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get SDI FIFO depth.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries), 1 if no FIFO implemented </dd></dl> + +</div> +</div> +<a id="ac7a262d16c42bbac27723ff779545569" name="ac7a262d16c42bbac27723ff779545569"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac7a262d16c42bbac27723ff779545569">&#9670;&#160;</a></span>neorv32_sdi_put()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_sdi_put </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Push data to SDI output FIFO.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Byte to push into TX FIFO. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>-1 if TX FIFO is full, 0 if success. </dd></dl> + +</div> +</div> +<a id="a3246118dc0d7e1f61bc2485bbab44149" name="a3246118dc0d7e1f61bc2485bbab44149"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3246118dc0d7e1f61bc2485bbab44149">&#9670;&#160;</a></span>neorv32_sdi_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_sdi_setup </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>irq_mask</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset, enable and configure SDI controller. The SDI control register bits are listed in <a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6">NEORV32_SDI_CTRL_enum</a>.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_mask</td><td>Interrupt configuration mask (CTRL's irq_* bits). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__sdi_8h.html b/sw/neorv32__sdi_8h.html new file mode 100644 index 0000000000..776d96601c --- /dev/null +++ b/sw/neorv32__sdi_8h.html @@ -0,0 +1,399 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_sdi.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_sdi.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Serial data interface controller (SPPI) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__sdi_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__sdi__t.html">neorv32_sdi_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:a51412722efdb18cd09667622b215e825" id="r_a51412722efdb18cd09667622b215e825"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a51412722efdb18cd09667622b215e825">neorv32_sdi_available</a> (void)</td></tr> +<tr class="separator:a51412722efdb18cd09667622b215e825"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3246118dc0d7e1f61bc2485bbab44149" id="r_a3246118dc0d7e1f61bc2485bbab44149"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3246118dc0d7e1f61bc2485bbab44149">neorv32_sdi_setup</a> (uint32_t irq_mask)</td></tr> +<tr class="separator:a3246118dc0d7e1f61bc2485bbab44149"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8bd54bca8aea6147651c8115ee616f54" id="r_a8bd54bca8aea6147651c8115ee616f54"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8bd54bca8aea6147651c8115ee616f54">neorv32_sdi_disable</a> (void)</td></tr> +<tr class="separator:a8bd54bca8aea6147651c8115ee616f54"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5d68b9b1642baf3519076e55a22a8f61" id="r_a5d68b9b1642baf3519076e55a22a8f61"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5d68b9b1642baf3519076e55a22a8f61">neorv32_sdi_enable</a> (void)</td></tr> +<tr class="separator:a5d68b9b1642baf3519076e55a22a8f61"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7390faeb01b4de3dd5ac18335736b90c" id="r_a7390faeb01b4de3dd5ac18335736b90c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7390faeb01b4de3dd5ac18335736b90c">neorv32_sdi_get_fifo_depth</a> (void)</td></tr> +<tr class="separator:a7390faeb01b4de3dd5ac18335736b90c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac7a262d16c42bbac27723ff779545569" id="r_ac7a262d16c42bbac27723ff779545569"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac7a262d16c42bbac27723ff779545569">neorv32_sdi_put</a> (uint8_t data)</td></tr> +<tr class="separator:ac7a262d16c42bbac27723ff779545569"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4d54ce22ec97eb83da118439576e3277" id="r_a4d54ce22ec97eb83da118439576e3277"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4d54ce22ec97eb83da118439576e3277">neorv32_sdi_get</a> (uint8_t *data)</td></tr> +<tr class="separator:a4d54ce22ec97eb83da118439576e3277"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2636cf1959ce1f3eb4b77c00ca2e2707" id="r_a2636cf1959ce1f3eb4b77c00ca2e2707"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2636cf1959ce1f3eb4b77c00ca2e2707">neorv32_sdi_check_cs</a> (void)</td></tr> +<tr class="separator:a2636cf1959ce1f3eb4b77c00ca2e2707"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: Serial Data Interface (SDI)</h2></td></tr> +<tr class="memitem:afd0921633d6523d9b7235055e9bbf928" id="r_afd0921633d6523d9b7235055e9bbf928"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afd0921633d6523d9b7235055e9bbf928">NEORV32_SDI</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__sdi__t.html">neorv32_sdi_t</a>*) (<a class="el" href="neorv32_8h.html#a9b316ec038bd94ada42c9dab57a0a3cb">NEORV32_SDI_BASE</a>))</td></tr> +<tr class="separator:afd0921633d6523d9b7235055e9bbf928"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abad9f422cbdff1b73100e98f7ab20ec6" id="r_abad9f422cbdff1b73100e98f7ab20ec6"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6">NEORV32_SDI_CTRL_enum</a> { <br /> +&#160;&#160;<a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809">SDI_CTRL_EN</a> = 0 +, <a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4">SDI_CTRL_FIFO_LSB</a> = 4 +, <a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716">SDI_CTRL_FIFO_MSB</a> = 7 +, <a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0">SDI_CTRL_IRQ_RX_AVAIL</a> = 15 +, <br /> +&#160;&#160;<a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281">SDI_CTRL_IRQ_RX_HALF</a> = 16 +, <a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d">SDI_CTRL_IRQ_RX_FULL</a> = 17 +, <a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210">SDI_CTRL_IRQ_TX_EMPTY</a> = 18 +, <a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed">SDI_CTRL_IRQ_TX_NHALF</a> = 19 +, <br /> +&#160;&#160;<a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0">SDI_CTRL_RX_AVAIL</a> = 23 +, <a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4">SDI_CTRL_RX_HALF</a> = 24 +, <a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a">SDI_CTRL_RX_FULL</a> = 25 +, <a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8">SDI_CTRL_TX_EMPTY</a> = 26 +, <br /> +&#160;&#160;<a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9">SDI_CTRL_TX_NHALF</a> = 27 +, <a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a">SDI_CTRL_TX_FULL</a> = 28 +, <a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63">SDI_CTRL_CS_ACTIVE</a> = 31 +<br /> + }</td></tr> +<tr class="separator:abad9f422cbdff1b73100e98f7ab20ec6"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Serial data interface controller (SPPI) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the SDI unit was synthesized (IO_SDI_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="afd0921633d6523d9b7235055e9bbf928" name="afd0921633d6523d9b7235055e9bbf928"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afd0921633d6523d9b7235055e9bbf928">&#9670;&#160;</a></span>NEORV32_SDI</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_SDI&#160;&#160;&#160;((<a class="el" href="structneorv32__sdi__t.html">neorv32_sdi_t</a>*) (<a class="el" href="neorv32_8h.html#a9b316ec038bd94ada42c9dab57a0a3cb">NEORV32_SDI_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>SDI module hardware access (<a class="el" href="structneorv32__sdi__t.html">neorv32_sdi_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="abad9f422cbdff1b73100e98f7ab20ec6" name="abad9f422cbdff1b73100e98f7ab20ec6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abad9f422cbdff1b73100e98f7ab20ec6">&#9670;&#160;</a></span>NEORV32_SDI_CTRL_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6">NEORV32_SDI_CTRL_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SDI control register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809" name="abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809"></a>SDI_CTRL_EN&#160;</td><td class="fielddoc"><p>SDI control register(0) (r/w): SID module enable </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4" name="abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4"></a>SDI_CTRL_FIFO_LSB&#160;</td><td class="fielddoc"><p>SDI control register(4) (r/-): log2 of SDI FIFO size, LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716" name="abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716"></a>SDI_CTRL_FIFO_MSB&#160;</td><td class="fielddoc"><p>SDI control register(7) (r/-): log2 of SDI FIFO size, MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0" name="abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0"></a>SDI_CTRL_IRQ_RX_AVAIL&#160;</td><td class="fielddoc"><p>SDI control register(15) (r/w): IRQ when RX FIFO not empty </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281" name="abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281"></a>SDI_CTRL_IRQ_RX_HALF&#160;</td><td class="fielddoc"><p>SDI control register(16) (r/w): IRQ when RX FIFO at least half full </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d" name="abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d"></a>SDI_CTRL_IRQ_RX_FULL&#160;</td><td class="fielddoc"><p>SDI control register(17) (r/w): IRQ when RX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210" name="abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210"></a>SDI_CTRL_IRQ_TX_EMPTY&#160;</td><td class="fielddoc"><p>SDI control register(18) (r/w): IRQ when TX FIFO empty </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed" name="abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed"></a>SDI_CTRL_IRQ_TX_NHALF&#160;</td><td class="fielddoc"><p>SDI control register(19) (r/w): IRQ when TX FIFO not at least half full </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0" name="abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0"></a>SDI_CTRL_RX_AVAIL&#160;</td><td class="fielddoc"><p>SDI control register(23) (r/-): RX FIFO not empty </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4" name="abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4"></a>SDI_CTRL_RX_HALF&#160;</td><td class="fielddoc"><p>SDI control register(24) (r/-): RX FIFO at least half full </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a" name="abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a"></a>SDI_CTRL_RX_FULL&#160;</td><td class="fielddoc"><p>SDI control register(25) (r/-): RX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8" name="abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8"></a>SDI_CTRL_TX_EMPTY&#160;</td><td class="fielddoc"><p>SDI control register(26) (r/-): TX FIFO empty </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9" name="abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9"></a>SDI_CTRL_TX_NHALF&#160;</td><td class="fielddoc"><p>SDI control register(27) (r/-): TX FIFO not at least half full </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a" name="abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a"></a>SDI_CTRL_TX_FULL&#160;</td><td class="fielddoc"><p>SDI control register(28) (r/-): TX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63" name="abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63"></a>SDI_CTRL_CS_ACTIVE&#160;</td><td class="fielddoc"><p>SDI control register(31) (r/-): Chip-select is active when set </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a51412722efdb18cd09667622b215e825" name="a51412722efdb18cd09667622b215e825"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a51412722efdb18cd09667622b215e825">&#9670;&#160;</a></span>neorv32_sdi_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_sdi_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if SDI unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if SDI was not synthesized, 1 if SPI is available. </dd></dl> + +</div> +</div> +<a id="a2636cf1959ce1f3eb4b77c00ca2e2707" name="a2636cf1959ce1f3eb4b77c00ca2e2707"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2636cf1959ce1f3eb4b77c00ca2e2707">&#9670;&#160;</a></span>neorv32_sdi_check_cs()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_sdi_check_cs </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get status of chip-select line.</p> +<dl class="section return"><dt>Returns</dt><dd>1 if chip-select line is enabled/active (driven low), 0 otherwise. </dd></dl> + +</div> +</div> +<a id="a8bd54bca8aea6147651c8115ee616f54" name="a8bd54bca8aea6147651c8115ee616f54"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8bd54bca8aea6147651c8115ee616f54">&#9670;&#160;</a></span>neorv32_sdi_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_sdi_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable SDI controller. </p> + +</div> +</div> +<a id="a5d68b9b1642baf3519076e55a22a8f61" name="a5d68b9b1642baf3519076e55a22a8f61"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5d68b9b1642baf3519076e55a22a8f61">&#9670;&#160;</a></span>neorv32_sdi_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_sdi_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable SDI controller. </p> + +</div> +</div> +<a id="a4d54ce22ec97eb83da118439576e3277" name="a4d54ce22ec97eb83da118439576e3277"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4d54ce22ec97eb83da118439576e3277">&#9670;&#160;</a></span>neorv32_sdi_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_sdi_get </td> + <td>(</td> + <td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get data from SDI input FIFO.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">Pointer</td><td>fro data byte read from RX FIFO. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>-1 if RX FIFO is empty, 0 if success. </dd></dl> + +</div> +</div> +<a id="a7390faeb01b4de3dd5ac18335736b90c" name="a7390faeb01b4de3dd5ac18335736b90c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7390faeb01b4de3dd5ac18335736b90c">&#9670;&#160;</a></span>neorv32_sdi_get_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_sdi_get_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get SDI FIFO depth.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries), 1 if no FIFO implemented </dd></dl> + +</div> +</div> +<a id="ac7a262d16c42bbac27723ff779545569" name="ac7a262d16c42bbac27723ff779545569"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac7a262d16c42bbac27723ff779545569">&#9670;&#160;</a></span>neorv32_sdi_put()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_sdi_put </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Push data to SDI output FIFO.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Byte to push into TX FIFO. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>-1 if TX FIFO is full, 0 if success. </dd></dl> + +</div> +</div> +<a id="a3246118dc0d7e1f61bc2485bbab44149" name="a3246118dc0d7e1f61bc2485bbab44149"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3246118dc0d7e1f61bc2485bbab44149">&#9670;&#160;</a></span>neorv32_sdi_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_sdi_setup </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>irq_mask</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset, enable and configure SDI controller. The SDI control register bits are listed in <a class="el" href="#abad9f422cbdff1b73100e98f7ab20ec6">NEORV32_SDI_CTRL_enum</a>.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_mask</td><td>Interrupt configuration mask (CTRL's irq_* bits). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__sdi_8h_source.html b/sw/neorv32__sdi_8h_source.html new file mode 100644 index 0000000000..e2eb640652 --- /dev/null +++ b/sw/neorv32__sdi_8h_source.html @@ -0,0 +1,183 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_sdi.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_sdi.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__sdi_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_sdi_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_sdi_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__sdi__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__sdi__t.html#af494f25cbcd8478cf384eb868e447303"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__sdi__t.html#af494f25cbcd8478cf384eb868e447303">CTRL</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__sdi__t.html#a3ea6903c0924d0a1b633b6a2b0ae44f1"> 31</a></span> uint32_t <a class="code hl_variable" href="structneorv32__sdi__t.html#a3ea6903c0924d0a1b633b6a2b0ae44f1">DATA</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>} <a class="code hl_struct" href="structneorv32__sdi__t.html">neorv32_sdi_t</a>;</div> +</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#afd0921633d6523d9b7235055e9bbf928"> 35</a></span><span class="preprocessor">#define NEORV32_SDI ((neorv32_sdi_t*) (NEORV32_SDI_BASE))</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="foldopen" id="foldopen00038" data-start="{" data-end="};"> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6"> 38</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6">NEORV32_SDI_CTRL_enum</a> {</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809"> 39</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809">SDI_CTRL_EN</a> = 0, </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4">SDI_CTRL_FIFO_LSB</a> = 4, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716">SDI_CTRL_FIFO_MSB</a> = 7, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0"> 44</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0">SDI_CTRL_IRQ_RX_AVAIL</a> = 15, </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281"> 45</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281">SDI_CTRL_IRQ_RX_HALF</a> = 16, </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d"> 46</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d">SDI_CTRL_IRQ_RX_FULL</a> = 17, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210">SDI_CTRL_IRQ_TX_EMPTY</a> = 18, </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed"> 48</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed">SDI_CTRL_IRQ_TX_NHALF</a> = 19, </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0"> 50</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0">SDI_CTRL_RX_AVAIL</a> = 23, </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4"> 51</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4">SDI_CTRL_RX_HALF</a> = 24, </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a"> 52</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a">SDI_CTRL_RX_FULL</a> = 25, </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8"> 53</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8">SDI_CTRL_TX_EMPTY</a> = 26, </div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9"> 54</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9">SDI_CTRL_TX_NHALF</a> = 27, </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a"> 55</a></span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a">SDI_CTRL_TX_FULL</a> = 28, </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_enumvalue" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63">SDI_CTRL_CS_ACTIVE</a> = 31 </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63"> 58</a></span>};</div> +</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__sdi_8h.html#a51412722efdb18cd09667622b215e825">neorv32_sdi_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__sdi_8h.html#a3246118dc0d7e1f61bc2485bbab44149">neorv32_sdi_setup</a>(uint32_t irq_mask);</div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__sdi_8h.html#a8bd54bca8aea6147651c8115ee616f54">neorv32_sdi_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__sdi_8h.html#a5d68b9b1642baf3519076e55a22a8f61">neorv32_sdi_enable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__sdi_8h.html#a7390faeb01b4de3dd5ac18335736b90c">neorv32_sdi_get_fifo_depth</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__sdi_8h.html#ac7a262d16c42bbac27723ff779545569">neorv32_sdi_put</a>(uint8_t data);</div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__sdi_8h.html#a4d54ce22ec97eb83da118439576e3277">neorv32_sdi_get</a>(uint8_t* data);</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__sdi_8h.html#a2636cf1959ce1f3eb4b77c00ca2e2707">neorv32_sdi_check_cs</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_sdi_h</span></div> +<div class="ttc" id="aneorv32__sdi_8h_html_a2636cf1959ce1f3eb4b77c00ca2e2707"><div class="ttname"><a href="neorv32__sdi_8h.html#a2636cf1959ce1f3eb4b77c00ca2e2707">neorv32_sdi_check_cs</a></div><div class="ttdeci">int neorv32_sdi_check_cs(void)</div><div class="ttdef"><b>Definition</b> neorv32_sdi.c:126</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_a3246118dc0d7e1f61bc2485bbab44149"><div class="ttname"><a href="neorv32__sdi_8h.html#a3246118dc0d7e1f61bc2485bbab44149">neorv32_sdi_setup</a></div><div class="ttdeci">void neorv32_sdi_setup(uint32_t irq_mask)</div><div class="ttdef"><b>Definition</b> neorv32_sdi.c:43</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_a4d54ce22ec97eb83da118439576e3277"><div class="ttname"><a href="neorv32__sdi_8h.html#a4d54ce22ec97eb83da118439576e3277">neorv32_sdi_get</a></div><div class="ttdeci">int neorv32_sdi_get(uint8_t *data)</div><div class="ttdef"><b>Definition</b> neorv32_sdi.c:109</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_a51412722efdb18cd09667622b215e825"><div class="ttname"><a href="neorv32__sdi_8h.html#a51412722efdb18cd09667622b215e825">neorv32_sdi_available</a></div><div class="ttdeci">int neorv32_sdi_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_sdi.c:26</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_a5d68b9b1642baf3519076e55a22a8f61"><div class="ttname"><a href="neorv32__sdi_8h.html#a5d68b9b1642baf3519076e55a22a8f61">neorv32_sdi_enable</a></div><div class="ttdeci">void neorv32_sdi_enable(void)</div><div class="ttdef"><b>Definition</b> neorv32_sdi.c:67</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_a7390faeb01b4de3dd5ac18335736b90c"><div class="ttname"><a href="neorv32__sdi_8h.html#a7390faeb01b4de3dd5ac18335736b90c">neorv32_sdi_get_fifo_depth</a></div><div class="ttdeci">int neorv32_sdi_get_fifo_depth(void)</div><div class="ttdef"><b>Definition</b> neorv32_sdi.c:78</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_a8bd54bca8aea6147651c8115ee616f54"><div class="ttname"><a href="neorv32__sdi_8h.html#a8bd54bca8aea6147651c8115ee616f54">neorv32_sdi_disable</a></div><div class="ttdeci">void neorv32_sdi_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_sdi.c:58</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6">NEORV32_SDI_CTRL_enum</a></div><div class="ttdeci">NEORV32_SDI_CTRL_enum</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:38</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d">SDI_CTRL_IRQ_RX_FULL</a></div><div class="ttdeci">@ SDI_CTRL_IRQ_RX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:46</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0">SDI_CTRL_IRQ_RX_AVAIL</a></div><div class="ttdeci">@ SDI_CTRL_IRQ_RX_AVAIL</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:44</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a">SDI_CTRL_RX_FULL</a></div><div class="ttdeci">@ SDI_CTRL_RX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:52</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210">SDI_CTRL_IRQ_TX_EMPTY</a></div><div class="ttdeci">@ SDI_CTRL_IRQ_TX_EMPTY</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:47</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed">SDI_CTRL_IRQ_TX_NHALF</a></div><div class="ttdeci">@ SDI_CTRL_IRQ_TX_NHALF</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:48</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4">SDI_CTRL_FIFO_LSB</a></div><div class="ttdeci">@ SDI_CTRL_FIFO_LSB</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:41</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8">SDI_CTRL_TX_EMPTY</a></div><div class="ttdeci">@ SDI_CTRL_TX_EMPTY</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:53</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716">SDI_CTRL_FIFO_MSB</a></div><div class="ttdeci">@ SDI_CTRL_FIFO_MSB</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:42</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4">SDI_CTRL_RX_HALF</a></div><div class="ttdeci">@ SDI_CTRL_RX_HALF</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:51</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63">SDI_CTRL_CS_ACTIVE</a></div><div class="ttdeci">@ SDI_CTRL_CS_ACTIVE</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:57</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a">SDI_CTRL_TX_FULL</a></div><div class="ttdeci">@ SDI_CTRL_TX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:55</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0">SDI_CTRL_RX_AVAIL</a></div><div class="ttdeci">@ SDI_CTRL_RX_AVAIL</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:50</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9">SDI_CTRL_TX_NHALF</a></div><div class="ttdeci">@ SDI_CTRL_TX_NHALF</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:54</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281">SDI_CTRL_IRQ_RX_HALF</a></div><div class="ttdeci">@ SDI_CTRL_IRQ_RX_HALF</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:45</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809"><div class="ttname"><a href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809">SDI_CTRL_EN</a></div><div class="ttdeci">@ SDI_CTRL_EN</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:39</div></div> +<div class="ttc" id="aneorv32__sdi_8h_html_ac7a262d16c42bbac27723ff779545569"><div class="ttname"><a href="neorv32__sdi_8h.html#ac7a262d16c42bbac27723ff779545569">neorv32_sdi_put</a></div><div class="ttdeci">int neorv32_sdi_put(uint8_t data)</div><div class="ttdef"><b>Definition</b> neorv32_sdi.c:91</div></div> +<div class="ttc" id="astructneorv32__sdi__t_html"><div class="ttname"><a href="structneorv32__sdi__t.html">neorv32_sdi_t</a></div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:29</div></div> +<div class="ttc" id="astructneorv32__sdi__t_html_a3ea6903c0924d0a1b633b6a2b0ae44f1"><div class="ttname"><a href="structneorv32__sdi__t.html#a3ea6903c0924d0a1b633b6a2b0ae44f1">neorv32_sdi_t::DATA</a></div><div class="ttdeci">uint32_t DATA</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:31</div></div> +<div class="ttc" id="astructneorv32__sdi__t_html_af494f25cbcd8478cf384eb868e447303"><div class="ttname"><a href="structneorv32__sdi__t.html#af494f25cbcd8478cf384eb868e447303">neorv32_sdi_t::CTRL</a></div><div class="ttdeci">uint32_t CTRL</div><div class="ttdef"><b>Definition</b> neorv32_sdi.h:30</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__slink_8c.html b/sw/neorv32__slink_8c.html new file mode 100644 index 0000000000..bb426f9bea --- /dev/null +++ b/sw/neorv32__slink_8c.html @@ -0,0 +1,485 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_slink.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_slink.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Stream Link Interface HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:aaf0f7bc96b797e819ccaae94292d9ddb" id="r_aaf0f7bc96b797e819ccaae94292d9ddb"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aaf0f7bc96b797e819ccaae94292d9ddb">neorv32_slink_available</a> (void)</td></tr> +<tr class="separator:aaf0f7bc96b797e819ccaae94292d9ddb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8f0b4a768f53a72a5c16034e160ce321" id="r_a8f0b4a768f53a72a5c16034e160ce321"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8f0b4a768f53a72a5c16034e160ce321">neorv32_slink_setup</a> (uint32_t rx_irq, uint32_t tx_irq)</td></tr> +<tr class="separator:a8f0b4a768f53a72a5c16034e160ce321"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad149fea81e6d28f77450b8ba50cf706e" id="r_ad149fea81e6d28f77450b8ba50cf706e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad149fea81e6d28f77450b8ba50cf706e">neorv32_slink_rx_clear</a> (void)</td></tr> +<tr class="separator:ad149fea81e6d28f77450b8ba50cf706e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac7484e9e3848f94efe016dd064f6a57f" id="r_ac7484e9e3848f94efe016dd064f6a57f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac7484e9e3848f94efe016dd064f6a57f">neorv32_slink_tx_clear</a> (void)</td></tr> +<tr class="separator:ac7484e9e3848f94efe016dd064f6a57f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a575c7663ca0bd07c95b1d45152a3ddf8" id="r_a575c7663ca0bd07c95b1d45152a3ddf8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a575c7663ca0bd07c95b1d45152a3ddf8">neorv32_slink_get_rx_fifo_depth</a> (void)</td></tr> +<tr class="separator:a575c7663ca0bd07c95b1d45152a3ddf8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aaf0d0d1b890353d4f3bf49450ec2fad2" id="r_aaf0d0d1b890353d4f3bf49450ec2fad2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aaf0d0d1b890353d4f3bf49450ec2fad2">neorv32_slink_get_tx_fifo_depth</a> (void)</td></tr> +<tr class="separator:aaf0d0d1b890353d4f3bf49450ec2fad2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ace319592c12dc6a0fe1b7dd66bdf9284" id="r_ace319592c12dc6a0fe1b7dd66bdf9284"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ace319592c12dc6a0fe1b7dd66bdf9284">neorv32_slink_get</a> (void)</td></tr> +<tr class="separator:ace319592c12dc6a0fe1b7dd66bdf9284"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3e02c558548c1c6178c49adee9a007f7" id="r_a3e02c558548c1c6178c49adee9a007f7"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3e02c558548c1c6178c49adee9a007f7">neorv32_slink_check_last</a> (void)</td></tr> +<tr class="separator:a3e02c558548c1c6178c49adee9a007f7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad857d7e78ca2b5eb0d0a4f2c515fe7bc" id="r_ad857d7e78ca2b5eb0d0a4f2c515fe7bc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad857d7e78ca2b5eb0d0a4f2c515fe7bc">neorv32_slink_set_dst</a> (uint32_t dst)</td></tr> +<tr class="separator:ad857d7e78ca2b5eb0d0a4f2c515fe7bc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1a9269f42552a849450aecd99f7ec7a0" id="r_a1a9269f42552a849450aecd99f7ec7a0"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1a9269f42552a849450aecd99f7ec7a0">neorv32_slink_get_src</a> (void)</td></tr> +<tr class="separator:a1a9269f42552a849450aecd99f7ec7a0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aaa9fdb9cbfa7888e92790ab65431d21d" id="r_aaa9fdb9cbfa7888e92790ab65431d21d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aaa9fdb9cbfa7888e92790ab65431d21d">neorv32_slink_put</a> (uint32_t tx_data)</td></tr> +<tr class="separator:aaa9fdb9cbfa7888e92790ab65431d21d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2136bc0b12ee2e6703e84a6417a1e8eb" id="r_a2136bc0b12ee2e6703e84a6417a1e8eb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2136bc0b12ee2e6703e84a6417a1e8eb">neorv32_slink_put_last</a> (uint32_t tx_data)</td></tr> +<tr class="separator:a2136bc0b12ee2e6703e84a6417a1e8eb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad57fc0941fe32e8bf423ce3e57e2c10a" id="r_ad57fc0941fe32e8bf423ce3e57e2c10a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad57fc0941fe32e8bf423ce3e57e2c10a">neorv32_slink_rx_status</a> (void)</td></tr> +<tr class="separator:ad57fc0941fe32e8bf423ce3e57e2c10a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad0252e7ae915e5840cd17e8c52e94a1c" id="r_ad0252e7ae915e5840cd17e8c52e94a1c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad0252e7ae915e5840cd17e8c52e94a1c">neorv32_slink_tx_status</a> (void)</td></tr> +<tr class="separator:ad0252e7ae915e5840cd17e8c52e94a1c"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Stream Link Interface HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the SLINK unit was synthesized (IO_SLINK_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="aaf0f7bc96b797e819ccaae94292d9ddb" name="aaf0f7bc96b797e819ccaae94292d9ddb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aaf0f7bc96b797e819ccaae94292d9ddb">&#9670;&#160;</a></span>neorv32_slink_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_slink_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if stream link interface was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if SLINK was not synthesized, 1 if SLINK is available. </dd></dl> + +</div> +</div> +<a id="a3e02c558548c1c6178c49adee9a007f7" name="a3e02c558548c1c6178c49adee9a007f7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3e02c558548c1c6178c49adee9a007f7">&#9670;&#160;</a></span>neorv32_slink_check_last()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_slink_check_last </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Check if last RX word has "end-of-stream" delimiter.</p> +<dl class="section note"><dt>Note</dt><dd>This needs has to be called AFTER reading the actual data word using <a class="el" href="#ace319592c12dc6a0fe1b7dd66bdf9284">neorv32_slink_get(void)</a>.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if not end of stream, !=0 if end of stream. </dd></dl> + +</div> +</div> +<a id="ace319592c12dc6a0fe1b7dd66bdf9284" name="ace319592c12dc6a0fe1b7dd66bdf9284"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ace319592c12dc6a0fe1b7dd66bdf9284">&#9670;&#160;</a></span>neorv32_slink_get()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_slink_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Read data from RX link (non-blocking)</p> +<dl class="section return"><dt>Returns</dt><dd>Data received from link. </dd></dl> + +</div> +</div> +<a id="a575c7663ca0bd07c95b1d45152a3ddf8" name="a575c7663ca0bd07c95b1d45152a3ddf8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a575c7663ca0bd07c95b1d45152a3ddf8">&#9670;&#160;</a></span>neorv32_slink_get_rx_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_slink_get_rx_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get FIFO depth of RX link.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth of RX link (1..32768). </dd></dl> + +</div> +</div> +<a id="a1a9269f42552a849450aecd99f7ec7a0" name="a1a9269f42552a849450aecd99f7ec7a0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1a9269f42552a849450aecd99f7ec7a0">&#9670;&#160;</a></span>neorv32_slink_get_src()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_slink_get_src </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Get RX link routing source</p> +<dl class="section note"><dt>Note</dt><dd>This needs has to be called AFTER reading the actual data word using <a class="el" href="#ace319592c12dc6a0fe1b7dd66bdf9284">neorv32_slink_get(void)</a>.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>4-bit source routing ID. </dd></dl> + +</div> +</div> +<a id="aaf0d0d1b890353d4f3bf49450ec2fad2" name="aaf0d0d1b890353d4f3bf49450ec2fad2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aaf0d0d1b890353d4f3bf49450ec2fad2">&#9670;&#160;</a></span>neorv32_slink_get_tx_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_slink_get_tx_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get FIFO depth of TX link.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth of TX link (1..32768). </dd></dl> + +</div> +</div> +<a id="aaa9fdb9cbfa7888e92790ab65431d21d" name="aaa9fdb9cbfa7888e92790ab65431d21d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aaa9fdb9cbfa7888e92790ab65431d21d">&#9670;&#160;</a></span>neorv32_slink_put()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_slink_put </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>tx_data</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Write data to TX link (non-blocking)</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">tx_data</td><td>Data to send to link. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a2136bc0b12ee2e6703e84a6417a1e8eb" name="a2136bc0b12ee2e6703e84a6417a1e8eb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2136bc0b12ee2e6703e84a6417a1e8eb">&#9670;&#160;</a></span>neorv32_slink_put_last()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_slink_put_last </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>tx_data</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Write data to TX link (non-blocking) and set "last" (end-of-stream) delimiter.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">tx_data</td><td>Data to send to link. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ad149fea81e6d28f77450b8ba50cf706e" name="ad149fea81e6d28f77450b8ba50cf706e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad149fea81e6d28f77450b8ba50cf706e">&#9670;&#160;</a></span>neorv32_slink_rx_clear()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_slink_rx_clear </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear RX FIFO. </p> + +</div> +</div> +<a id="ad57fc0941fe32e8bf423ce3e57e2c10a" name="ad57fc0941fe32e8bf423ce3e57e2c10a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad57fc0941fe32e8bf423ce3e57e2c10a">&#9670;&#160;</a></span>neorv32_slink_rx_status()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_slink_rx_status </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get RX link FIFO status.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO status <a class="el" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bf">NEORV32_SLINK_STATUS_enum</a>. </dd></dl> + +</div> +</div> +<a id="ad857d7e78ca2b5eb0d0a4f2c515fe7bc" name="ad857d7e78ca2b5eb0d0a4f2c515fe7bc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad857d7e78ca2b5eb0d0a4f2c515fe7bc">&#9670;&#160;</a></span>neorv32_slink_set_dst()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_slink_set_dst </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>dst</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Set TX link routing destination</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">dst</td><td>Routing destination ID (4-bit, LSB-aligned). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a8f0b4a768f53a72a5c16034e160ce321" name="a8f0b4a768f53a72a5c16034e160ce321"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8f0b4a768f53a72a5c16034e160ce321">&#9670;&#160;</a></span>neorv32_slink_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_slink_setup </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>rx_irq</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>tx_irq</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset, enable and configure SLINK.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rx_irq</td><td>Configure RX interrupt conditions (<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1">NEORV32_SLINK_CTRL_enum</a>). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">tx_irq</td><td>Configure TX interrupt conditions (<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1">NEORV32_SLINK_CTRL_enum</a>). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac7484e9e3848f94efe016dd064f6a57f" name="ac7484e9e3848f94efe016dd064f6a57f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac7484e9e3848f94efe016dd064f6a57f">&#9670;&#160;</a></span>neorv32_slink_tx_clear()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_slink_tx_clear </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear TX FIFO. </p> + +</div> +</div> +<a id="ad0252e7ae915e5840cd17e8c52e94a1c" name="ad0252e7ae915e5840cd17e8c52e94a1c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad0252e7ae915e5840cd17e8c52e94a1c">&#9670;&#160;</a></span>neorv32_slink_tx_status()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_slink_tx_status </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get TX link FIFO status.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO status <a class="el" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bf">NEORV32_SLINK_STATUS_enum</a>. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__slink_8h.html b/sw/neorv32__slink_8h.html new file mode 100644 index 0000000000..a783cb322d --- /dev/null +++ b/sw/neorv32__slink_8h.html @@ -0,0 +1,657 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_slink.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_slink.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Stream Link Interface HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__slink_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__slink__t.html">neorv32_slink_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:aaf0f7bc96b797e819ccaae94292d9ddb" id="r_aaf0f7bc96b797e819ccaae94292d9ddb"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aaf0f7bc96b797e819ccaae94292d9ddb">neorv32_slink_available</a> (void)</td></tr> +<tr class="separator:aaf0f7bc96b797e819ccaae94292d9ddb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8f0b4a768f53a72a5c16034e160ce321" id="r_a8f0b4a768f53a72a5c16034e160ce321"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8f0b4a768f53a72a5c16034e160ce321">neorv32_slink_setup</a> (uint32_t rx_irq, uint32_t tx_irq)</td></tr> +<tr class="separator:a8f0b4a768f53a72a5c16034e160ce321"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad149fea81e6d28f77450b8ba50cf706e" id="r_ad149fea81e6d28f77450b8ba50cf706e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad149fea81e6d28f77450b8ba50cf706e">neorv32_slink_rx_clear</a> (void)</td></tr> +<tr class="separator:ad149fea81e6d28f77450b8ba50cf706e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac7484e9e3848f94efe016dd064f6a57f" id="r_ac7484e9e3848f94efe016dd064f6a57f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac7484e9e3848f94efe016dd064f6a57f">neorv32_slink_tx_clear</a> (void)</td></tr> +<tr class="separator:ac7484e9e3848f94efe016dd064f6a57f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a575c7663ca0bd07c95b1d45152a3ddf8" id="r_a575c7663ca0bd07c95b1d45152a3ddf8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a575c7663ca0bd07c95b1d45152a3ddf8">neorv32_slink_get_rx_fifo_depth</a> (void)</td></tr> +<tr class="separator:a575c7663ca0bd07c95b1d45152a3ddf8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aaf0d0d1b890353d4f3bf49450ec2fad2" id="r_aaf0d0d1b890353d4f3bf49450ec2fad2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aaf0d0d1b890353d4f3bf49450ec2fad2">neorv32_slink_get_tx_fifo_depth</a> (void)</td></tr> +<tr class="separator:aaf0d0d1b890353d4f3bf49450ec2fad2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ace319592c12dc6a0fe1b7dd66bdf9284" id="r_ace319592c12dc6a0fe1b7dd66bdf9284"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ace319592c12dc6a0fe1b7dd66bdf9284">neorv32_slink_get</a> (void)</td></tr> +<tr class="separator:ace319592c12dc6a0fe1b7dd66bdf9284"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3e02c558548c1c6178c49adee9a007f7" id="r_a3e02c558548c1c6178c49adee9a007f7"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3e02c558548c1c6178c49adee9a007f7">neorv32_slink_check_last</a> (void)</td></tr> +<tr class="separator:a3e02c558548c1c6178c49adee9a007f7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad857d7e78ca2b5eb0d0a4f2c515fe7bc" id="r_ad857d7e78ca2b5eb0d0a4f2c515fe7bc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad857d7e78ca2b5eb0d0a4f2c515fe7bc">neorv32_slink_set_dst</a> (uint32_t dst)</td></tr> +<tr class="separator:ad857d7e78ca2b5eb0d0a4f2c515fe7bc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1a9269f42552a849450aecd99f7ec7a0" id="r_a1a9269f42552a849450aecd99f7ec7a0"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1a9269f42552a849450aecd99f7ec7a0">neorv32_slink_get_src</a> (void)</td></tr> +<tr class="separator:a1a9269f42552a849450aecd99f7ec7a0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aaa9fdb9cbfa7888e92790ab65431d21d" id="r_aaa9fdb9cbfa7888e92790ab65431d21d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aaa9fdb9cbfa7888e92790ab65431d21d">neorv32_slink_put</a> (uint32_t tx_data)</td></tr> +<tr class="separator:aaa9fdb9cbfa7888e92790ab65431d21d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2136bc0b12ee2e6703e84a6417a1e8eb" id="r_a2136bc0b12ee2e6703e84a6417a1e8eb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2136bc0b12ee2e6703e84a6417a1e8eb">neorv32_slink_put_last</a> (uint32_t tx_data)</td></tr> +<tr class="separator:a2136bc0b12ee2e6703e84a6417a1e8eb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad57fc0941fe32e8bf423ce3e57e2c10a" id="r_ad57fc0941fe32e8bf423ce3e57e2c10a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad57fc0941fe32e8bf423ce3e57e2c10a">neorv32_slink_rx_status</a> (void)</td></tr> +<tr class="separator:ad57fc0941fe32e8bf423ce3e57e2c10a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad0252e7ae915e5840cd17e8c52e94a1c" id="r_ad0252e7ae915e5840cd17e8c52e94a1c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad0252e7ae915e5840cd17e8c52e94a1c">neorv32_slink_tx_status</a> (void)</td></tr> +<tr class="separator:ad0252e7ae915e5840cd17e8c52e94a1c"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: Stream Link Interface (SLINK)</h2></td></tr> +<tr class="memitem:a6380d894432de119a20993096db534df" id="r_a6380d894432de119a20993096db534df"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6380d894432de119a20993096db534df">NEORV32_SLINK</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__slink__t.html">neorv32_slink_t</a>*) (<a class="el" href="neorv32_8h.html#ab5e6dc57886cd5ed98b86f22fc37d7cc">NEORV32_SLINK_BASE</a>))</td></tr> +<tr class="separator:a6380d894432de119a20993096db534df"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac0385a56c38315d492b3414d98235ef1" id="r_ac0385a56c38315d492b3414d98235ef1"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac0385a56c38315d492b3414d98235ef1">NEORV32_SLINK_CTRL_enum</a> { <br /> +&#160;&#160;<a class="el" href="#ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a">SLINK_CTRL_EN</a> = 0 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b">SLINK_CTRL_RX_CLR</a> = 1 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f">SLINK_CTRL_TX_CLR</a> = 2 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa">SLINK_CTRL_RX_LAST</a> = 4 +, <br /> +&#160;&#160;<a class="el" href="#ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b">SLINK_CTRL_RX_EMPTY</a> = 8 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e">SLINK_CTRL_RX_HALF</a> = 9 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e">SLINK_CTRL_RX_FULL</a> = 10 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854">SLINK_CTRL_TX_EMPTY</a> = 11 +, <br /> +&#160;&#160;<a class="el" href="#ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78">SLINK_CTRL_TX_HALF</a> = 12 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee">SLINK_CTRL_TX_FULL</a> = 13 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854">SLINK_CTRL_IRQ_RX_NEMPTY</a> = 16 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392">SLINK_CTRL_IRQ_RX_HALF</a> = 17 +, <br /> +&#160;&#160;<a class="el" href="#ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309">SLINK_CTRL_IRQ_RX_FULL</a> = 18 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88">SLINK_CTRL_IRQ_TX_EMPTY</a> = 19 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf">SLINK_CTRL_IRQ_TX_NHALF</a> = 20 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa">SLINK_CTRL_IRQ_TX_NFULL</a> = 21 +, <br /> +&#160;&#160;<a class="el" href="#ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c">SLINK_CTRL_RX_FIFO_LSB</a> = 24 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657">SLINK_CTRL_RX_FIFO_MSB</a> = 27 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d">SLINK_CTRL_TX_FIFO_LSB</a> = 28 +, <a class="el" href="#ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943">SLINK_CTRL_TX_FIFO_MSB</a> = 31 +<br /> + }</td></tr> +<tr class="separator:ac0385a56c38315d492b3414d98235ef1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac3e5e02fd89a357135adca6d28cd0e45" id="r_ac3e5e02fd89a357135adca6d28cd0e45"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac3e5e02fd89a357135adca6d28cd0e45">NEORV32_SLINK_ROUTE_enum</a> { <a class="el" href="#ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80">SLINK_ROUTE_DST_LSB</a> = 0 +, <a class="el" href="#ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1">SLINK_ROUTE_DST_MSB</a> = 3 +, <a class="el" href="#ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2">SLINK_ROUTE_SRC_LSB</a> = 4 +, <a class="el" href="#ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983">SLINK_ROUTE_SRC_MSB</a> = 7 + }</td></tr> +<tr class="separator:ac3e5e02fd89a357135adca6d28cd0e45"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a84f7fe82f188bd4e68f41549587822bf" id="r_a84f7fe82f188bd4e68f41549587822bf"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a84f7fe82f188bd4e68f41549587822bf">NEORV32_SLINK_STATUS_enum</a> { <a class="el" href="#a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c">SLINK_FIFO_EMPTY</a> = 0 +, <a class="el" href="#a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9">SLINK_FIFO_HALF</a> = 1 +, <a class="el" href="#a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211">SLINK_FIFO_FULL</a> = 2 + }</td></tr> +<tr class="separator:a84f7fe82f188bd4e68f41549587822bf"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Stream Link Interface HW driver header file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a6380d894432de119a20993096db534df" name="a6380d894432de119a20993096db534df"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6380d894432de119a20993096db534df">&#9670;&#160;</a></span>NEORV32_SLINK</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_SLINK&#160;&#160;&#160;((<a class="el" href="structneorv32__slink__t.html">neorv32_slink_t</a>*) (<a class="el" href="neorv32_8h.html#ab5e6dc57886cd5ed98b86f22fc37d7cc">NEORV32_SLINK_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>SLINK module hardware access (<a class="el" href="structneorv32__slink__t.html">neorv32_slink_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="ac0385a56c38315d492b3414d98235ef1" name="ac0385a56c38315d492b3414d98235ef1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac0385a56c38315d492b3414d98235ef1">&#9670;&#160;</a></span>NEORV32_SLINK_CTRL_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#ac0385a56c38315d492b3414d98235ef1">NEORV32_SLINK_CTRL_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SLINK control register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a" name="ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a"></a>SLINK_CTRL_EN&#160;</td><td class="fielddoc"><p>SLINK control register(0) (r/w): SLINK unit enable </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b" name="ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b"></a>SLINK_CTRL_RX_CLR&#160;</td><td class="fielddoc"><p>SLINK control register(1) (-/w): Clear RX FIFO, auto-clears </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f" name="ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f"></a>SLINK_CTRL_TX_CLR&#160;</td><td class="fielddoc"><p>SLINK control register(2) (-/w): Clear TX FIFO, auto-clears </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa" name="ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa"></a>SLINK_CTRL_RX_LAST&#160;</td><td class="fielddoc"><p>SLINK control register(4) (r/-): RX end-of-stream delimiter </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b" name="ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b"></a>SLINK_CTRL_RX_EMPTY&#160;</td><td class="fielddoc"><p>SLINK control register(8) (r/-): RX FIFO empty </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e" name="ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e"></a>SLINK_CTRL_RX_HALF&#160;</td><td class="fielddoc"><p>SLINK control register(9) (r/-): RX FIFO at least half full </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e" name="ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e"></a>SLINK_CTRL_RX_FULL&#160;</td><td class="fielddoc"><p>SLINK control register(10) (r/-): RX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854" name="ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854"></a>SLINK_CTRL_TX_EMPTY&#160;</td><td class="fielddoc"><p>SLINK control register(11) (r/-): TX FIFO empty </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78" name="ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78"></a>SLINK_CTRL_TX_HALF&#160;</td><td class="fielddoc"><p>SLINK control register(12) (r/-): TX FIFO at least half full </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee" name="ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee"></a>SLINK_CTRL_TX_FULL&#160;</td><td class="fielddoc"><p>SLINK control register(13) (r/-): TX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854" name="ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854"></a>SLINK_CTRL_IRQ_RX_NEMPTY&#160;</td><td class="fielddoc"><p>SLINK control register(16) (r/w): RX interrupt if RX FIFO not empty </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392" name="ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392"></a>SLINK_CTRL_IRQ_RX_HALF&#160;</td><td class="fielddoc"><p>SLINK control register(17) (r/w): RX interrupt if RX FIFO at least half full </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309" name="ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309"></a>SLINK_CTRL_IRQ_RX_FULL&#160;</td><td class="fielddoc"><p>SLINK control register(18) (r/w): RX interrupt if RX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88" name="ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88"></a>SLINK_CTRL_IRQ_TX_EMPTY&#160;</td><td class="fielddoc"><p>SLINK control register(19) (r/w): TX interrupt if TX FIFO empty </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf" name="ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf"></a>SLINK_CTRL_IRQ_TX_NHALF&#160;</td><td class="fielddoc"><p>SLINK control register(20) (r/w): TX interrupt if TX FIFO not at least half full </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa" name="ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa"></a>SLINK_CTRL_IRQ_TX_NFULL&#160;</td><td class="fielddoc"><p>SLINK control register(21) (r/w): TX interrupt if TX FIFO not full </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c" name="ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c"></a>SLINK_CTRL_RX_FIFO_LSB&#160;</td><td class="fielddoc"><p>SLINK control register(24) (r/-): log2(RX FIFO size) LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657" name="ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657"></a>SLINK_CTRL_RX_FIFO_MSB&#160;</td><td class="fielddoc"><p>SLINK control register(27) (r/-): log2(RX FIFO size) MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d" name="ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d"></a>SLINK_CTRL_TX_FIFO_LSB&#160;</td><td class="fielddoc"><p>SLINK control register(28) (r/-): log2(TX FIFO size) LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943" name="ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943"></a>SLINK_CTRL_TX_FIFO_MSB&#160;</td><td class="fielddoc"><p>SLINK control register(31) (r/-): log2(TX FIFO size) MSB </p> +</td></tr> +</table> + +</div> +</div> +<a id="ac3e5e02fd89a357135adca6d28cd0e45" name="ac3e5e02fd89a357135adca6d28cd0e45"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac3e5e02fd89a357135adca6d28cd0e45">&#9670;&#160;</a></span>NEORV32_SLINK_ROUTE_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#ac3e5e02fd89a357135adca6d28cd0e45">NEORV32_SLINK_ROUTE_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>ROUTE register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80" name="ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80"></a>SLINK_ROUTE_DST_LSB&#160;</td><td class="fielddoc"><p>SLINK routing register(0) (r/w): Destination routing information LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1" name="ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1"></a>SLINK_ROUTE_DST_MSB&#160;</td><td class="fielddoc"><p>SLINK routing register(3) (r/w): Destination routing information MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2" name="ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2"></a>SLINK_ROUTE_SRC_LSB&#160;</td><td class="fielddoc"><p>SLINK routing register(4) (r/-): Source routing information LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983" name="ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983"></a>SLINK_ROUTE_SRC_MSB&#160;</td><td class="fielddoc"><p>SLINK routing register(7) (r/-): Source routing information MSB </p> +</td></tr> +</table> + +</div> +</div> +<a id="a84f7fe82f188bd4e68f41549587822bf" name="a84f7fe82f188bd4e68f41549587822bf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a84f7fe82f188bd4e68f41549587822bf">&#9670;&#160;</a></span>NEORV32_SLINK_STATUS_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a84f7fe82f188bd4e68f41549587822bf">NEORV32_SLINK_STATUS_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SLINK module hardware access (<a class="el" href="structneorv32__slink__t.html">neorv32_slink_t</a>) </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c" name="a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c"></a>SLINK_FIFO_EMPTY&#160;</td><td class="fielddoc"><p>FIFO is empty </p> +</td></tr> +<tr><td class="fieldname"><a id="a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9" name="a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9"></a>SLINK_FIFO_HALF&#160;</td><td class="fielddoc"><p>FIFO is at least half full </p> +</td></tr> +<tr><td class="fieldname"><a id="a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211" name="a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211"></a>SLINK_FIFO_FULL&#160;</td><td class="fielddoc"><p>FIFO is full </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="aaf0f7bc96b797e819ccaae94292d9ddb" name="aaf0f7bc96b797e819ccaae94292d9ddb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aaf0f7bc96b797e819ccaae94292d9ddb">&#9670;&#160;</a></span>neorv32_slink_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_slink_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if stream link interface was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if SLINK was not synthesized, 1 if SLINK is available. </dd></dl> + +</div> +</div> +<a id="a3e02c558548c1c6178c49adee9a007f7" name="a3e02c558548c1c6178c49adee9a007f7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3e02c558548c1c6178c49adee9a007f7">&#9670;&#160;</a></span>neorv32_slink_check_last()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_slink_check_last </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Check if last RX word has "end-of-stream" delimiter.</p> +<dl class="section note"><dt>Note</dt><dd>This needs has to be called AFTER reading the actual data word using <a class="el" href="neorv32__slink_8c.html#ace319592c12dc6a0fe1b7dd66bdf9284">neorv32_slink_get(void)</a>.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if not end of stream, !=0 if end of stream. </dd></dl> + +</div> +</div> +<a id="ace319592c12dc6a0fe1b7dd66bdf9284" name="ace319592c12dc6a0fe1b7dd66bdf9284"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ace319592c12dc6a0fe1b7dd66bdf9284">&#9670;&#160;</a></span>neorv32_slink_get()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_slink_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Read data from RX link (non-blocking)</p> +<dl class="section return"><dt>Returns</dt><dd>Data received from link. </dd></dl> + +</div> +</div> +<a id="a575c7663ca0bd07c95b1d45152a3ddf8" name="a575c7663ca0bd07c95b1d45152a3ddf8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a575c7663ca0bd07c95b1d45152a3ddf8">&#9670;&#160;</a></span>neorv32_slink_get_rx_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_slink_get_rx_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get FIFO depth of RX link.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth of RX link (1..32768). </dd></dl> + +</div> +</div> +<a id="a1a9269f42552a849450aecd99f7ec7a0" name="a1a9269f42552a849450aecd99f7ec7a0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1a9269f42552a849450aecd99f7ec7a0">&#9670;&#160;</a></span>neorv32_slink_get_src()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_slink_get_src </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Get RX link routing source</p> +<dl class="section note"><dt>Note</dt><dd>This needs has to be called AFTER reading the actual data word using <a class="el" href="neorv32__slink_8c.html#ace319592c12dc6a0fe1b7dd66bdf9284">neorv32_slink_get(void)</a>.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>4-bit source routing ID. </dd></dl> + +</div> +</div> +<a id="aaf0d0d1b890353d4f3bf49450ec2fad2" name="aaf0d0d1b890353d4f3bf49450ec2fad2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aaf0d0d1b890353d4f3bf49450ec2fad2">&#9670;&#160;</a></span>neorv32_slink_get_tx_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_slink_get_tx_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get FIFO depth of TX link.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth of TX link (1..32768). </dd></dl> + +</div> +</div> +<a id="aaa9fdb9cbfa7888e92790ab65431d21d" name="aaa9fdb9cbfa7888e92790ab65431d21d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aaa9fdb9cbfa7888e92790ab65431d21d">&#9670;&#160;</a></span>neorv32_slink_put()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_slink_put </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>tx_data</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Write data to TX link (non-blocking)</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">tx_data</td><td>Data to send to link. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a2136bc0b12ee2e6703e84a6417a1e8eb" name="a2136bc0b12ee2e6703e84a6417a1e8eb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2136bc0b12ee2e6703e84a6417a1e8eb">&#9670;&#160;</a></span>neorv32_slink_put_last()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_slink_put_last </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>tx_data</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Write data to TX link (non-blocking) and set "last" (end-of-stream) delimiter.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">tx_data</td><td>Data to send to link. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ad149fea81e6d28f77450b8ba50cf706e" name="ad149fea81e6d28f77450b8ba50cf706e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad149fea81e6d28f77450b8ba50cf706e">&#9670;&#160;</a></span>neorv32_slink_rx_clear()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_slink_rx_clear </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear RX FIFO. </p> + +</div> +</div> +<a id="ad57fc0941fe32e8bf423ce3e57e2c10a" name="ad57fc0941fe32e8bf423ce3e57e2c10a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad57fc0941fe32e8bf423ce3e57e2c10a">&#9670;&#160;</a></span>neorv32_slink_rx_status()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_slink_rx_status </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get RX link FIFO status.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO status <a class="el" href="#a84f7fe82f188bd4e68f41549587822bf">NEORV32_SLINK_STATUS_enum</a>. </dd></dl> + +</div> +</div> +<a id="ad857d7e78ca2b5eb0d0a4f2c515fe7bc" name="ad857d7e78ca2b5eb0d0a4f2c515fe7bc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad857d7e78ca2b5eb0d0a4f2c515fe7bc">&#9670;&#160;</a></span>neorv32_slink_set_dst()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_slink_set_dst </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>dst</em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>Set TX link routing destination</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">dst</td><td>Routing destination ID (4-bit, LSB-aligned). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a8f0b4a768f53a72a5c16034e160ce321" name="a8f0b4a768f53a72a5c16034e160ce321"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8f0b4a768f53a72a5c16034e160ce321">&#9670;&#160;</a></span>neorv32_slink_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_slink_setup </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>rx_irq</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>tx_irq</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset, enable and configure SLINK.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">rx_irq</td><td>Configure RX interrupt conditions (<a class="el" href="#ac0385a56c38315d492b3414d98235ef1">NEORV32_SLINK_CTRL_enum</a>). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">tx_irq</td><td>Configure TX interrupt conditions (<a class="el" href="#ac0385a56c38315d492b3414d98235ef1">NEORV32_SLINK_CTRL_enum</a>). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac7484e9e3848f94efe016dd064f6a57f" name="ac7484e9e3848f94efe016dd064f6a57f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac7484e9e3848f94efe016dd064f6a57f">&#9670;&#160;</a></span>neorv32_slink_tx_clear()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_slink_tx_clear </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear TX FIFO. </p> + +</div> +</div> +<a id="ad0252e7ae915e5840cd17e8c52e94a1c" name="ad0252e7ae915e5840cd17e8c52e94a1c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad0252e7ae915e5840cd17e8c52e94a1c">&#9670;&#160;</a></span>neorv32_slink_tx_status()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_slink_tx_status </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get TX link FIFO status.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO status <a class="el" href="#a84f7fe82f188bd4e68f41549587822bf">NEORV32_SLINK_STATUS_enum</a>. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__slink_8h_source.html b/sw/neorv32__slink_8h_source.html new file mode 100644 index 0000000000..b00b4873cd --- /dev/null +++ b/sw/neorv32__slink_8h_source.html @@ -0,0 +1,235 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_slink.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_slink.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__slink_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef neorv32_slink_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define neorv32_slink_h</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00027" data-start="{" data-end="};"> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="structneorv32__slink__t.html"> 27</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="structneorv32__slink__t.html#a39ece6aeeea6982002e164902a1e784f"> 28</a></span> uint32_t <a class="code hl_variable" href="structneorv32__slink__t.html#a39ece6aeeea6982002e164902a1e784f">CTRL</a>; </div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__slink__t.html#a0b2417a1a587da45909ce2a948f90e22"> 29</a></span> uint32_t <a class="code hl_variable" href="structneorv32__slink__t.html#a0b2417a1a587da45909ce2a948f90e22">ROUTE</a>; </div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__slink__t.html#a8af7d4ea9787cf94c599c82133c6aa74"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__slink__t.html#a8af7d4ea9787cf94c599c82133c6aa74">DATA</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__slink__t.html#ada8f10141d2161b83a5a367722ed6a77"> 31</a></span> uint32_t <a class="code hl_variable" href="structneorv32__slink__t.html#ada8f10141d2161b83a5a367722ed6a77">DATA_LAST</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>} <a class="code hl_struct" href="structneorv32__slink__t.html">neorv32_slink_t</a>;</div> +</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#a6380d894432de119a20993096db534df"> 35</a></span><span class="preprocessor">#define NEORV32_SLINK ((neorv32_slink_t*) (NEORV32_SLINK_BASE))</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="foldopen" id="foldopen00038" data-start="{" data-end="};"> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1"> 38</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1">NEORV32_SLINK_CTRL_enum</a> {</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a"> 39</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a">SLINK_CTRL_EN</a> = 0, </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b"> 40</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b">SLINK_CTRL_RX_CLR</a> = 1, </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f">SLINK_CTRL_TX_CLR</a> = 2, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa">SLINK_CTRL_RX_LAST</a> = 4, </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b"> 45</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b">SLINK_CTRL_RX_EMPTY</a> = 8, </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e"> 46</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e">SLINK_CTRL_RX_HALF</a> = 9, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e">SLINK_CTRL_RX_FULL</a> = 10, </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854"> 48</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854">SLINK_CTRL_TX_EMPTY</a> = 11, </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78"> 49</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78">SLINK_CTRL_TX_HALF</a> = 12, </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee"> 50</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee">SLINK_CTRL_TX_FULL</a> = 13, </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854"> 52</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854">SLINK_CTRL_IRQ_RX_NEMPTY</a> = 16, </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392"> 53</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392">SLINK_CTRL_IRQ_RX_HALF</a> = 17, </div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309"> 54</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309">SLINK_CTRL_IRQ_RX_FULL</a> = 18, </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88"> 55</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88">SLINK_CTRL_IRQ_TX_EMPTY</a> = 19, </div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf"> 56</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf">SLINK_CTRL_IRQ_TX_NHALF</a> = 20, </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa"> 57</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa">SLINK_CTRL_IRQ_TX_NFULL</a> = 21, </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c"> 59</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c">SLINK_CTRL_RX_FIFO_LSB</a> = 24, </div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657"> 60</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657">SLINK_CTRL_RX_FIFO_MSB</a> = 27, </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d"> 61</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d">SLINK_CTRL_TX_FIFO_LSB</a> = 28, </div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943">SLINK_CTRL_TX_FIFO_MSB</a> = 31 </div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943"> 63</a></span>};</div> +</div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div> +<div class="foldopen" id="foldopen00066" data-start="{" data-end="};"> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45"> 66</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45">NEORV32_SLINK_ROUTE_enum</a> {</div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80"> 67</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80">SLINK_ROUTE_DST_LSB</a> = 0, </div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1"> 68</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1">SLINK_ROUTE_DST_MSB</a> = 3, </div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2"> 69</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2">SLINK_ROUTE_SRC_LSB</a> = 4, </div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983">SLINK_ROUTE_SRC_MSB</a> = 7 </div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983"> 71</a></span>};</div> +</div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div> +<div class="foldopen" id="foldopen00073" data-start="{" data-end="};"> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bf"> 73</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bf">NEORV32_SLINK_STATUS_enum</a> {</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c"> 74</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c">SLINK_FIFO_EMPTY</a> = 0, </div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9"> 75</a></span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9">SLINK_FIFO_HALF</a> = 1, </div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <a class="code hl_enumvalue" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211">SLINK_FIFO_FULL</a> = 2 </div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211"> 77</a></span>};</div> +</div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__slink_8h.html#aaf0f7bc96b797e819ccaae94292d9ddb">neorv32_slink_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__slink_8h.html#a8f0b4a768f53a72a5c16034e160ce321">neorv32_slink_setup</a>(uint32_t rx_irq, uint32_t tx_irq);</div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__slink_8h.html#ad149fea81e6d28f77450b8ba50cf706e">neorv32_slink_rx_clear</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__slink_8h.html#ac7484e9e3848f94efe016dd064f6a57f">neorv32_slink_tx_clear</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__slink_8h.html#a575c7663ca0bd07c95b1d45152a3ddf8">neorv32_slink_get_rx_fifo_depth</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__slink_8h.html#aaf0d0d1b890353d4f3bf49450ec2fad2">neorv32_slink_get_tx_fifo_depth</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span>uint32_t <a class="code hl_function" href="neorv32__slink_8h.html#ace319592c12dc6a0fe1b7dd66bdf9284">neorv32_slink_get</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span>uint32_t <a class="code hl_function" href="neorv32__slink_8h.html#a3e02c558548c1c6178c49adee9a007f7">neorv32_slink_check_last</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__slink_8h.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc">neorv32_slink_set_dst</a>(uint32_t dst);</div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span>uint32_t <a class="code hl_function" href="neorv32__slink_8h.html#a1a9269f42552a849450aecd99f7ec7a0">neorv32_slink_get_src</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__slink_8h.html#aaa9fdb9cbfa7888e92790ab65431d21d">neorv32_slink_put</a>(uint32_t tx_data);</div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__slink_8h.html#a2136bc0b12ee2e6703e84a6417a1e8eb">neorv32_slink_put_last</a>(uint32_t tx_data);</div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__slink_8h.html#ad57fc0941fe32e8bf423ce3e57e2c10a">neorv32_slink_rx_status</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__slink_8h.html#ad0252e7ae915e5840cd17e8c52e94a1c">neorv32_slink_tx_status</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_slink_h</span></div> +<div class="ttc" id="aneorv32__slink_8h_html_a1a9269f42552a849450aecd99f7ec7a0"><div class="ttname"><a href="neorv32__slink_8h.html#a1a9269f42552a849450aecd99f7ec7a0">neorv32_slink_get_src</a></div><div class="ttdeci">uint32_t neorv32_slink_get_src(void)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:148</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_a2136bc0b12ee2e6703e84a6417a1e8eb"><div class="ttname"><a href="neorv32__slink_8h.html#a2136bc0b12ee2e6703e84a6417a1e8eb">neorv32_slink_put_last</a></div><div class="ttdeci">void neorv32_slink_put_last(uint32_t tx_data)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:171</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_a3e02c558548c1c6178c49adee9a007f7"><div class="ttname"><a href="neorv32__slink_8h.html#a3e02c558548c1c6178c49adee9a007f7">neorv32_slink_check_last</a></div><div class="ttdeci">uint32_t neorv32_slink_check_last(void)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:123</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_a575c7663ca0bd07c95b1d45152a3ddf8"><div class="ttname"><a href="neorv32__slink_8h.html#a575c7663ca0bd07c95b1d45152a3ddf8">neorv32_slink_get_rx_fifo_depth</a></div><div class="ttdeci">int neorv32_slink_get_rx_fifo_depth(void)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:85</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_a84f7fe82f188bd4e68f41549587822bf"><div class="ttname"><a href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bf">NEORV32_SLINK_STATUS_enum</a></div><div class="ttdeci">NEORV32_SLINK_STATUS_enum</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:73</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211"><div class="ttname"><a href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211">SLINK_FIFO_FULL</a></div><div class="ttdeci">@ SLINK_FIFO_FULL</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:76</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c"><div class="ttname"><a href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c">SLINK_FIFO_EMPTY</a></div><div class="ttdeci">@ SLINK_FIFO_EMPTY</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:74</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9"><div class="ttname"><a href="neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9">SLINK_FIFO_HALF</a></div><div class="ttdeci">@ SLINK_FIFO_HALF</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:75</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_a8f0b4a768f53a72a5c16034e160ce321"><div class="ttname"><a href="neorv32__slink_8h.html#a8f0b4a768f53a72a5c16034e160ce321">neorv32_slink_setup</a></div><div class="ttdeci">void neorv32_slink_setup(uint32_t rx_irq, uint32_t tx_irq)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:43</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_aaa9fdb9cbfa7888e92790ab65431d21d"><div class="ttname"><a href="neorv32__slink_8h.html#aaa9fdb9cbfa7888e92790ab65431d21d">neorv32_slink_put</a></div><div class="ttdeci">void neorv32_slink_put(uint32_t tx_data)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:159</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_aaf0d0d1b890353d4f3bf49450ec2fad2"><div class="ttname"><a href="neorv32__slink_8h.html#aaf0d0d1b890353d4f3bf49450ec2fad2">neorv32_slink_get_tx_fifo_depth</a></div><div class="ttdeci">int neorv32_slink_get_tx_fifo_depth(void)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:97</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_aaf0f7bc96b797e819ccaae94292d9ddb"><div class="ttname"><a href="neorv32__slink_8h.html#aaf0f7bc96b797e819ccaae94292d9ddb">neorv32_slink_available</a></div><div class="ttdeci">int neorv32_slink_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:26</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1">NEORV32_SLINK_CTRL_enum</a></div><div class="ttdeci">NEORV32_SLINK_CTRL_enum</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:38</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b">SLINK_CTRL_RX_CLR</a></div><div class="ttdeci">@ SLINK_CTRL_RX_CLR</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:40</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854">SLINK_CTRL_TX_EMPTY</a></div><div class="ttdeci">@ SLINK_CTRL_TX_EMPTY</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:48</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78">SLINK_CTRL_TX_HALF</a></div><div class="ttdeci">@ SLINK_CTRL_TX_HALF</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:49</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854">SLINK_CTRL_IRQ_RX_NEMPTY</a></div><div class="ttdeci">@ SLINK_CTRL_IRQ_RX_NEMPTY</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:52</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa">SLINK_CTRL_RX_LAST</a></div><div class="ttdeci">@ SLINK_CTRL_RX_LAST</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:43</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a">SLINK_CTRL_EN</a></div><div class="ttdeci">@ SLINK_CTRL_EN</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:39</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf">SLINK_CTRL_IRQ_TX_NHALF</a></div><div class="ttdeci">@ SLINK_CTRL_IRQ_TX_NHALF</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:56</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa">SLINK_CTRL_IRQ_TX_NFULL</a></div><div class="ttdeci">@ SLINK_CTRL_IRQ_TX_NFULL</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:57</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657">SLINK_CTRL_RX_FIFO_MSB</a></div><div class="ttdeci">@ SLINK_CTRL_RX_FIFO_MSB</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:60</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c">SLINK_CTRL_RX_FIFO_LSB</a></div><div class="ttdeci">@ SLINK_CTRL_RX_FIFO_LSB</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:59</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e">SLINK_CTRL_RX_FULL</a></div><div class="ttdeci">@ SLINK_CTRL_RX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:47</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d">SLINK_CTRL_TX_FIFO_LSB</a></div><div class="ttdeci">@ SLINK_CTRL_TX_FIFO_LSB</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:61</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309">SLINK_CTRL_IRQ_RX_FULL</a></div><div class="ttdeci">@ SLINK_CTRL_IRQ_RX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:54</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f">SLINK_CTRL_TX_CLR</a></div><div class="ttdeci">@ SLINK_CTRL_TX_CLR</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:41</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88">SLINK_CTRL_IRQ_TX_EMPTY</a></div><div class="ttdeci">@ SLINK_CTRL_IRQ_TX_EMPTY</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:55</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b">SLINK_CTRL_RX_EMPTY</a></div><div class="ttdeci">@ SLINK_CTRL_RX_EMPTY</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:45</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943">SLINK_CTRL_TX_FIFO_MSB</a></div><div class="ttdeci">@ SLINK_CTRL_TX_FIFO_MSB</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:62</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e">SLINK_CTRL_RX_HALF</a></div><div class="ttdeci">@ SLINK_CTRL_RX_HALF</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:46</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee">SLINK_CTRL_TX_FULL</a></div><div class="ttdeci">@ SLINK_CTRL_TX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:50</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392"><div class="ttname"><a href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392">SLINK_CTRL_IRQ_RX_HALF</a></div><div class="ttdeci">@ SLINK_CTRL_IRQ_RX_HALF</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:53</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac3e5e02fd89a357135adca6d28cd0e45"><div class="ttname"><a href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45">NEORV32_SLINK_ROUTE_enum</a></div><div class="ttdeci">NEORV32_SLINK_ROUTE_enum</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:66</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2"><div class="ttname"><a href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2">SLINK_ROUTE_SRC_LSB</a></div><div class="ttdeci">@ SLINK_ROUTE_SRC_LSB</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:69</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983"><div class="ttname"><a href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983">SLINK_ROUTE_SRC_MSB</a></div><div class="ttdeci">@ SLINK_ROUTE_SRC_MSB</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:70</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1"><div class="ttname"><a href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1">SLINK_ROUTE_DST_MSB</a></div><div class="ttdeci">@ SLINK_ROUTE_DST_MSB</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:68</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80"><div class="ttname"><a href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80">SLINK_ROUTE_DST_LSB</a></div><div class="ttdeci">@ SLINK_ROUTE_DST_LSB</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:67</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ac7484e9e3848f94efe016dd064f6a57f"><div class="ttname"><a href="neorv32__slink_8h.html#ac7484e9e3848f94efe016dd064f6a57f">neorv32_slink_tx_clear</a></div><div class="ttdeci">void neorv32_slink_tx_clear(void)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:74</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ace319592c12dc6a0fe1b7dd66bdf9284"><div class="ttname"><a href="neorv32__slink_8h.html#ace319592c12dc6a0fe1b7dd66bdf9284">neorv32_slink_get</a></div><div class="ttdeci">uint32_t neorv32_slink_get(void)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:109</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ad0252e7ae915e5840cd17e8c52e94a1c"><div class="ttname"><a href="neorv32__slink_8h.html#ad0252e7ae915e5840cd17e8c52e94a1c">neorv32_slink_tx_status</a></div><div class="ttdeci">int neorv32_slink_tx_status(void)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:206</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ad149fea81e6d28f77450b8ba50cf706e"><div class="ttname"><a href="neorv32__slink_8h.html#ad149fea81e6d28f77450b8ba50cf706e">neorv32_slink_rx_clear</a></div><div class="ttdeci">void neorv32_slink_rx_clear(void)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:65</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ad57fc0941fe32e8bf423ce3e57e2c10a"><div class="ttname"><a href="neorv32__slink_8h.html#ad57fc0941fe32e8bf423ce3e57e2c10a">neorv32_slink_rx_status</a></div><div class="ttdeci">int neorv32_slink_rx_status(void)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:182</div></div> +<div class="ttc" id="aneorv32__slink_8h_html_ad857d7e78ca2b5eb0d0a4f2c515fe7bc"><div class="ttname"><a href="neorv32__slink_8h.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc">neorv32_slink_set_dst</a></div><div class="ttdeci">void neorv32_slink_set_dst(uint32_t dst)</div><div class="ttdef"><b>Definition</b> neorv32_slink.c:134</div></div> +<div class="ttc" id="astructneorv32__slink__t_html"><div class="ttname"><a href="structneorv32__slink__t.html">neorv32_slink_t</a></div><div class="ttdef"><b>Definition</b> neorv32_slink.h:27</div></div> +<div class="ttc" id="astructneorv32__slink__t_html_a0b2417a1a587da45909ce2a948f90e22"><div class="ttname"><a href="structneorv32__slink__t.html#a0b2417a1a587da45909ce2a948f90e22">neorv32_slink_t::ROUTE</a></div><div class="ttdeci">uint32_t ROUTE</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:29</div></div> +<div class="ttc" id="astructneorv32__slink__t_html_a39ece6aeeea6982002e164902a1e784f"><div class="ttname"><a href="structneorv32__slink__t.html#a39ece6aeeea6982002e164902a1e784f">neorv32_slink_t::CTRL</a></div><div class="ttdeci">uint32_t CTRL</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:28</div></div> +<div class="ttc" id="astructneorv32__slink__t_html_a8af7d4ea9787cf94c599c82133c6aa74"><div class="ttname"><a href="structneorv32__slink__t.html#a8af7d4ea9787cf94c599c82133c6aa74">neorv32_slink_t::DATA</a></div><div class="ttdeci">uint32_t DATA</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:30</div></div> +<div class="ttc" id="astructneorv32__slink__t_html_ada8f10141d2161b83a5a367722ed6a77"><div class="ttname"><a href="structneorv32__slink__t.html#ada8f10141d2161b83a5a367722ed6a77">neorv32_slink_t::DATA_LAST</a></div><div class="ttdeci">uint32_t DATA_LAST</div><div class="ttdef"><b>Definition</b> neorv32_slink.h:31</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__spi_8c.html b/sw/neorv32__spi_8c.html new file mode 100644 index 0000000000..200a24329a --- /dev/null +++ b/sw/neorv32__spi_8c.html @@ -0,0 +1,526 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_spi.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_spi.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Serial peripheral interface controller (SPI) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a7266ee439d0ec11c5cedd4bf1a258272" id="r_a7266ee439d0ec11c5cedd4bf1a258272"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7266ee439d0ec11c5cedd4bf1a258272">neorv32_spi_available</a> (void)</td></tr> +<tr class="separator:a7266ee439d0ec11c5cedd4bf1a258272"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7d8124d986b69210081df6f1aa653552" id="r_a7d8124d986b69210081df6f1aa653552"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7d8124d986b69210081df6f1aa653552">neorv32_spi_setup</a> (int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask)</td></tr> +<tr class="separator:a7d8124d986b69210081df6f1aa653552"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acf131faa3ad970c19a3cd8a47cb54f65" id="r_acf131faa3ad970c19a3cd8a47cb54f65"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acf131faa3ad970c19a3cd8a47cb54f65">neorv32_spi_highspeed_enable</a> (void)</td></tr> +<tr class="separator:acf131faa3ad970c19a3cd8a47cb54f65"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a67e9717635e272bc0e04408135a2f04d" id="r_a67e9717635e272bc0e04408135a2f04d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a67e9717635e272bc0e04408135a2f04d">neorv32_spi_highspeed_disable</a> (void)</td></tr> +<tr class="separator:a67e9717635e272bc0e04408135a2f04d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a01c6b63d7349447e2277f2649c3c89f2" id="r_a01c6b63d7349447e2277f2649c3c89f2"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a01c6b63d7349447e2277f2649c3c89f2">neorv32_spi_get_clock_speed</a> (void)</td></tr> +<tr class="separator:a01c6b63d7349447e2277f2649c3c89f2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a817dd9a38bfceb2048e40874a83ba169" id="r_a817dd9a38bfceb2048e40874a83ba169"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a817dd9a38bfceb2048e40874a83ba169">neorv32_spi_disable</a> (void)</td></tr> +<tr class="separator:a817dd9a38bfceb2048e40874a83ba169"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8fa25d144ccb20a2faf0450c8dddd16e" id="r_a8fa25d144ccb20a2faf0450c8dddd16e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8fa25d144ccb20a2faf0450c8dddd16e">neorv32_spi_enable</a> (void)</td></tr> +<tr class="separator:a8fa25d144ccb20a2faf0450c8dddd16e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae1c4da7e4dc2e42b04d7187f684f142c" id="r_ae1c4da7e4dc2e42b04d7187f684f142c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae1c4da7e4dc2e42b04d7187f684f142c">neorv32_spi_get_fifo_depth</a> (void)</td></tr> +<tr class="separator:ae1c4da7e4dc2e42b04d7187f684f142c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a737961d040ac09567350f89034f9e122" id="r_a737961d040ac09567350f89034f9e122"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a737961d040ac09567350f89034f9e122">neorv32_spi_cs_en</a> (int cs)</td></tr> +<tr class="separator:a737961d040ac09567350f89034f9e122"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa10ec90ccba6325eeeebb8f6f298d30c" id="r_aa10ec90ccba6325eeeebb8f6f298d30c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa10ec90ccba6325eeeebb8f6f298d30c">neorv32_spi_cs_dis</a> (void)</td></tr> +<tr class="separator:aa10ec90ccba6325eeeebb8f6f298d30c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7af79950eefc26e67a89bde02f255532" id="r_a7af79950eefc26e67a89bde02f255532"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7af79950eefc26e67a89bde02f255532">neorv32_spi_trans</a> (uint8_t tx_data)</td></tr> +<tr class="separator:a7af79950eefc26e67a89bde02f255532"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aec8583e988789e846d21c2a35e6b06e7" id="r_aec8583e988789e846d21c2a35e6b06e7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aec8583e988789e846d21c2a35e6b06e7">neorv32_spi_put_nonblocking</a> (uint8_t tx_data)</td></tr> +<tr class="separator:aec8583e988789e846d21c2a35e6b06e7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aad66fa8f8d1a92d4f355de7579bfbfd2" id="r_aad66fa8f8d1a92d4f355de7579bfbfd2"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aad66fa8f8d1a92d4f355de7579bfbfd2">neorv32_spi_get_nonblocking</a> (void)</td></tr> +<tr class="separator:aad66fa8f8d1a92d4f355de7579bfbfd2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a97b5536347a27b053f071ba49071ba6f" id="r_a97b5536347a27b053f071ba49071ba6f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a97b5536347a27b053f071ba49071ba6f">neorv32_spi_cs_en_nonblocking</a> (int cs)</td></tr> +<tr class="separator:a97b5536347a27b053f071ba49071ba6f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad8dd1b5a85a9daef4c8c21c9990884c1" id="r_ad8dd1b5a85a9daef4c8c21c9990884c1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad8dd1b5a85a9daef4c8c21c9990884c1">neorv32_spi_cs_dis_nonblocking</a> (void)</td></tr> +<tr class="separator:ad8dd1b5a85a9daef4c8c21c9990884c1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a82bb4d4c222b2bdc57e917c348481501" id="r_a82bb4d4c222b2bdc57e917c348481501"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a82bb4d4c222b2bdc57e917c348481501">neorv32_spi_check_cs</a> (void)</td></tr> +<tr class="separator:a82bb4d4c222b2bdc57e917c348481501"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a332c7a1be511812ac0a2b102c165398a" id="r_a332c7a1be511812ac0a2b102c165398a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a332c7a1be511812ac0a2b102c165398a">neorv32_spi_busy</a> (void)</td></tr> +<tr class="separator:a332c7a1be511812ac0a2b102c165398a"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Serial peripheral interface controller (SPI) HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the SPI unit was synthesized (IO_SPI_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a7266ee439d0ec11c5cedd4bf1a258272" name="a7266ee439d0ec11c5cedd4bf1a258272"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7266ee439d0ec11c5cedd4bf1a258272">&#9670;&#160;</a></span>neorv32_spi_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_spi_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if SPI unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if SPI was not synthesized, 1 if SPI is available. </dd></dl> + +</div> +</div> +<a id="a332c7a1be511812ac0a2b102c165398a" name="a332c7a1be511812ac0a2b102c165398a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a332c7a1be511812ac0a2b102c165398a">&#9670;&#160;</a></span>neorv32_spi_busy()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_spi_busy </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if SPI transceiver is busy or TX FIFO not empty.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if idle, 1 if busy </dd></dl> + +</div> +</div> +<a id="a82bb4d4c222b2bdc57e917c348481501" name="a82bb4d4c222b2bdc57e917c348481501"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a82bb4d4c222b2bdc57e917c348481501">&#9670;&#160;</a></span>neorv32_spi_check_cs()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_spi_check_cs </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if any chip-select line is active.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if no CS lines are active, 1 if at least one CS line is active. </dd></dl> + +</div> +</div> +<a id="aa10ec90ccba6325eeeebb8f6f298d30c" name="aa10ec90ccba6325eeeebb8f6f298d30c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa10ec90ccba6325eeeebb8f6f298d30c">&#9670;&#160;</a></span>neorv32_spi_cs_dis()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_cs_dis </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Deactivate currently active SPI chip select signal.</p> +<dl class="section note"><dt>Note</dt><dd>The SPI chip select output lines are HIGH when deactivated. </dd> +<dd> +This function is blocking. </dd></dl> + +</div> +</div> +<a id="ad8dd1b5a85a9daef4c8c21c9990884c1" name="ad8dd1b5a85a9daef4c8c21c9990884c1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad8dd1b5a85a9daef4c8c21c9990884c1">&#9670;&#160;</a></span>neorv32_spi_cs_dis_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_cs_dis_nonblocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Deactivate currently active SPI chip select signal (non-blocking).</p> +<dl class="section note"><dt>Note</dt><dd>The SPI chip select output lines are HIGH when deactivated. </dd></dl> + +</div> +</div> +<a id="a737961d040ac09567350f89034f9e122" name="a737961d040ac09567350f89034f9e122"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a737961d040ac09567350f89034f9e122">&#9670;&#160;</a></span>neorv32_spi_cs_en()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_cs_en </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cs</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Activate single SPI chip select signal.</p> +<dl class="section note"><dt>Note</dt><dd>The SPI chip select output lines are LOW when activated. </dd> +<dd> +This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">cs</td><td>Chip select line to activate (0..7). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a97b5536347a27b053f071ba49071ba6f" name="a97b5536347a27b053f071ba49071ba6f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a97b5536347a27b053f071ba49071ba6f">&#9670;&#160;</a></span>neorv32_spi_cs_en_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_cs_en_nonblocking </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cs</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Activate single SPI chip select signal (non-blocking).</p> +<dl class="section note"><dt>Note</dt><dd>The SPI chip select output lines are LOW when activated.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">cs</td><td>Chip select line to activate (0..7). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a817dd9a38bfceb2048e40874a83ba169" name="a817dd9a38bfceb2048e40874a83ba169"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a817dd9a38bfceb2048e40874a83ba169">&#9670;&#160;</a></span>neorv32_spi_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable SPI controller. </p> + +</div> +</div> +<a id="a8fa25d144ccb20a2faf0450c8dddd16e" name="a8fa25d144ccb20a2faf0450c8dddd16e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8fa25d144ccb20a2faf0450c8dddd16e">&#9670;&#160;</a></span>neorv32_spi_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable SPI controller. </p> + +</div> +</div> +<a id="a01c6b63d7349447e2277f2649c3c89f2" name="a01c6b63d7349447e2277f2649c3c89f2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a01c6b63d7349447e2277f2649c3c89f2">&#9670;&#160;</a></span>neorv32_spi_get_clock_speed()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_spi_get_clock_speed </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get configured clock speed in Hz.</p> +<dl class="section return"><dt>Returns</dt><dd>Actual configured SPI clock speed in Hz. </dd></dl> + +</div> +</div> +<a id="ae1c4da7e4dc2e42b04d7187f684f142c" name="ae1c4da7e4dc2e42b04d7187f684f142c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae1c4da7e4dc2e42b04d7187f684f142c">&#9670;&#160;</a></span>neorv32_spi_get_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_spi_get_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get SPI FIFO depth.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries), zero if no FIFO implemented </dd></dl> + +</div> +</div> +<a id="aad66fa8f8d1a92d4f355de7579bfbfd2" name="aad66fa8f8d1a92d4f355de7579bfbfd2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aad66fa8f8d1a92d4f355de7579bfbfd2">&#9670;&#160;</a></span>neorv32_spi_get_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_spi_get_nonblocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get SPI RX data (non-blocking).</p> +<dl class="section return"><dt>Returns</dt><dd>Receive data (8-bit, LSB-aligned). </dd></dl> + +</div> +</div> +<a id="a67e9717635e272bc0e04408135a2f04d" name="a67e9717635e272bc0e04408135a2f04d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a67e9717635e272bc0e04408135a2f04d">&#9670;&#160;</a></span>neorv32_spi_highspeed_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_highspeed_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable high-speed mode. </p> + +</div> +</div> +<a id="acf131faa3ad970c19a3cd8a47cb54f65" name="acf131faa3ad970c19a3cd8a47cb54f65"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acf131faa3ad970c19a3cd8a47cb54f65">&#9670;&#160;</a></span>neorv32_spi_highspeed_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_highspeed_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable high-speed mode. </p> + +</div> +</div> +<a id="aec8583e988789e846d21c2a35e6b06e7" name="aec8583e988789e846d21c2a35e6b06e7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aec8583e988789e846d21c2a35e6b06e7">&#9670;&#160;</a></span>neorv32_spi_put_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_put_nonblocking </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>tx_data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Put SPI TX data (non-blocking).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">tx_data</td><td>Transmit data (8-bit, LSB-aligned). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a7d8124d986b69210081df6f1aa653552" name="a7d8124d986b69210081df6f1aa653552"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7d8124d986b69210081df6f1aa653552">&#9670;&#160;</a></span>neorv32_spi_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_setup </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>prsc</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cdiv</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>clk_phase</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>clk_polarity</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>irq_mask</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable and configure SPI controller. The SPI control register bits are listed in <a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3b">NEORV32_SPI_CTRL_enum</a>.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>Clock prescaler select (0..7). See <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a>. @prama[in] cdiv Clock divider (0..15). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">clk_phase</td><td>Clock phase (0=sample on rising edge, 1=sample on falling edge). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">clk_polarity</td><td>Clock polarity (when idle). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_mask</td><td>Interrupt configuration mask (CTRL's irq_* bits). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a7af79950eefc26e67a89bde02f255532" name="a7af79950eefc26e67a89bde02f255532"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7af79950eefc26e67a89bde02f255532">&#9670;&#160;</a></span>neorv32_spi_trans()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_spi_trans </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>tx_data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Perform a single SPI data transfer.</p> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">tx_data</td><td>Transmit data (8-bit, LSB-aligned). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Receive data (8-bit, LSB-aligned). </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__spi_8h.html b/sw/neorv32__spi_8h.html new file mode 100644 index 0000000000..cab44f8bc7 --- /dev/null +++ b/sw/neorv32__spi_8h.html @@ -0,0 +1,681 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_spi.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_spi.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Serial peripheral interface controller (SPI) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__spi_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__spi__t.html">neorv32_spi_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:a7266ee439d0ec11c5cedd4bf1a258272" id="r_a7266ee439d0ec11c5cedd4bf1a258272"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7266ee439d0ec11c5cedd4bf1a258272">neorv32_spi_available</a> (void)</td></tr> +<tr class="separator:a7266ee439d0ec11c5cedd4bf1a258272"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7d8124d986b69210081df6f1aa653552" id="r_a7d8124d986b69210081df6f1aa653552"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7d8124d986b69210081df6f1aa653552">neorv32_spi_setup</a> (int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask)</td></tr> +<tr class="separator:a7d8124d986b69210081df6f1aa653552"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acf131faa3ad970c19a3cd8a47cb54f65" id="r_acf131faa3ad970c19a3cd8a47cb54f65"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acf131faa3ad970c19a3cd8a47cb54f65">neorv32_spi_highspeed_enable</a> (void)</td></tr> +<tr class="separator:acf131faa3ad970c19a3cd8a47cb54f65"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a67e9717635e272bc0e04408135a2f04d" id="r_a67e9717635e272bc0e04408135a2f04d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a67e9717635e272bc0e04408135a2f04d">neorv32_spi_highspeed_disable</a> (void)</td></tr> +<tr class="separator:a67e9717635e272bc0e04408135a2f04d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a01c6b63d7349447e2277f2649c3c89f2" id="r_a01c6b63d7349447e2277f2649c3c89f2"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a01c6b63d7349447e2277f2649c3c89f2">neorv32_spi_get_clock_speed</a> (void)</td></tr> +<tr class="separator:a01c6b63d7349447e2277f2649c3c89f2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a817dd9a38bfceb2048e40874a83ba169" id="r_a817dd9a38bfceb2048e40874a83ba169"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a817dd9a38bfceb2048e40874a83ba169">neorv32_spi_disable</a> (void)</td></tr> +<tr class="separator:a817dd9a38bfceb2048e40874a83ba169"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8fa25d144ccb20a2faf0450c8dddd16e" id="r_a8fa25d144ccb20a2faf0450c8dddd16e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8fa25d144ccb20a2faf0450c8dddd16e">neorv32_spi_enable</a> (void)</td></tr> +<tr class="separator:a8fa25d144ccb20a2faf0450c8dddd16e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae1c4da7e4dc2e42b04d7187f684f142c" id="r_ae1c4da7e4dc2e42b04d7187f684f142c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae1c4da7e4dc2e42b04d7187f684f142c">neorv32_spi_get_fifo_depth</a> (void)</td></tr> +<tr class="separator:ae1c4da7e4dc2e42b04d7187f684f142c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a737961d040ac09567350f89034f9e122" id="r_a737961d040ac09567350f89034f9e122"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a737961d040ac09567350f89034f9e122">neorv32_spi_cs_en</a> (int cs)</td></tr> +<tr class="separator:a737961d040ac09567350f89034f9e122"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa10ec90ccba6325eeeebb8f6f298d30c" id="r_aa10ec90ccba6325eeeebb8f6f298d30c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa10ec90ccba6325eeeebb8f6f298d30c">neorv32_spi_cs_dis</a> (void)</td></tr> +<tr class="separator:aa10ec90ccba6325eeeebb8f6f298d30c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7af79950eefc26e67a89bde02f255532" id="r_a7af79950eefc26e67a89bde02f255532"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7af79950eefc26e67a89bde02f255532">neorv32_spi_trans</a> (uint8_t tx_data)</td></tr> +<tr class="separator:a7af79950eefc26e67a89bde02f255532"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aec8583e988789e846d21c2a35e6b06e7" id="r_aec8583e988789e846d21c2a35e6b06e7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aec8583e988789e846d21c2a35e6b06e7">neorv32_spi_put_nonblocking</a> (uint8_t tx_data)</td></tr> +<tr class="separator:aec8583e988789e846d21c2a35e6b06e7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aad66fa8f8d1a92d4f355de7579bfbfd2" id="r_aad66fa8f8d1a92d4f355de7579bfbfd2"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aad66fa8f8d1a92d4f355de7579bfbfd2">neorv32_spi_get_nonblocking</a> (void)</td></tr> +<tr class="separator:aad66fa8f8d1a92d4f355de7579bfbfd2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a97b5536347a27b053f071ba49071ba6f" id="r_a97b5536347a27b053f071ba49071ba6f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a97b5536347a27b053f071ba49071ba6f">neorv32_spi_cs_en_nonblocking</a> (int cs)</td></tr> +<tr class="separator:a97b5536347a27b053f071ba49071ba6f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad8dd1b5a85a9daef4c8c21c9990884c1" id="r_ad8dd1b5a85a9daef4c8c21c9990884c1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad8dd1b5a85a9daef4c8c21c9990884c1">neorv32_spi_cs_dis_nonblocking</a> (void)</td></tr> +<tr class="separator:ad8dd1b5a85a9daef4c8c21c9990884c1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a82bb4d4c222b2bdc57e917c348481501" id="r_a82bb4d4c222b2bdc57e917c348481501"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a82bb4d4c222b2bdc57e917c348481501">neorv32_spi_check_cs</a> (void)</td></tr> +<tr class="separator:a82bb4d4c222b2bdc57e917c348481501"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a332c7a1be511812ac0a2b102c165398a" id="r_a332c7a1be511812ac0a2b102c165398a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a332c7a1be511812ac0a2b102c165398a">neorv32_spi_busy</a> (void)</td></tr> +<tr class="separator:a332c7a1be511812ac0a2b102c165398a"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: Serial Peripheral Interface Controller (SPI)</h2></td></tr> +<tr class="memitem:a5f3afc4e268670c54d90df67fa38ca22" id="r_a5f3afc4e268670c54d90df67fa38ca22"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5f3afc4e268670c54d90df67fa38ca22">NEORV32_SPI</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__spi__t.html">neorv32_spi_t</a>*) (<a class="el" href="neorv32_8h.html#aa466dc5eace7351bd438606f0f7475a7">NEORV32_SPI_BASE</a>))</td></tr> +<tr class="separator:a5f3afc4e268670c54d90df67fa38ca22"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae269b2f5b2afd46ae16801762ade2c3b" id="r_ae269b2f5b2afd46ae16801762ade2c3b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3b">NEORV32_SPI_CTRL_enum</a> { <br /> +&#160;&#160;<a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea">SPI_CTRL_EN</a> = 0 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0">SPI_CTRL_CPHA</a> = 1 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315">SPI_CTRL_CPOL</a> = 2 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e">SPI_CTRL_PRSC0</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61">SPI_CTRL_PRSC1</a> = 4 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a">SPI_CTRL_PRSC2</a> = 5 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f">SPI_CTRL_CDIV0</a> = 6 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48">SPI_CTRL_CDIV1</a> = 7 +, <br /> +&#160;&#160;<a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46">SPI_CTRL_CDIV2</a> = 8 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29">SPI_CTRL_CDIV3</a> = 9 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e">SPI_CTRL_HIGHSPEED</a> = 10 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633">SPI_CTRL_RX_AVAIL</a> = 16 +, <br /> +&#160;&#160;<a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6">SPI_CTRL_TX_EMPTY</a> = 17 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4">SPI_CTRL_TX_NHALF</a> = 18 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905">SPI_CTRL_TX_FULL</a> = 19 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0">SPI_CTRL_IRQ_RX_AVAIL</a> = 20 +, <br /> +&#160;&#160;<a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622">SPI_CTRL_IRQ_TX_EMPTY</a> = 21 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b">SPI_CTRL_IRQ_TX_HALF</a> = 22 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2">SPI_CTRL_IRQ_IDLE</a> = 23 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb">SPI_CTRL_FIFO_LSB</a> = 24 +, <br /> +&#160;&#160;<a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed">SPI_CTRL_FIFO_MSB</a> = 27 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580">SPI_CS_ACTIVE</a> = 30 +, <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c">SPI_CTRL_BUSY</a> = 31 +<br /> + }</td></tr> +<tr class="separator:ae269b2f5b2afd46ae16801762ade2c3b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aab478c23898c0b06cee53a1cbda38bf8" id="r_aab478c23898c0b06cee53a1cbda38bf8"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aab478c23898c0b06cee53a1cbda38bf8">NEORV32_SPI_DATA_enum</a> { <a class="el" href="#aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4">SPI_DATA_LSB</a> = 0 +, <a class="el" href="#aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600">SPI_DATA_MSB</a> = 1 +, <a class="el" href="#aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2">SPI_DATA_CSEN</a> = 3 +, <a class="el" href="#aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6">SPI_DATA_CMD</a> = 31 + }</td></tr> +<tr class="separator:aab478c23898c0b06cee53a1cbda38bf8"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Serial peripheral interface controller (SPI) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the SPI unit was synthesized (IO_SPI_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a5f3afc4e268670c54d90df67fa38ca22" name="a5f3afc4e268670c54d90df67fa38ca22"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5f3afc4e268670c54d90df67fa38ca22">&#9670;&#160;</a></span>NEORV32_SPI</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_SPI&#160;&#160;&#160;((<a class="el" href="structneorv32__spi__t.html">neorv32_spi_t</a>*) (<a class="el" href="neorv32_8h.html#aa466dc5eace7351bd438606f0f7475a7">NEORV32_SPI_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI module hardware access (<a class="el" href="structneorv32__spi__t.html">neorv32_spi_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="ae269b2f5b2afd46ae16801762ade2c3b" name="ae269b2f5b2afd46ae16801762ade2c3b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae269b2f5b2afd46ae16801762ade2c3b">&#9670;&#160;</a></span>NEORV32_SPI_CTRL_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3b">NEORV32_SPI_CTRL_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI control register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea" name="ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea"></a>SPI_CTRL_EN&#160;</td><td class="fielddoc"><p>SPI control register(0) (r/w): SPI unit enable </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0" name="ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0"></a>SPI_CTRL_CPHA&#160;</td><td class="fielddoc"><p>SPI control register(1) (r/w): Clock phase </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315" name="ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315"></a>SPI_CTRL_CPOL&#160;</td><td class="fielddoc"><p>SPI control register(2) (r/w): Clock polarity </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e" name="ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e"></a>SPI_CTRL_PRSC0&#160;</td><td class="fielddoc"><p>SPI control register(3) (r/w): Clock prescaler select bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61" name="ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61"></a>SPI_CTRL_PRSC1&#160;</td><td class="fielddoc"><p>SPI control register(4) (r/w): Clock prescaler select bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a" name="ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a"></a>SPI_CTRL_PRSC2&#160;</td><td class="fielddoc"><p>SPI control register(5) (r/w): Clock prescaler select bit 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f" name="ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f"></a>SPI_CTRL_CDIV0&#160;</td><td class="fielddoc"><p>SPI control register(6) (r/w): Clock divider bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48" name="ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48"></a>SPI_CTRL_CDIV1&#160;</td><td class="fielddoc"><p>SPI control register(7) (r/w): Clock divider bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46" name="ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46"></a>SPI_CTRL_CDIV2&#160;</td><td class="fielddoc"><p>SPI control register(8) (r/w): Clock divider bit 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29" name="ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29"></a>SPI_CTRL_CDIV3&#160;</td><td class="fielddoc"><p>SPI control register(9) (r/w): Clock divider bit 3 </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e" name="ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e"></a>SPI_CTRL_HIGHSPEED&#160;</td><td class="fielddoc"><p>SPI control register(10) (r/w): High-speed mode </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633" name="ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633"></a>SPI_CTRL_RX_AVAIL&#160;</td><td class="fielddoc"><p>SPI control register(16) (r/-): RX FIFO data available (RX FIFO not empty) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6" name="ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6"></a>SPI_CTRL_TX_EMPTY&#160;</td><td class="fielddoc"><p>SPI control register(17) (r/-): TX FIFO empty </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4" name="ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4"></a>SPI_CTRL_TX_NHALF&#160;</td><td class="fielddoc"><p>SPI control register(18) (r/-): TX FIFO not at least half full </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905" name="ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905"></a>SPI_CTRL_TX_FULL&#160;</td><td class="fielddoc"><p>SPI control register(19) (r/-): TX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0" name="ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0"></a>SPI_CTRL_IRQ_RX_AVAIL&#160;</td><td class="fielddoc"><p>SPI control register(20) (r/w): Fire IRQ if RX FIFO data available (RX FIFO not empty) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622" name="ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622"></a>SPI_CTRL_IRQ_TX_EMPTY&#160;</td><td class="fielddoc"><p>SPI control register(21) (r/w): Fire IRQ if TX FIFO empty </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b" name="ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b"></a>SPI_CTRL_IRQ_TX_HALF&#160;</td><td class="fielddoc"><p>SPI control register(22) (r/w): Fire IRQ if TX FIFO not at least half full </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2" name="ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2"></a>SPI_CTRL_IRQ_IDLE&#160;</td><td class="fielddoc"><p>SPI control register(23) (r/w): Fire IRQ if TX FIFO is empty and SPI bus engine is idle </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb" name="ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb"></a>SPI_CTRL_FIFO_LSB&#160;</td><td class="fielddoc"><p>SPI control register(24) (r/-): log2(FIFO size), lsb </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed" name="ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed"></a>SPI_CTRL_FIFO_MSB&#160;</td><td class="fielddoc"><p>SPI control register(27) (r/-): log2(FIFO size), msb </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580" name="ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580"></a>SPI_CS_ACTIVE&#160;</td><td class="fielddoc"><p>SPI control register(30) (r/-): At least one CS line is active when set </p> +</td></tr> +<tr><td class="fieldname"><a id="ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c" name="ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c"></a>SPI_CTRL_BUSY&#160;</td><td class="fielddoc"><p>SPI control register(31) (r/-): SPI busy flag </p> +</td></tr> +</table> + +</div> +</div> +<a id="aab478c23898c0b06cee53a1cbda38bf8" name="aab478c23898c0b06cee53a1cbda38bf8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aab478c23898c0b06cee53a1cbda38bf8">&#9670;&#160;</a></span>NEORV32_SPI_DATA_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#aab478c23898c0b06cee53a1cbda38bf8">NEORV32_SPI_DATA_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI data register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4" name="aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4"></a>SPI_DATA_LSB&#160;</td><td class="fielddoc"><p>SPI data register(0) (r/w): Data byte LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600" name="aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600"></a>SPI_DATA_MSB&#160;</td><td class="fielddoc"><p>SPI data register(1) (r/w): Data byte LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2" name="aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2"></a>SPI_DATA_CSEN&#160;</td><td class="fielddoc"><p>SPI data register(3) (-/w): Chip select enable (command-mode only) </p> +</td></tr> +<tr><td class="fieldname"><a id="aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6" name="aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6"></a>SPI_DATA_CMD&#160;</td><td class="fielddoc"><p>SPI data register(31) (-/w): Command (=1) / data (=0) select </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a7266ee439d0ec11c5cedd4bf1a258272" name="a7266ee439d0ec11c5cedd4bf1a258272"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7266ee439d0ec11c5cedd4bf1a258272">&#9670;&#160;</a></span>neorv32_spi_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_spi_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if SPI unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if SPI was not synthesized, 1 if SPI is available. </dd></dl> + +</div> +</div> +<a id="a332c7a1be511812ac0a2b102c165398a" name="a332c7a1be511812ac0a2b102c165398a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a332c7a1be511812ac0a2b102c165398a">&#9670;&#160;</a></span>neorv32_spi_busy()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_spi_busy </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if SPI transceiver is busy or TX FIFO not empty.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if idle, 1 if busy </dd></dl> + +</div> +</div> +<a id="a82bb4d4c222b2bdc57e917c348481501" name="a82bb4d4c222b2bdc57e917c348481501"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a82bb4d4c222b2bdc57e917c348481501">&#9670;&#160;</a></span>neorv32_spi_check_cs()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_spi_check_cs </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if any chip-select line is active.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if no CS lines are active, 1 if at least one CS line is active. </dd></dl> + +</div> +</div> +<a id="aa10ec90ccba6325eeeebb8f6f298d30c" name="aa10ec90ccba6325eeeebb8f6f298d30c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa10ec90ccba6325eeeebb8f6f298d30c">&#9670;&#160;</a></span>neorv32_spi_cs_dis()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_cs_dis </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Deactivate currently active SPI chip select signal.</p> +<dl class="section note"><dt>Note</dt><dd>The SPI chip select output lines are HIGH when deactivated. </dd> +<dd> +This function is blocking. </dd></dl> + +</div> +</div> +<a id="ad8dd1b5a85a9daef4c8c21c9990884c1" name="ad8dd1b5a85a9daef4c8c21c9990884c1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad8dd1b5a85a9daef4c8c21c9990884c1">&#9670;&#160;</a></span>neorv32_spi_cs_dis_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_cs_dis_nonblocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Deactivate currently active SPI chip select signal (non-blocking).</p> +<dl class="section note"><dt>Note</dt><dd>The SPI chip select output lines are HIGH when deactivated. </dd></dl> + +</div> +</div> +<a id="a737961d040ac09567350f89034f9e122" name="a737961d040ac09567350f89034f9e122"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a737961d040ac09567350f89034f9e122">&#9670;&#160;</a></span>neorv32_spi_cs_en()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_cs_en </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cs</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Activate single SPI chip select signal.</p> +<dl class="section note"><dt>Note</dt><dd>The SPI chip select output lines are LOW when activated. </dd> +<dd> +This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">cs</td><td>Chip select line to activate (0..7). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a97b5536347a27b053f071ba49071ba6f" name="a97b5536347a27b053f071ba49071ba6f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a97b5536347a27b053f071ba49071ba6f">&#9670;&#160;</a></span>neorv32_spi_cs_en_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_cs_en_nonblocking </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cs</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Activate single SPI chip select signal (non-blocking).</p> +<dl class="section note"><dt>Note</dt><dd>The SPI chip select output lines are LOW when activated.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">cs</td><td>Chip select line to activate (0..7). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a817dd9a38bfceb2048e40874a83ba169" name="a817dd9a38bfceb2048e40874a83ba169"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a817dd9a38bfceb2048e40874a83ba169">&#9670;&#160;</a></span>neorv32_spi_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable SPI controller. </p> + +</div> +</div> +<a id="a8fa25d144ccb20a2faf0450c8dddd16e" name="a8fa25d144ccb20a2faf0450c8dddd16e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8fa25d144ccb20a2faf0450c8dddd16e">&#9670;&#160;</a></span>neorv32_spi_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable SPI controller. </p> + +</div> +</div> +<a id="a01c6b63d7349447e2277f2649c3c89f2" name="a01c6b63d7349447e2277f2649c3c89f2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a01c6b63d7349447e2277f2649c3c89f2">&#9670;&#160;</a></span>neorv32_spi_get_clock_speed()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_spi_get_clock_speed </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get configured clock speed in Hz.</p> +<dl class="section return"><dt>Returns</dt><dd>Actual configured SPI clock speed in Hz. </dd></dl> + +</div> +</div> +<a id="ae1c4da7e4dc2e42b04d7187f684f142c" name="ae1c4da7e4dc2e42b04d7187f684f142c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae1c4da7e4dc2e42b04d7187f684f142c">&#9670;&#160;</a></span>neorv32_spi_get_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_spi_get_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get SPI FIFO depth.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries), zero if no FIFO implemented </dd></dl> + +</div> +</div> +<a id="aad66fa8f8d1a92d4f355de7579bfbfd2" name="aad66fa8f8d1a92d4f355de7579bfbfd2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aad66fa8f8d1a92d4f355de7579bfbfd2">&#9670;&#160;</a></span>neorv32_spi_get_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_spi_get_nonblocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get SPI RX data (non-blocking).</p> +<dl class="section return"><dt>Returns</dt><dd>Receive data (8-bit, LSB-aligned). </dd></dl> + +</div> +</div> +<a id="a67e9717635e272bc0e04408135a2f04d" name="a67e9717635e272bc0e04408135a2f04d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a67e9717635e272bc0e04408135a2f04d">&#9670;&#160;</a></span>neorv32_spi_highspeed_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_highspeed_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable high-speed mode. </p> + +</div> +</div> +<a id="acf131faa3ad970c19a3cd8a47cb54f65" name="acf131faa3ad970c19a3cd8a47cb54f65"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acf131faa3ad970c19a3cd8a47cb54f65">&#9670;&#160;</a></span>neorv32_spi_highspeed_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_highspeed_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable high-speed mode. </p> + +</div> +</div> +<a id="aec8583e988789e846d21c2a35e6b06e7" name="aec8583e988789e846d21c2a35e6b06e7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aec8583e988789e846d21c2a35e6b06e7">&#9670;&#160;</a></span>neorv32_spi_put_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_put_nonblocking </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>tx_data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Put SPI TX data (non-blocking).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">tx_data</td><td>Transmit data (8-bit, LSB-aligned). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a7d8124d986b69210081df6f1aa653552" name="a7d8124d986b69210081df6f1aa653552"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7d8124d986b69210081df6f1aa653552">&#9670;&#160;</a></span>neorv32_spi_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_setup </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>prsc</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cdiv</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>clk_phase</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>clk_polarity</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>irq_mask</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable and configure SPI controller. The SPI control register bits are listed in <a class="el" href="#ae269b2f5b2afd46ae16801762ade2c3b">NEORV32_SPI_CTRL_enum</a>.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>Clock prescaler select (0..7). See <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a>. @prama[in] cdiv Clock divider (0..15). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">clk_phase</td><td>Clock phase (0=sample on rising edge, 1=sample on falling edge). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">clk_polarity</td><td>Clock polarity (when idle). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_mask</td><td>Interrupt configuration mask (CTRL's irq_* bits). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a7af79950eefc26e67a89bde02f255532" name="a7af79950eefc26e67a89bde02f255532"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7af79950eefc26e67a89bde02f255532">&#9670;&#160;</a></span>neorv32_spi_trans()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_spi_trans </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>tx_data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Perform a single SPI data transfer.</p> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">tx_data</td><td>Transmit data (8-bit, LSB-aligned). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Receive data (8-bit, LSB-aligned). </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__spi_8h_source.html b/sw/neorv32__spi_8h_source.html new file mode 100644 index 0000000000..0999229410 --- /dev/null +++ b/sw/neorv32__spi_8h_source.html @@ -0,0 +1,231 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_spi.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_spi.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__spi_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_spi_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_spi_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__spi__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__spi__t.html#a34fa748f0e3ceb75822c0a5553bd0420"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__spi__t.html#a34fa748f0e3ceb75822c0a5553bd0420">CTRL</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__spi__t.html#a3901bad351213e34820197a33d589f1e"> 31</a></span> uint32_t <a class="code hl_variable" href="structneorv32__spi__t.html#a3901bad351213e34820197a33d589f1e">DATA</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>} <a class="code hl_struct" href="structneorv32__spi__t.html">neorv32_spi_t</a>;</div> +</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#a5f3afc4e268670c54d90df67fa38ca22"> 35</a></span><span class="preprocessor">#define NEORV32_SPI ((neorv32_spi_t*) (NEORV32_SPI_BASE))</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="foldopen" id="foldopen00038" data-start="{" data-end="};"> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3b"> 38</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3b">NEORV32_SPI_CTRL_enum</a> {</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea"> 39</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea">SPI_CTRL_EN</a> = 0, </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0"> 40</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0">SPI_CTRL_CPHA</a> = 1, </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315">SPI_CTRL_CPOL</a> = 2, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e">SPI_CTRL_PRSC0</a> = 3, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61">SPI_CTRL_PRSC1</a> = 4, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a"> 44</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a">SPI_CTRL_PRSC2</a> = 5, </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f"> 45</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f">SPI_CTRL_CDIV0</a> = 6, </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48"> 46</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48">SPI_CTRL_CDIV1</a> = 7, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46">SPI_CTRL_CDIV2</a> = 8, </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29"> 48</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29">SPI_CTRL_CDIV3</a> = 9, </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e"> 49</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e">SPI_CTRL_HIGHSPEED</a> = 10, </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633"> 51</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633">SPI_CTRL_RX_AVAIL</a> = 16, </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6"> 52</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6">SPI_CTRL_TX_EMPTY</a> = 17, </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4"> 53</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4">SPI_CTRL_TX_NHALF</a> = 18, </div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905"> 54</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905">SPI_CTRL_TX_FULL</a> = 19, </div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0"> 56</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0">SPI_CTRL_IRQ_RX_AVAIL</a> = 20, </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622"> 57</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622">SPI_CTRL_IRQ_TX_EMPTY</a> = 21, </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b"> 58</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b">SPI_CTRL_IRQ_TX_HALF</a> = 22, </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2"> 59</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2">SPI_CTRL_IRQ_IDLE</a> = 23, </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb"> 61</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb">SPI_CTRL_FIFO_LSB</a> = 24, </div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed"> 62</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed">SPI_CTRL_FIFO_MSB</a> = 27, </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580"> 64</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580">SPI_CS_ACTIVE</a> = 30, </div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c">SPI_CTRL_BUSY</a> = 31 </div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c"> 66</a></span>};</div> +</div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div> +<div class="foldopen" id="foldopen00069" data-start="{" data-end="};"> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8"> 69</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8">NEORV32_SPI_DATA_enum</a> {</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4"> 70</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4">SPI_DATA_LSB</a> = 0, </div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600"> 71</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600">SPI_DATA_MSB</a> = 1, </div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2"> 72</a></span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2">SPI_DATA_CSEN</a> = 3, </div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_enumvalue" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6">SPI_DATA_CMD</a> = 31 </div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6"> 74</a></span>};</div> +</div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__spi_8h.html#a7266ee439d0ec11c5cedd4bf1a258272">neorv32_spi_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__spi_8h.html#a7d8124d986b69210081df6f1aa653552">neorv32_spi_setup</a>(<span class="keywordtype">int</span> prsc, <span class="keywordtype">int</span> cdiv, <span class="keywordtype">int</span> clk_phase, <span class="keywordtype">int</span> clk_polarity, uint32_t irq_mask);</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__spi_8h.html#acf131faa3ad970c19a3cd8a47cb54f65">neorv32_spi_highspeed_enable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__spi_8h.html#a67e9717635e272bc0e04408135a2f04d">neorv32_spi_highspeed_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span>uint32_t <a class="code hl_function" href="neorv32__spi_8h.html#a01c6b63d7349447e2277f2649c3c89f2">neorv32_spi_get_clock_speed</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__spi_8h.html#a817dd9a38bfceb2048e40874a83ba169">neorv32_spi_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__spi_8h.html#a8fa25d144ccb20a2faf0450c8dddd16e">neorv32_spi_enable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__spi_8h.html#ae1c4da7e4dc2e42b04d7187f684f142c">neorv32_spi_get_fifo_depth</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__spi_8h.html#a737961d040ac09567350f89034f9e122">neorv32_spi_cs_en</a>(<span class="keywordtype">int</span> cs);</div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__spi_8h.html#aa10ec90ccba6325eeeebb8f6f298d30c">neorv32_spi_cs_dis</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span>uint8_t <a class="code hl_function" href="neorv32__spi_8h.html#a7af79950eefc26e67a89bde02f255532">neorv32_spi_trans</a>(uint8_t tx_data);</div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__spi_8h.html#aec8583e988789e846d21c2a35e6b06e7">neorv32_spi_put_nonblocking</a>(uint8_t tx_data);</div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span>uint8_t <a class="code hl_function" href="neorv32__spi_8h.html#aad66fa8f8d1a92d4f355de7579bfbfd2">neorv32_spi_get_nonblocking</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__spi_8h.html#a97b5536347a27b053f071ba49071ba6f">neorv32_spi_cs_en_nonblocking</a>(<span class="keywordtype">int</span> cs);</div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__spi_8h.html#ad8dd1b5a85a9daef4c8c21c9990884c1">neorv32_spi_cs_dis_nonblocking</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__spi_8h.html#a82bb4d4c222b2bdc57e917c348481501">neorv32_spi_check_cs</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__spi_8h.html#a332c7a1be511812ac0a2b102c165398a">neorv32_spi_busy</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_spi_h</span></div> +<div class="ttc" id="aneorv32__spi_8h_html_a01c6b63d7349447e2277f2649c3c89f2"><div class="ttname"><a href="neorv32__spi_8h.html#a01c6b63d7349447e2277f2649c3c89f2">neorv32_spi_get_clock_speed</a></div><div class="ttdeci">uint32_t neorv32_spi_get_clock_speed(void)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:85</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_a332c7a1be511812ac0a2b102c165398a"><div class="ttname"><a href="neorv32__spi_8h.html#a332c7a1be511812ac0a2b102c165398a">neorv32_spi_busy</a></div><div class="ttdeci">int neorv32_spi_busy(void)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:247</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_a67e9717635e272bc0e04408135a2f04d"><div class="ttname"><a href="neorv32__spi_8h.html#a67e9717635e272bc0e04408135a2f04d">neorv32_spi_highspeed_disable</a></div><div class="ttdeci">void neorv32_spi_highspeed_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:74</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_a7266ee439d0ec11c5cedd4bf1a258272"><div class="ttname"><a href="neorv32__spi_8h.html#a7266ee439d0ec11c5cedd4bf1a258272">neorv32_spi_available</a></div><div class="ttdeci">int neorv32_spi_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:26</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_a737961d040ac09567350f89034f9e122"><div class="ttname"><a href="neorv32__spi_8h.html#a737961d040ac09567350f89034f9e122">neorv32_spi_cs_en</a></div><div class="ttdeci">void neorv32_spi_cs_en(int cs)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:144</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_a7af79950eefc26e67a89bde02f255532"><div class="ttname"><a href="neorv32__spi_8h.html#a7af79950eefc26e67a89bde02f255532">neorv32_spi_trans</a></div><div class="ttdeci">uint8_t neorv32_spi_trans(uint8_t tx_data)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:172</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_a7d8124d986b69210081df6f1aa653552"><div class="ttname"><a href="neorv32__spi_8h.html#a7d8124d986b69210081df6f1aa653552">neorv32_spi_setup</a></div><div class="ttdeci">void neorv32_spi_setup(int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:46</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_a817dd9a38bfceb2048e40874a83ba169"><div class="ttname"><a href="neorv32__spi_8h.html#a817dd9a38bfceb2048e40874a83ba169">neorv32_spi_disable</a></div><div class="ttdeci">void neorv32_spi_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:109</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_a82bb4d4c222b2bdc57e917c348481501"><div class="ttname"><a href="neorv32__spi_8h.html#a82bb4d4c222b2bdc57e917c348481501">neorv32_spi_check_cs</a></div><div class="ttdeci">int neorv32_spi_check_cs(void)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:231</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_a8fa25d144ccb20a2faf0450c8dddd16e"><div class="ttname"><a href="neorv32__spi_8h.html#a8fa25d144ccb20a2faf0450c8dddd16e">neorv32_spi_enable</a></div><div class="ttdeci">void neorv32_spi_enable(void)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:118</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_a97b5536347a27b053f071ba49071ba6f"><div class="ttname"><a href="neorv32__spi_8h.html#a97b5536347a27b053f071ba49071ba6f">neorv32_spi_cs_en_nonblocking</a></div><div class="ttdeci">void neorv32_spi_cs_en_nonblocking(int cs)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:209</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_aa10ec90ccba6325eeeebb8f6f298d30c"><div class="ttname"><a href="neorv32__spi_8h.html#aa10ec90ccba6325eeeebb8f6f298d30c">neorv32_spi_cs_dis</a></div><div class="ttdeci">void neorv32_spi_cs_dis(void)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:157</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_aab478c23898c0b06cee53a1cbda38bf8"><div class="ttname"><a href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8">NEORV32_SPI_DATA_enum</a></div><div class="ttdeci">NEORV32_SPI_DATA_enum</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:69</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600"><div class="ttname"><a href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600">SPI_DATA_MSB</a></div><div class="ttdeci">@ SPI_DATA_MSB</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:71</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2"><div class="ttname"><a href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2">SPI_DATA_CSEN</a></div><div class="ttdeci">@ SPI_DATA_CSEN</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:72</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6"><div class="ttname"><a href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6">SPI_DATA_CMD</a></div><div class="ttdeci">@ SPI_DATA_CMD</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:73</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4"><div class="ttname"><a href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4">SPI_DATA_LSB</a></div><div class="ttdeci">@ SPI_DATA_LSB</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:70</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_aad66fa8f8d1a92d4f355de7579bfbfd2"><div class="ttname"><a href="neorv32__spi_8h.html#aad66fa8f8d1a92d4f355de7579bfbfd2">neorv32_spi_get_nonblocking</a></div><div class="ttdeci">uint8_t neorv32_spi_get_nonblocking(void)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:196</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_acf131faa3ad970c19a3cd8a47cb54f65"><div class="ttname"><a href="neorv32__spi_8h.html#acf131faa3ad970c19a3cd8a47cb54f65">neorv32_spi_highspeed_enable</a></div><div class="ttdeci">void neorv32_spi_highspeed_enable(void)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:65</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ad8dd1b5a85a9daef4c8c21c9990884c1"><div class="ttname"><a href="neorv32__spi_8h.html#ad8dd1b5a85a9daef4c8c21c9990884c1">neorv32_spi_cs_dis_nonblocking</a></div><div class="ttdeci">void neorv32_spi_cs_dis_nonblocking(void)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:220</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae1c4da7e4dc2e42b04d7187f684f142c"><div class="ttname"><a href="neorv32__spi_8h.html#ae1c4da7e4dc2e42b04d7187f684f142c">neorv32_spi_get_fifo_depth</a></div><div class="ttdeci">int neorv32_spi_get_fifo_depth(void)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:129</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3b"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3b">NEORV32_SPI_CTRL_enum</a></div><div class="ttdeci">NEORV32_SPI_CTRL_enum</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:38</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48">SPI_CTRL_CDIV1</a></div><div class="ttdeci">@ SPI_CTRL_CDIV1</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:46</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633">SPI_CTRL_RX_AVAIL</a></div><div class="ttdeci">@ SPI_CTRL_RX_AVAIL</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:51</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb">SPI_CTRL_FIFO_LSB</a></div><div class="ttdeci">@ SPI_CTRL_FIFO_LSB</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:61</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0">SPI_CTRL_IRQ_RX_AVAIL</a></div><div class="ttdeci">@ SPI_CTRL_IRQ_RX_AVAIL</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:56</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2">SPI_CTRL_IRQ_IDLE</a></div><div class="ttdeci">@ SPI_CTRL_IRQ_IDLE</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:59</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6">SPI_CTRL_TX_EMPTY</a></div><div class="ttdeci">@ SPI_CTRL_TX_EMPTY</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:52</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61">SPI_CTRL_PRSC1</a></div><div class="ttdeci">@ SPI_CTRL_PRSC1</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:43</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0">SPI_CTRL_CPHA</a></div><div class="ttdeci">@ SPI_CTRL_CPHA</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:40</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580">SPI_CS_ACTIVE</a></div><div class="ttdeci">@ SPI_CS_ACTIVE</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:64</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4">SPI_CTRL_TX_NHALF</a></div><div class="ttdeci">@ SPI_CTRL_TX_NHALF</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:53</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea">SPI_CTRL_EN</a></div><div class="ttdeci">@ SPI_CTRL_EN</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:39</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315">SPI_CTRL_CPOL</a></div><div class="ttdeci">@ SPI_CTRL_CPOL</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:41</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c">SPI_CTRL_BUSY</a></div><div class="ttdeci">@ SPI_CTRL_BUSY</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:65</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a">SPI_CTRL_PRSC2</a></div><div class="ttdeci">@ SPI_CTRL_PRSC2</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:44</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29">SPI_CTRL_CDIV3</a></div><div class="ttdeci">@ SPI_CTRL_CDIV3</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:48</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed">SPI_CTRL_FIFO_MSB</a></div><div class="ttdeci">@ SPI_CTRL_FIFO_MSB</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:62</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b">SPI_CTRL_IRQ_TX_HALF</a></div><div class="ttdeci">@ SPI_CTRL_IRQ_TX_HALF</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:58</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905">SPI_CTRL_TX_FULL</a></div><div class="ttdeci">@ SPI_CTRL_TX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:54</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46">SPI_CTRL_CDIV2</a></div><div class="ttdeci">@ SPI_CTRL_CDIV2</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:47</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e">SPI_CTRL_PRSC0</a></div><div class="ttdeci">@ SPI_CTRL_PRSC0</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:42</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e">SPI_CTRL_HIGHSPEED</a></div><div class="ttdeci">@ SPI_CTRL_HIGHSPEED</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:49</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f">SPI_CTRL_CDIV0</a></div><div class="ttdeci">@ SPI_CTRL_CDIV0</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:45</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622"><div class="ttname"><a href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622">SPI_CTRL_IRQ_TX_EMPTY</a></div><div class="ttdeci">@ SPI_CTRL_IRQ_TX_EMPTY</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:57</div></div> +<div class="ttc" id="aneorv32__spi_8h_html_aec8583e988789e846d21c2a35e6b06e7"><div class="ttname"><a href="neorv32__spi_8h.html#aec8583e988789e846d21c2a35e6b06e7">neorv32_spi_put_nonblocking</a></div><div class="ttdeci">void neorv32_spi_put_nonblocking(uint8_t tx_data)</div><div class="ttdef"><b>Definition</b> neorv32_spi.c:185</div></div> +<div class="ttc" id="astructneorv32__spi__t_html"><div class="ttname"><a href="structneorv32__spi__t.html">neorv32_spi_t</a></div><div class="ttdef"><b>Definition</b> neorv32_spi.h:29</div></div> +<div class="ttc" id="astructneorv32__spi__t_html_a34fa748f0e3ceb75822c0a5553bd0420"><div class="ttname"><a href="structneorv32__spi__t.html#a34fa748f0e3ceb75822c0a5553bd0420">neorv32_spi_t::CTRL</a></div><div class="ttdeci">uint32_t CTRL</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:30</div></div> +<div class="ttc" id="astructneorv32__spi__t_html_a3901bad351213e34820197a33d589f1e"><div class="ttname"><a href="structneorv32__spi__t.html#a3901bad351213e34820197a33d589f1e">neorv32_spi_t::DATA</a></div><div class="ttdeci">uint32_t DATA</div><div class="ttdef"><b>Definition</b> neorv32_spi.h:31</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__spi__irq_8c.html b/sw/neorv32__spi__irq_8c.html new file mode 100644 index 0000000000..0f7335fe1f --- /dev/null +++ b/sw/neorv32__spi__irq_8c.html @@ -0,0 +1,257 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_spi_irq/drv/neorv32_spi_irq.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_8f848e36ac87ced1c361afcc0549ca32.html">demo_spi_irq</a></li><li class="navelem"><a class="el" href="dir_9d04cdc586d6978be343bda7adcdc371.html">drv</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_spi_irq.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Addition to <a class="el" href="neorv32__spi_8c.html" title="Serial peripheral interface controller (SPI) HW driver source file.">neorv32_spi.c</a>, which provides an IRQ driven data flow. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &quot;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="neorv32__spi__irq_8h_source.html">neorv32_spi_irq.h</a>&quot;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a4aa4746fd210ecc0c3614089a6951ddf" id="r_a4aa4746fd210ecc0c3614089a6951ddf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4aa4746fd210ecc0c3614089a6951ddf">neorv32_spi_init</a> (<a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *self)</td></tr> +<tr class="separator:a4aa4746fd210ecc0c3614089a6951ddf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa641816bb302df497664aa21ea69ed16" id="r_aa641816bb302df497664aa21ea69ed16"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa641816bb302df497664aa21ea69ed16">neorv32_spi_isr</a> (<a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *self)</td></tr> +<tr class="separator:aa641816bb302df497664aa21ea69ed16"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1f44ed849415d8e1d659c0485762c485" id="r_a1f44ed849415d8e1d659c0485762c485"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1f44ed849415d8e1d659c0485762c485">neorv32_spi_rw</a> (<a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *self, uint8_t csn, void *spi, uint32_t len)</td></tr> +<tr class="separator:a1f44ed849415d8e1d659c0485762c485"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1863e19932bc6a79f2ca27d23eb74ef5" id="r_a1863e19932bc6a79f2ca27d23eb74ef5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1863e19932bc6a79f2ca27d23eb74ef5">neorv32_spi_rw_busy</a> (<a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *self)</td></tr> +<tr class="separator:a1863e19932bc6a79f2ca27d23eb74ef5"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Addition to <a class="el" href="neorv32__spi_8c.html" title="Serial peripheral interface controller (SPI) HW driver source file.">neorv32_spi.c</a>, which provides an IRQ driven data flow. </p> +<dl class="section author"><dt>Author</dt><dd>Andreas Kaeberlein </dd></dl> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the SPI unit was synthesized (IO_SPI_EN = true). </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a4aa4746fd210ecc0c3614089a6951ddf" name="a4aa4746fd210ecc0c3614089a6951ddf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4aa4746fd210ecc0c3614089a6951ddf">&#9670;&#160;</a></span>neorv32_spi_init()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_init </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *</td> <td class="paramname"><span class="paramname"><em>self</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initializes SPI flow control handle. The data structure elements are listed in <a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a>.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">*self</td><td>SPI driver common data handle. See <a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="aa641816bb302df497664aa21ea69ed16" name="aa641816bb302df497664aa21ea69ed16"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa641816bb302df497664aa21ea69ed16">&#9670;&#160;</a></span>neorv32_spi_isr()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_isr </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *</td> <td class="paramname"><span class="paramname"><em>self</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI interrupt service routine. The data structure elements are listed in <a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a>.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">*self</td><td>SPI driver common data handle. See <a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a1f44ed849415d8e1d659c0485762c485" name="a1f44ed849415d8e1d659c0485762c485"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1f44ed849415d8e1d659c0485762c485">&#9670;&#160;</a></span>neorv32_spi_rw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_spi_rw </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *</td> <td class="paramname"><span class="paramname"><em>self</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>csn</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>spi</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>len</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Starts ISR driven read/write SPI transfer.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">*self</td><td>SPI driver common data handle. See <a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">csn</td><td>Used chip select index for transfer. </td></tr> + <tr><td class="paramdir">[in,out]</td><td class="paramname">*spi</td><td>write/read data buffer for SPI. Before transmission contents the write data and after the read data. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>number of bytes to transfer. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>int status of function. </dd></dl> +<dl class="retval"><dt>Return values</dt><dd> + <table class="retval"> + <tr><td class="paramname">0</td><td>new transfer started. </td></tr> + <tr><td class="paramname">1</td><td>transfer active, refused request. </td></tr> + <tr><td class="paramname">2</td><td>unsupported data size, only 1/2/4 allowed. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a1863e19932bc6a79f2ca27d23eb74ef5" name="a1863e19932bc6a79f2ca27d23eb74ef5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1863e19932bc6a79f2ca27d23eb74ef5">&#9670;&#160;</a></span>neorv32_spi_rw_busy()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_spi_rw_busy </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *</td> <td class="paramname"><span class="paramname"><em>self</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if transfer is active. see <a class="el" href="#a1f44ed849415d8e1d659c0485762c485">neorv32_spi_rw</a></p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">*self</td><td>SPI driver common data handle. See <a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>int status of function. </dd></dl> +<dl class="retval"><dt>Return values</dt><dd> + <table class="retval"> + <tr><td class="paramname">0</td><td>idle. </td></tr> + <tr><td class="paramname">1</td><td>busy. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__spi__irq_8h.html b/sw/neorv32__spi__irq_8h.html new file mode 100644 index 0000000000..63eceb0c47 --- /dev/null +++ b/sw/neorv32__spi__irq_8h.html @@ -0,0 +1,301 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_spi_irq/drv/neorv32_spi_irq.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_8f848e36ac87ced1c361afcc0549ca32.html">demo_spi_irq</a></li><li class="navelem"><a class="el" href="dir_9d04cdc586d6978be343bda7adcdc371.html">drv</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> &#124; +<a href="#define-members">Macros</a> &#124; +<a href="#typedef-members">Typedefs</a> &#124; +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_spi_irq.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Addition to <a class="el" href="neorv32__spi_8h.html" title="Serial peripheral interface controller (SPI) HW driver header file.">neorv32_spi.h</a>, which provides an IRQ driven data flow. +<a href="#details">More...</a></p> + +<p><a href="neorv32__spi__irq_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr class="memitem:ac6afabdc09a49a433ee19d8a9486056d" id="r_ac6afabdc09a49a433ee19d8a9486056d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac6afabdc09a49a433ee19d8a9486056d">min</a>(a, b)</td></tr> +<tr class="separator:ac6afabdc09a49a433ee19d8a9486056d"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a> +Typedefs</h2></td></tr> +<tr class="memitem:a1bff352570118788aafc29fcc41c27f9" id="r_a1bff352570118788aafc29fcc41c27f9"><td class="memItemLeft" align="right" valign="top"><a id="a1bff352570118788aafc29fcc41c27f9" name="a1bff352570118788aafc29fcc41c27f9"></a> +typedef struct t_neorv32_spi&#160;</td><td class="memItemRight" valign="bottom"><b>t_neorv32_spi</b></td></tr> +<tr class="separator:a1bff352570118788aafc29fcc41c27f9"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a4aa4746fd210ecc0c3614089a6951ddf" id="r_a4aa4746fd210ecc0c3614089a6951ddf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4aa4746fd210ecc0c3614089a6951ddf">neorv32_spi_init</a> (<a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *self)</td></tr> +<tr class="separator:a4aa4746fd210ecc0c3614089a6951ddf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa641816bb302df497664aa21ea69ed16" id="r_aa641816bb302df497664aa21ea69ed16"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa641816bb302df497664aa21ea69ed16">neorv32_spi_isr</a> (<a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *self)</td></tr> +<tr class="separator:aa641816bb302df497664aa21ea69ed16"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1f44ed849415d8e1d659c0485762c485" id="r_a1f44ed849415d8e1d659c0485762c485"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1f44ed849415d8e1d659c0485762c485">neorv32_spi_rw</a> (<a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *self, uint8_t csn, void *spi, uint32_t len)</td></tr> +<tr class="separator:a1f44ed849415d8e1d659c0485762c485"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1863e19932bc6a79f2ca27d23eb74ef5" id="r_a1863e19932bc6a79f2ca27d23eb74ef5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1863e19932bc6a79f2ca27d23eb74ef5">neorv32_spi_rw_busy</a> (<a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *self)</td></tr> +<tr class="separator:a1863e19932bc6a79f2ca27d23eb74ef5"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Addition to <a class="el" href="neorv32__spi_8h.html" title="Serial peripheral interface controller (SPI) HW driver header file.">neorv32_spi.h</a>, which provides an IRQ driven data flow. </p> +<dl class="section author"><dt>Author</dt><dd>Andreas Kaeberlein </dd></dl> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the SPI unit was synthesized (IO_SPI_EN = true). </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ac6afabdc09a49a433ee19d8a9486056d" name="ac6afabdc09a49a433ee19d8a9486056d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac6afabdc09a49a433ee19d8a9486056d">&#9670;&#160;</a></span>min</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define min</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>a</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>b</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"> ({ __typeof__ (a) _a = (a); \</div> +<div class="line"> __typeof__ (b) _b = (b); \</div> +<div class="line"> _a &lt; _b ? _a : _b; })</div> +</div><!-- fragment --> +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a4aa4746fd210ecc0c3614089a6951ddf" name="a4aa4746fd210ecc0c3614089a6951ddf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4aa4746fd210ecc0c3614089a6951ddf">&#9670;&#160;</a></span>neorv32_spi_init()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_init </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *</td> <td class="paramname"><span class="paramname"><em>self</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initializes SPI flow control handle. The data structure elements are listed in <a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a>.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">*self</td><td>SPI driver common data handle. See <a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="aa641816bb302df497664aa21ea69ed16" name="aa641816bb302df497664aa21ea69ed16"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa641816bb302df497664aa21ea69ed16">&#9670;&#160;</a></span>neorv32_spi_isr()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_spi_isr </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *</td> <td class="paramname"><span class="paramname"><em>self</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI interrupt service routine. The data structure elements are listed in <a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a>.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">*self</td><td>SPI driver common data handle. See <a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a1f44ed849415d8e1d659c0485762c485" name="a1f44ed849415d8e1d659c0485762c485"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1f44ed849415d8e1d659c0485762c485">&#9670;&#160;</a></span>neorv32_spi_rw()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_spi_rw </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *</td> <td class="paramname"><span class="paramname"><em>self</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>csn</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>spi</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>len</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Starts ISR driven read/write SPI transfer.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">*self</td><td>SPI driver common data handle. See <a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">csn</td><td>Used chip select index for transfer. </td></tr> + <tr><td class="paramdir">[in,out]</td><td class="paramname">*spi</td><td>write/read data buffer for SPI. Before transmission contents the write data and after the read data. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>number of bytes to transfer. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>int status of function. </dd></dl> +<dl class="retval"><dt>Return values</dt><dd> + <table class="retval"> + <tr><td class="paramname">0</td><td>new transfer started. </td></tr> + <tr><td class="paramname">1</td><td>transfer active, refused request. </td></tr> + <tr><td class="paramname">2</td><td>unsupported data size, only 1/2/4 allowed. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a1863e19932bc6a79f2ca27d23eb74ef5" name="a1863e19932bc6a79f2ca27d23eb74ef5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1863e19932bc6a79f2ca27d23eb74ef5">&#9670;&#160;</a></span>neorv32_spi_rw_busy()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_spi_rw_busy </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a> *</td> <td class="paramname"><span class="paramname"><em>self</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if transfer is active. see <a class="el" href="neorv32__spi__irq_8c.html#a1f44ed849415d8e1d659c0485762c485">neorv32_spi_rw</a></p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">*self</td><td>SPI driver common data handle. See <a class="el" href="structt__neorv32__spi.html">t_neorv32_spi</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>int status of function. </dd></dl> +<dl class="retval"><dt>Return values</dt><dd> + <table class="retval"> + <tr><td class="paramname">0</td><td>idle. </td></tr> + <tr><td class="paramname">1</td><td>busy. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__spi__irq_8h_source.html b/sw/neorv32__spi__irq_8h_source.html new file mode 100644 index 0000000000..a99ff99717 --- /dev/null +++ b/sw/neorv32__spi__irq_8h_source.html @@ -0,0 +1,183 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_spi_irq/drv/neorv32_spi_irq.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_8f848e36ac87ced1c361afcc0549ca32.html">demo_spi_irq</a></li><li class="navelem"><a class="el" href="dir_9d04cdc586d6978be343bda7adcdc371.html">drv</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_spi_irq.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__spi__irq_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// #################################################################################################</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// # &lt;&lt; NEORV32: neorv32_spi_irq.h - IRQ driven SPI Controller HW Driver &gt;&gt; #</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// # ********************************************************************************************* #</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// # BSD 3-Clause License #</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// # Copyright (c) 2023, Stephan Nolting. All rights reserved. #</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">// # Redistribution and use in source and binary forms, with or without modification, are #</span></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">// # permitted provided that the following conditions are met: #</span></div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">// # 1. Redistributions of source code must retain the above copyright notice, this list of #</span></div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">// # conditions and the following disclaimer. #</span></div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">// # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #</span></div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">// # conditions and the following disclaimer in the documentation and/or other materials #</span></div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">// # provided with the distribution. #</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment">// # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">// # endorse or promote products derived from this software without specific prior written #</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">// # permission. #</span></div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">// # #</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">// # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND ANY EXPRESS #</span></div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">// # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #</span></div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">// # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #</span></div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">// # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #</span></div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">// # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #</span></div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">// # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #</span></div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">// # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #</span></div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">// # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #</span></div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">// # OF THE POSSIBILITY OF SUCH DAMAGE. #</span></div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">// # ********************************************************************************************* #</span></div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">// # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #</span></div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">// #################################################################################################</span></div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#ifndef neorv32_spi_irq_h</span></div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#define neorv32_spi_irq_h</span></div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">// MIN macro</span></div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">// https://stackoverflow.com/questions/3437404/min-and-max-in-c</span></div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="preprocessor">#define min(a,b) \</span></div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="preprocessor"> ({ __typeof__ (a) _a = (a); \</span></div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="preprocessor"> __typeof__ (b) _b = (b); \</span></div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor"> _a &lt; _b ? _a : _b; })</span></div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment">// data handle for ISR</span></div> +<div class="foldopen" id="foldopen00055" data-start="{" data-end="};"> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="structt__neorv32__spi.html"> 55</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code hl_struct" href="structt__neorv32__spi.html">t_neorv32_spi</a></div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>{</div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="structt__neorv32__spi.html#a487a6510820871ff8d0da7699463f6d9"> 57</a></span> uint8_t* <a class="code hl_variable" href="structt__neorv32__spi.html#a487a6510820871ff8d0da7699463f6d9">ptrSpiBuf</a>; </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="structt__neorv32__spi.html#a435c266758a440d32de4344472e3514a"> 58</a></span> uint8_t <a class="code hl_variable" href="structt__neorv32__spi.html#a435c266758a440d32de4344472e3514a">uint8Csn</a>; </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="structt__neorv32__spi.html#a71fb3f91af197e1abdbe97d62130ad0f"> 59</a></span> uint16_t <a class="code hl_variable" href="structt__neorv32__spi.html#a71fb3f91af197e1abdbe97d62130ad0f">uint16Fifo</a>; </div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="structt__neorv32__spi.html#aa4d96f72e57fb6930ab43de6fb0a85ae"> 60</a></span> uint32_t <a class="code hl_variable" href="structt__neorv32__spi.html#aa4d96f72e57fb6930ab43de6fb0a85ae">uint32Total</a>; </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="structt__neorv32__spi.html#aa89b7a769e54e331798e4d68d02a7b43"> 61</a></span> <span class="keyword">volatile</span> uint32_t <a class="code hl_variable" href="structt__neorv32__spi.html#aa89b7a769e54e331798e4d68d02a7b43">uint32Write</a>; </div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="structt__neorv32__spi.html#a5750a54f8312ec2fed349eb9fbeff323"> 62</a></span> <span class="keyword">volatile</span> uint32_t <a class="code hl_variable" href="structt__neorv32__spi.html#a5750a54f8312ec2fed349eb9fbeff323">uint32Read</a>; </div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="structt__neorv32__spi.html#a8ed31f9393bee5b963e08582b6c517ed"> 63</a></span> <span class="keyword">volatile</span> uint8_t <a class="code hl_variable" href="structt__neorv32__spi.html#a8ed31f9393bee5b963e08582b6c517ed">uint8IsBusy</a>; </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span>} <a class="code hl_struct" href="structt__neorv32__spi.html">t_neorv32_spi</a>;</div> +</div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment">// prototypes</span></div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__spi__irq_8h.html#a4aa4746fd210ecc0c3614089a6951ddf">neorv32_spi_init</a>(<a class="code hl_struct" href="structt__neorv32__spi.html">t_neorv32_spi</a> *self);</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__spi__irq_8h.html#aa641816bb302df497664aa21ea69ed16">neorv32_spi_isr</a>(<a class="code hl_struct" href="structt__neorv32__spi.html">t_neorv32_spi</a> *self);</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__spi__irq_8h.html#a1f44ed849415d8e1d659c0485762c485">neorv32_spi_rw</a>(<a class="code hl_struct" href="structt__neorv32__spi.html">t_neorv32_spi</a> *self, uint8_t csn, <span class="keywordtype">void</span> *spi, uint32_t len);</div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__spi__irq_8h.html#a1863e19932bc6a79f2ca27d23eb74ef5">neorv32_spi_rw_busy</a>(<a class="code hl_struct" href="structt__neorv32__spi.html">t_neorv32_spi</a> *self);</div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_spi_irq_h</span></div> +<div class="ttc" id="aneorv32__spi__irq_8h_html_a1863e19932bc6a79f2ca27d23eb74ef5"><div class="ttname"><a href="neorv32__spi__irq_8h.html#a1863e19932bc6a79f2ca27d23eb74ef5">neorv32_spi_rw_busy</a></div><div class="ttdeci">int neorv32_spi_rw_busy(t_neorv32_spi *self)</div><div class="ttdef"><b>Definition</b> neorv32_spi_irq.c:139</div></div> +<div class="ttc" id="aneorv32__spi__irq_8h_html_a1f44ed849415d8e1d659c0485762c485"><div class="ttname"><a href="neorv32__spi__irq_8h.html#a1f44ed849415d8e1d659c0485762c485">neorv32_spi_rw</a></div><div class="ttdeci">int neorv32_spi_rw(t_neorv32_spi *self, uint8_t csn, void *spi, uint32_t len)</div><div class="ttdef"><b>Definition</b> neorv32_spi_irq.c:109</div></div> +<div class="ttc" id="aneorv32__spi__irq_8h_html_a4aa4746fd210ecc0c3614089a6951ddf"><div class="ttname"><a href="neorv32__spi__irq_8h.html#a4aa4746fd210ecc0c3614089a6951ddf">neorv32_spi_init</a></div><div class="ttdeci">void neorv32_spi_init(t_neorv32_spi *self)</div><div class="ttdef"><b>Definition</b> neorv32_spi_irq.c:53</div></div> +<div class="ttc" id="aneorv32__spi__irq_8h_html_aa641816bb302df497664aa21ea69ed16"><div class="ttname"><a href="neorv32__spi__irq_8h.html#aa641816bb302df497664aa21ea69ed16">neorv32_spi_isr</a></div><div class="ttdeci">void neorv32_spi_isr(t_neorv32_spi *self)</div><div class="ttdef"><b>Definition</b> neorv32_spi_irq.c:69</div></div> +<div class="ttc" id="astructt__neorv32__spi_html"><div class="ttname"><a href="structt__neorv32__spi.html">t_neorv32_spi</a></div><div class="ttdef"><b>Definition</b> neorv32_spi_irq.h:56</div></div> +<div class="ttc" id="astructt__neorv32__spi_html_a435c266758a440d32de4344472e3514a"><div class="ttname"><a href="structt__neorv32__spi.html#a435c266758a440d32de4344472e3514a">t_neorv32_spi::uint8Csn</a></div><div class="ttdeci">uint8_t uint8Csn</div><div class="ttdef"><b>Definition</b> neorv32_spi_irq.h:58</div></div> +<div class="ttc" id="astructt__neorv32__spi_html_a487a6510820871ff8d0da7699463f6d9"><div class="ttname"><a href="structt__neorv32__spi.html#a487a6510820871ff8d0da7699463f6d9">t_neorv32_spi::ptrSpiBuf</a></div><div class="ttdeci">uint8_t * ptrSpiBuf</div><div class="ttdef"><b>Definition</b> neorv32_spi_irq.h:57</div></div> +<div class="ttc" id="astructt__neorv32__spi_html_a5750a54f8312ec2fed349eb9fbeff323"><div class="ttname"><a href="structt__neorv32__spi.html#a5750a54f8312ec2fed349eb9fbeff323">t_neorv32_spi::uint32Read</a></div><div class="ttdeci">volatile uint32_t uint32Read</div><div class="ttdef"><b>Definition</b> neorv32_spi_irq.h:62</div></div> +<div class="ttc" id="astructt__neorv32__spi_html_a71fb3f91af197e1abdbe97d62130ad0f"><div class="ttname"><a href="structt__neorv32__spi.html#a71fb3f91af197e1abdbe97d62130ad0f">t_neorv32_spi::uint16Fifo</a></div><div class="ttdeci">uint16_t uint16Fifo</div><div class="ttdef"><b>Definition</b> neorv32_spi_irq.h:59</div></div> +<div class="ttc" id="astructt__neorv32__spi_html_a8ed31f9393bee5b963e08582b6c517ed"><div class="ttname"><a href="structt__neorv32__spi.html#a8ed31f9393bee5b963e08582b6c517ed">t_neorv32_spi::uint8IsBusy</a></div><div class="ttdeci">volatile uint8_t uint8IsBusy</div><div class="ttdef"><b>Definition</b> neorv32_spi_irq.h:63</div></div> +<div class="ttc" id="astructt__neorv32__spi_html_aa4d96f72e57fb6930ab43de6fb0a85ae"><div class="ttname"><a href="structt__neorv32__spi.html#aa4d96f72e57fb6930ab43de6fb0a85ae">t_neorv32_spi::uint32Total</a></div><div class="ttdeci">uint32_t uint32Total</div><div class="ttdef"><b>Definition</b> neorv32_spi_irq.h:60</div></div> +<div class="ttc" id="astructt__neorv32__spi_html_aa89b7a769e54e331798e4d68d02a7b43"><div class="ttname"><a href="structt__neorv32__spi.html#aa89b7a769e54e331798e4d68d02a7b43">t_neorv32_spi::uint32Write</a></div><div class="ttdeci">volatile uint32_t uint32Write</div><div class="ttdef"><b>Definition</b> neorv32_spi_irq.h:61</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__sysinfo_8c.html b/sw/neorv32__sysinfo_8c.html new file mode 100644 index 0000000000..42d204932f --- /dev/null +++ b/sw/neorv32__sysinfo_8c.html @@ -0,0 +1,164 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_sysinfo.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_sysinfo.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>System Information Memory (SYSINFO) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a098105f8a133087f286c7010c5dec8dd" id="r_a098105f8a133087f286c7010c5dec8dd"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a098105f8a133087f286c7010c5dec8dd">neorv32_sysinfo_get_clk</a> (void)</td></tr> +<tr class="separator:a098105f8a133087f286c7010c5dec8dd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9b1ca94e298533641547ee448e1c52b3" id="r_a9b1ca94e298533641547ee448e1c52b3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9b1ca94e298533641547ee448e1c52b3">neorv32_sysinfo_set_clk</a> (uint32_t clock)</td></tr> +<tr class="separator:a9b1ca94e298533641547ee448e1c52b3"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>System Information Memory (SYSINFO) HW driver source file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a098105f8a133087f286c7010c5dec8dd" name="a098105f8a133087f286c7010c5dec8dd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a098105f8a133087f286c7010c5dec8dd">&#9670;&#160;</a></span>neorv32_sysinfo_get_clk()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_sysinfo_get_clk </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current processor clock frequency.</p> +<dl class="section return"><dt>Returns</dt><dd>Clock frequency in Hz. </dd></dl> + +</div> +</div> +<a id="a9b1ca94e298533641547ee448e1c52b3" name="a9b1ca94e298533641547ee448e1c52b3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9b1ca94e298533641547ee448e1c52b3">&#9670;&#160;</a></span>neorv32_sysinfo_set_clk()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_sysinfo_set_clk </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>clock</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set processor clock frequency.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">clock</td><td>Clock frequency in Hz. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__sysinfo_8h.html b/sw/neorv32__sysinfo_8h.html new file mode 100644 index 0000000000..1338f37cfc --- /dev/null +++ b/sw/neorv32__sysinfo_8h.html @@ -0,0 +1,417 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_sysinfo.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_sysinfo.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>System Information Memory (SYSINFO) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__sysinfo_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__sysinfo__t.html">neorv32_sysinfo_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:a098105f8a133087f286c7010c5dec8dd" id="r_a098105f8a133087f286c7010c5dec8dd"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a098105f8a133087f286c7010c5dec8dd">neorv32_sysinfo_get_clk</a> (void)</td></tr> +<tr class="separator:a098105f8a133087f286c7010c5dec8dd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9b1ca94e298533641547ee448e1c52b3" id="r_a9b1ca94e298533641547ee448e1c52b3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9b1ca94e298533641547ee448e1c52b3">neorv32_sysinfo_set_clk</a> (uint32_t clock)</td></tr> +<tr class="separator:a9b1ca94e298533641547ee448e1c52b3"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: System Configuration Information Memory (SYSINFO)</h2></td></tr> +<tr class="memitem:a140e23434ef7e85b2b38d8ae9695227b" id="r_a140e23434ef7e85b2b38d8ae9695227b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a140e23434ef7e85b2b38d8ae9695227b">NEORV32_SYSINFO</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__sysinfo__t.html">neorv32_sysinfo_t</a>*) (<a class="el" href="neorv32_8h.html#a5aa936f38782232c7ed3eab1283ee536">NEORV32_SYSINFO_BASE</a>))</td></tr> +<tr class="separator:a140e23434ef7e85b2b38d8ae9695227b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aebaa5f3f231003a05c899cc1491b8c5f" id="r_aebaa5f3f231003a05c899cc1491b8c5f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aebaa5f3f231003a05c899cc1491b8c5f">NEORV32_SYSINFO_MEM_enum</a> { <a class="el" href="#aebaa5f3f231003a05c899cc1491b8c5fa807d9e70e78e2ba3d5bfb902cc1cdc53">SYSINFO_MEM_IMEM</a> = 0 +, <a class="el" href="#aebaa5f3f231003a05c899cc1491b8c5fa8a46c064e5a1339978a5fb1f41301894">SYSINFO_MEM_DMEM</a> = 1 +, <a class="el" href="#aebaa5f3f231003a05c899cc1491b8c5fa1671eeca5b3a6d1c8069658e0b7bc182">SYSINFO_MEM_res</a> = 2 +, <a class="el" href="#aebaa5f3f231003a05c899cc1491b8c5fa0f4e1e1c9320949bdacd2bc7ba6179f7">SYSINFO_MEM_BOOT</a> = 3 + }</td></tr> +<tr class="separator:aebaa5f3f231003a05c899cc1491b8c5f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae41ebd5785b09640a00df194b1a0fa08" id="r_ae41ebd5785b09640a00df194b1a0fa08"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08">NEORV32_SYSINFO_SOC_enum</a> { <br /> +&#160;&#160;<a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a6899a935ae8c4aef08d828f250342e9a">SYSINFO_SOC_BOOTLOADER</a> = 0 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08add6721803c9d79f1e50248927ba30e16">SYSINFO_SOC_XBUS</a> = 1 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a1c2fbb0cc03a1df2e5e8a472f3f1ca57">SYSINFO_SOC_MEM_INT_IMEM</a> = 2 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a58ff6e112c09f798be014fdf84385135">SYSINFO_SOC_MEM_INT_DMEM</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a3e50b1c24eec0f1811d5630e6dd33e93">SYSINFO_SOC_OCD</a> = 4 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a124c4c2b101008b0e3f1d82efec11c26">SYSINFO_SOC_ICACHE</a> = 5 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a9823c2c0945997ed0d7e5eb473d81e41">SYSINFO_SOC_DCACHE</a> = 6 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a579f26ab04d4fd9af8e419df465695ca">SYSINFO_SOC_XBUS_CACHE</a> = 8 +, <br /> +&#160;&#160;<a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a516a2e254ae63e017caefbeed20f54e9">SYSINFO_SOC_XIP</a> = 9 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08ac943fc33a2c1c25c3ab075228b87c0ef">SYSINFO_SOC_XIP_CACHE</a> = 10 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a161826adba27e19186c5005626c160b8">SYSINFO_SOC_OCD_AUTH</a> = 11 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08aaeafc2591f2cc95e9ff1fdee1e1c26e8">SYSINFO_SOC_IMEM_ROM</a> = 12 +, <br /> +&#160;&#160;<a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a3bbac94e7f1f021f14cefa929b79e9d9">SYSINFO_SOC_IO_TWD</a> = 13 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a24658727efef9747414b5da8f26de66d">SYSINFO_SOC_IO_DMA</a> = 14 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a62a2337b33a2f65b6efd5c91e699c2d1">SYSINFO_SOC_IO_GPIO</a> = 15 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08adc914c065f5b51ae0881a6b62b54a3db">SYSINFO_SOC_IO_CLINT</a> = 16 +, <br /> +&#160;&#160;<a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a244710794e00c93e91a7f13d533cb139">SYSINFO_SOC_IO_UART0</a> = 17 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a4cf4b1a83a4b52efbf26eace21f5ab20">SYSINFO_SOC_IO_SPI</a> = 18 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a179401244ac42bc4aac3108ca9bbb9c3">SYSINFO_SOC_IO_TWI</a> = 19 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a8dc202143c3b13850bccf16380466399">SYSINFO_SOC_IO_PWM</a> = 20 +, <br /> +&#160;&#160;<a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08afc964f39427cbc4090a960967eada7be">SYSINFO_SOC_IO_WDT</a> = 21 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08ae725c2452eeb33e3230dcfb3450598e6">SYSINFO_SOC_IO_CFS</a> = 22 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a44892276837b2b1bbe6ef9faa715ad5d">SYSINFO_SOC_IO_TRNG</a> = 23 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a84088f6664a3dc19041dfad5b551ced9">SYSINFO_SOC_IO_SDI</a> = 24 +, <br /> +&#160;&#160;<a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a52b0ca1ef2af5e9c9a0250440b2de9e5">SYSINFO_SOC_IO_UART1</a> = 25 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a164c5c9dc702b4b5fc71110fc047c7f1">SYSINFO_SOC_IO_NEOLED</a> = 26 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08ad1b8d38e3715485242756cd37b7c1fe9">SYSINFO_SOC_IO_XIRQ</a> = 27 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a4aea6c006f9c999720b1dd6166a01afe">SYSINFO_SOC_IO_GPTMR</a> = 28 +, <br /> +&#160;&#160;<a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08a26b25f1b47f62e98ff0920544f56b57e">SYSINFO_SOC_IO_SLINK</a> = 29 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08aa8ec3b39b36f13ee4f97a72700e881a8">SYSINFO_SOC_IO_ONEWIRE</a> = 30 +, <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08ab89821e2c61ccb9db6324ee503f9dfa6">SYSINFO_SOC_IO_CRC</a> = 31 +<br /> + }</td></tr> +<tr class="separator:ae41ebd5785b09640a00df194b1a0fa08"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a50ee5bda9789b5cffae281db5d10a1ea" id="r_a50ee5bda9789b5cffae281db5d10a1ea"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a50ee5bda9789b5cffae281db5d10a1ea">NEORV32_SYSINFO_CACHE_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaa1bdccae04b3bd84988297c16ffbefaf2">SYSINFO_CACHE_INST_BLOCK_SIZE_0</a> = 0 +, <a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaaf4a91f729e16adc72c2419d9ad3807e5">SYSINFO_CACHE_INST_BLOCK_SIZE_3</a> = 3 +, <a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaabd13283ebd48dee48aee2cff3a560fe9">SYSINFO_CACHE_INST_NUM_BLOCKS_0</a> = 4 +, <a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaa02f235d7d2fc30c4ae3a383a631d9060">SYSINFO_CACHE_INST_NUM_BLOCKS_3</a> = 7 +, <br /> +&#160;&#160;<a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaa8a2c7079b44f4255196de49d6d59afdb">SYSINFO_CACHE_DATA_BLOCK_SIZE_0</a> = 8 +, <a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaaaec544d85ce3296ca9e97e833e20936e">SYSINFO_CACHE_DATA_BLOCK_SIZE_3</a> = 11 +, <a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaabb743d3ca41bf44aa6ff188ec898cfb8">SYSINFO_CACHE_DATA_NUM_BLOCKS_0</a> = 12 +, <a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaa5778928b290b3b1cba42412de4dabf96">SYSINFO_CACHE_DATA_NUM_BLOCKS_3</a> = 15 +, <br /> +&#160;&#160;<a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaaea0a88adaa9d0b5e1f4e5cca630ed6f8">SYSINFO_CACHE_XIP_BLOCK_SIZE_0</a> = 16 +, <a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaa44d4d12c0395e924b8bf7dc40059bfba">SYSINFO_CACHE_XIP_BLOCK_SIZE_3</a> = 19 +, <a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaa90ae265a72ea53d99b474798e721c317">SYSINFO_CACHE_XIP_NUM_BLOCKS_0</a> = 20 +, <a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaaf88eacb3ed63d5a048a554927812460b">SYSINFO_CACHE_XIP_NUM_BLOCKS_3</a> = 23 +, <br /> +&#160;&#160;<a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaa3f6e68cdf6bb641902a9a6d32c1f9d9e">SYSINFO_CACHE_XBUS_BLOCK_SIZE_0</a> = 24 +, <a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaa908c60a836b03129098cb70fe2a860a1">SYSINFO_CACHE_XBUS_BLOCK_SIZE_3</a> = 27 +, <a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaa73553a14d3425498be9d3802ca5f1459">SYSINFO_CACHE_XBUS_NUM_BLOCKS_0</a> = 28 +, <a class="el" href="#a50ee5bda9789b5cffae281db5d10a1eaade7f119164ff2c3800b4464a65ca247b">SYSINFO_CACHE_XBUS_NUM_BLOCKS_3</a> = 31 +<br /> + }</td></tr> +<tr class="separator:a50ee5bda9789b5cffae281db5d10a1ea"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>System Information Memory (SYSINFO) HW driver header file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a140e23434ef7e85b2b38d8ae9695227b" name="a140e23434ef7e85b2b38d8ae9695227b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a140e23434ef7e85b2b38d8ae9695227b">&#9670;&#160;</a></span>NEORV32_SYSINFO</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_SYSINFO&#160;&#160;&#160;((<a class="el" href="structneorv32__sysinfo__t.html">neorv32_sysinfo_t</a>*) (<a class="el" href="neorv32_8h.html#a5aa936f38782232c7ed3eab1283ee536">NEORV32_SYSINFO_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>SYSINFO module hardware access (<a class="el" href="structneorv32__sysinfo__t.html">neorv32_sysinfo_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="a50ee5bda9789b5cffae281db5d10a1ea" name="a50ee5bda9789b5cffae281db5d10a1ea"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a50ee5bda9789b5cffae281db5d10a1ea">&#9670;&#160;</a></span>NEORV32_SYSINFO_CACHE_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a50ee5bda9789b5cffae281db5d10a1ea">NEORV32_SYSINFO_CACHE_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32_SYSINFO.CACHE (r/-): Cache configuration </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaa1bdccae04b3bd84988297c16ffbefaf2" name="a50ee5bda9789b5cffae281db5d10a1eaa1bdccae04b3bd84988297c16ffbefaf2"></a>SYSINFO_CACHE_INST_BLOCK_SIZE_0&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (0) (r/-): i-cache: log2(Block size in bytes), bit 0 (via ICACHE_BLOCK_SIZE generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaaf4a91f729e16adc72c2419d9ad3807e5" name="a50ee5bda9789b5cffae281db5d10a1eaaf4a91f729e16adc72c2419d9ad3807e5"></a>SYSINFO_CACHE_INST_BLOCK_SIZE_3&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (3) (r/-): i-cache: log2(Block size in bytes), bit 3 (via ICACHE_BLOCK_SIZE generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaabd13283ebd48dee48aee2cff3a560fe9" name="a50ee5bda9789b5cffae281db5d10a1eaabd13283ebd48dee48aee2cff3a560fe9"></a>SYSINFO_CACHE_INST_NUM_BLOCKS_0&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (4) (r/-): i-cache: log2(Number of cache blocks), bit 0 (via ICACHE_NUM_BLOCKS generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaa02f235d7d2fc30c4ae3a383a631d9060" name="a50ee5bda9789b5cffae281db5d10a1eaa02f235d7d2fc30c4ae3a383a631d9060"></a>SYSINFO_CACHE_INST_NUM_BLOCKS_3&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (7) (r/-): i-cache: log2(Number of cache blocks), bit 3 (via ICACHE_NUM_BLOCKS generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaa8a2c7079b44f4255196de49d6d59afdb" name="a50ee5bda9789b5cffae281db5d10a1eaa8a2c7079b44f4255196de49d6d59afdb"></a>SYSINFO_CACHE_DATA_BLOCK_SIZE_0&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (8) (r/-): d-cache: log2(Block size in bytes), bit 0 (via DCACHE_BLOCK_SIZE generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaaaec544d85ce3296ca9e97e833e20936e" name="a50ee5bda9789b5cffae281db5d10a1eaaaec544d85ce3296ca9e97e833e20936e"></a>SYSINFO_CACHE_DATA_BLOCK_SIZE_3&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (11) (r/-): d-cache: log2(Block size in bytes), bit 3 (via DCACHE_BLOCK_SIZE generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaabb743d3ca41bf44aa6ff188ec898cfb8" name="a50ee5bda9789b5cffae281db5d10a1eaabb743d3ca41bf44aa6ff188ec898cfb8"></a>SYSINFO_CACHE_DATA_NUM_BLOCKS_0&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (12) (r/-): d-cache: log2(Number of cache blocks), bit 0 (via DCACHE_NUM_BLOCKS generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaa5778928b290b3b1cba42412de4dabf96" name="a50ee5bda9789b5cffae281db5d10a1eaa5778928b290b3b1cba42412de4dabf96"></a>SYSINFO_CACHE_DATA_NUM_BLOCKS_3&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (15) (r/-): d-cache: log2(Number of cache blocks), bit 3 (via DCACHE_NUM_BLOCKS generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaaea0a88adaa9d0b5e1f4e5cca630ed6f8" name="a50ee5bda9789b5cffae281db5d10a1eaaea0a88adaa9d0b5e1f4e5cca630ed6f8"></a>SYSINFO_CACHE_XIP_BLOCK_SIZE_0&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (16) (r/-): xip-cache: log2(Block size in bytes), bit 0 (via XIP_CACHE_BLOCK_SIZE generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaa44d4d12c0395e924b8bf7dc40059bfba" name="a50ee5bda9789b5cffae281db5d10a1eaa44d4d12c0395e924b8bf7dc40059bfba"></a>SYSINFO_CACHE_XIP_BLOCK_SIZE_3&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (19) (r/-): xip-cache: log2(Block size in bytes), bit 3 (via XIP_CACHE_BLOCK_SIZE generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaa90ae265a72ea53d99b474798e721c317" name="a50ee5bda9789b5cffae281db5d10a1eaa90ae265a72ea53d99b474798e721c317"></a>SYSINFO_CACHE_XIP_NUM_BLOCKS_0&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (20) (r/-): xip-cache: log2(Number of cache blocks), bit 0 (via XIP_CACHE_NUM_BLOCKS generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaaf88eacb3ed63d5a048a554927812460b" name="a50ee5bda9789b5cffae281db5d10a1eaaf88eacb3ed63d5a048a554927812460b"></a>SYSINFO_CACHE_XIP_NUM_BLOCKS_3&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (23) (r/-): xip-cache: log2(Number of cache blocks), bit 3 (via XIP_CACHE_NUM_BLOCKS generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaa3f6e68cdf6bb641902a9a6d32c1f9d9e" name="a50ee5bda9789b5cffae281db5d10a1eaa3f6e68cdf6bb641902a9a6d32c1f9d9e"></a>SYSINFO_CACHE_XBUS_BLOCK_SIZE_0&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (24) (r/-): xbus-cache: log2(Block size in bytes), bit 0 (via XBUS_CACHE_BLOCK_SIZE generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaa908c60a836b03129098cb70fe2a860a1" name="a50ee5bda9789b5cffae281db5d10a1eaa908c60a836b03129098cb70fe2a860a1"></a>SYSINFO_CACHE_XBUS_BLOCK_SIZE_3&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (27) (r/-): xbus-cache: log2(Block size in bytes), bit 3 (via XBUS_CACHE_BLOCK_SIZE generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaa73553a14d3425498be9d3802ca5f1459" name="a50ee5bda9789b5cffae281db5d10a1eaa73553a14d3425498be9d3802ca5f1459"></a>SYSINFO_CACHE_XBUS_NUM_BLOCKS_0&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (28) (r/-): xbus-cache: log2(Number of cache blocks), bit 0 (via XBUS_CACHE_NUM_BLOCKS generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="a50ee5bda9789b5cffae281db5d10a1eaade7f119164ff2c3800b4464a65ca247b" name="a50ee5bda9789b5cffae281db5d10a1eaade7f119164ff2c3800b4464a65ca247b"></a>SYSINFO_CACHE_XBUS_NUM_BLOCKS_3&#160;</td><td class="fielddoc"><p>SYSINFO_CACHE (31) (r/-): xbus-cache: log2(Number of cache blocks), bit 3 (via XBUS_CACHE_NUM_BLOCKS generic) </p> +</td></tr> +</table> + +</div> +</div> +<a id="aebaa5f3f231003a05c899cc1491b8c5f" name="aebaa5f3f231003a05c899cc1491b8c5f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aebaa5f3f231003a05c899cc1491b8c5f">&#9670;&#160;</a></span>NEORV32_SYSINFO_MEM_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#aebaa5f3f231003a05c899cc1491b8c5f">NEORV32_SYSINFO_MEM_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32_SYSINFO.MEM (r/-): Memory configuration (sizes) </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="aebaa5f3f231003a05c899cc1491b8c5fa807d9e70e78e2ba3d5bfb902cc1cdc53" name="aebaa5f3f231003a05c899cc1491b8c5fa807d9e70e78e2ba3d5bfb902cc1cdc53"></a>SYSINFO_MEM_IMEM&#160;</td><td class="fielddoc"><p>SYSINFO_MEM byte 0 (r/-): log2(internal IMEM size in bytes) (via MEM_INT_IMEM_SIZE generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="aebaa5f3f231003a05c899cc1491b8c5fa8a46c064e5a1339978a5fb1f41301894" name="aebaa5f3f231003a05c899cc1491b8c5fa8a46c064e5a1339978a5fb1f41301894"></a>SYSINFO_MEM_DMEM&#160;</td><td class="fielddoc"><p>SYSINFO_MEM byte 1 (r/-): log2(internal DMEM size in bytes) (via MEM_INT_DMEM_SIZE generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="aebaa5f3f231003a05c899cc1491b8c5fa1671eeca5b3a6d1c8069658e0b7bc182" name="aebaa5f3f231003a05c899cc1491b8c5fa1671eeca5b3a6d1c8069658e0b7bc182"></a>SYSINFO_MEM_res&#160;</td><td class="fielddoc"><p>SYSINFO_MEM byte 2 (r/-): reserved, read as zero </p> +</td></tr> +<tr><td class="fieldname"><a id="aebaa5f3f231003a05c899cc1491b8c5fa0f4e1e1c9320949bdacd2bc7ba6179f7" name="aebaa5f3f231003a05c899cc1491b8c5fa0f4e1e1c9320949bdacd2bc7ba6179f7"></a>SYSINFO_MEM_BOOT&#160;</td><td class="fielddoc"><p>SYSINFO_MEM byte 3 (r/-): boot mode configuration (via BOOT_MODE_SELECT generic) </p> +</td></tr> +</table> + +</div> +</div> +<a id="ae41ebd5785b09640a00df194b1a0fa08" name="ae41ebd5785b09640a00df194b1a0fa08"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae41ebd5785b09640a00df194b1a0fa08">&#9670;&#160;</a></span>NEORV32_SYSINFO_SOC_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#ae41ebd5785b09640a00df194b1a0fa08">NEORV32_SYSINFO_SOC_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>NEORV32_SYSINFO.SOC (r/-): Implemented processor devices/features </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a6899a935ae8c4aef08d828f250342e9a" name="ae41ebd5785b09640a00df194b1a0fa08a6899a935ae8c4aef08d828f250342e9a"></a>SYSINFO_SOC_BOOTLOADER&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (0) (r/-): Bootloader implemented when 1 (via BOOT_MODE_SELECT generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08add6721803c9d79f1e50248927ba30e16" name="ae41ebd5785b09640a00df194b1a0fa08add6721803c9d79f1e50248927ba30e16"></a>SYSINFO_SOC_XBUS&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (1) (r/-): External bus interface implemented when 1 (via XBUS_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a1c2fbb0cc03a1df2e5e8a472f3f1ca57" name="ae41ebd5785b09640a00df194b1a0fa08a1c2fbb0cc03a1df2e5e8a472f3f1ca57"></a>SYSINFO_SOC_MEM_INT_IMEM&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (2) (r/-): Processor-internal instruction memory implemented when 1 (via MEM_INT_IMEM_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a58ff6e112c09f798be014fdf84385135" name="ae41ebd5785b09640a00df194b1a0fa08a58ff6e112c09f798be014fdf84385135"></a>SYSINFO_SOC_MEM_INT_DMEM&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (3) (r/-): Processor-internal data memory implemented when 1 (via MEM_INT_DMEM_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a3e50b1c24eec0f1811d5630e6dd33e93" name="ae41ebd5785b09640a00df194b1a0fa08a3e50b1c24eec0f1811d5630e6dd33e93"></a>SYSINFO_SOC_OCD&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (4) (r/-): On-chip debugger implemented when 1 (via OCD_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a124c4c2b101008b0e3f1d82efec11c26" name="ae41ebd5785b09640a00df194b1a0fa08a124c4c2b101008b0e3f1d82efec11c26"></a>SYSINFO_SOC_ICACHE&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (5) (r/-): Processor-internal instruction cache implemented when 1 (via ICACHE_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a9823c2c0945997ed0d7e5eb473d81e41" name="ae41ebd5785b09640a00df194b1a0fa08a9823c2c0945997ed0d7e5eb473d81e41"></a>SYSINFO_SOC_DCACHE&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (6) (r/-): Processor-internal instruction cache implemented when 1 (via DCACHE_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a579f26ab04d4fd9af8e419df465695ca" name="ae41ebd5785b09640a00df194b1a0fa08a579f26ab04d4fd9af8e419df465695ca"></a>SYSINFO_SOC_XBUS_CACHE&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (8) (r/-): External bus cache implemented when 1 (via XBUS_CACHE_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a516a2e254ae63e017caefbeed20f54e9" name="ae41ebd5785b09640a00df194b1a0fa08a516a2e254ae63e017caefbeed20f54e9"></a>SYSINFO_SOC_XIP&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (9) (r/-): Execute in-place module implemented when 1 (via XIP_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08ac943fc33a2c1c25c3ab075228b87c0ef" name="ae41ebd5785b09640a00df194b1a0fa08ac943fc33a2c1c25c3ab075228b87c0ef"></a>SYSINFO_SOC_XIP_CACHE&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (10) (r/-): Execute in-place cache implemented when 1 (via XIP_CACHE_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a161826adba27e19186c5005626c160b8" name="ae41ebd5785b09640a00df194b1a0fa08a161826adba27e19186c5005626c160b8"></a>SYSINFO_SOC_OCD_AUTH&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (11) (r/-): On-chip debugger authentication implemented when 1 (via OCD_AUTHENTICATION generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08aaeafc2591f2cc95e9ff1fdee1e1c26e8" name="ae41ebd5785b09640a00df194b1a0fa08aaeafc2591f2cc95e9ff1fdee1e1c26e8"></a>SYSINFO_SOC_IMEM_ROM&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (12) (r/-): Processor-internal instruction memory implemented as pre-initialized ROM when 1 (via BOOT_MODE_SELECT generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a3bbac94e7f1f021f14cefa929b79e9d9" name="ae41ebd5785b09640a00df194b1a0fa08a3bbac94e7f1f021f14cefa929b79e9d9"></a>SYSINFO_SOC_IO_TWD&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (13) (r/-): Two-wire device implemented when 1 (via IO_TWD_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a24658727efef9747414b5da8f26de66d" name="ae41ebd5785b09640a00df194b1a0fa08a24658727efef9747414b5da8f26de66d"></a>SYSINFO_SOC_IO_DMA&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (14) (r/-): Direct memory access controller implemented when 1 (via IO_DMA_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a62a2337b33a2f65b6efd5c91e699c2d1" name="ae41ebd5785b09640a00df194b1a0fa08a62a2337b33a2f65b6efd5c91e699c2d1"></a>SYSINFO_SOC_IO_GPIO&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (15) (r/-): General purpose input/output port unit implemented when 1 (via IO_GPIO_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08adc914c065f5b51ae0881a6b62b54a3db" name="ae41ebd5785b09640a00df194b1a0fa08adc914c065f5b51ae0881a6b62b54a3db"></a>SYSINFO_SOC_IO_CLINT&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (16) (r/-): Core local interruptor implemented when 1 (via IO_CLINT_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a244710794e00c93e91a7f13d533cb139" name="ae41ebd5785b09640a00df194b1a0fa08a244710794e00c93e91a7f13d533cb139"></a>SYSINFO_SOC_IO_UART0&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (17) (r/-): Primary universal asynchronous receiver/transmitter 0 implemented when 1 (via IO_UART0_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a4cf4b1a83a4b52efbf26eace21f5ab20" name="ae41ebd5785b09640a00df194b1a0fa08a4cf4b1a83a4b52efbf26eace21f5ab20"></a>SYSINFO_SOC_IO_SPI&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (18) (r/-): Serial peripheral interface implemented when 1 (via IO_SPI_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a179401244ac42bc4aac3108ca9bbb9c3" name="ae41ebd5785b09640a00df194b1a0fa08a179401244ac42bc4aac3108ca9bbb9c3"></a>SYSINFO_SOC_IO_TWI&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (19) (r/-): Two-wire interface implemented when 1 (via IO_TWI_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a8dc202143c3b13850bccf16380466399" name="ae41ebd5785b09640a00df194b1a0fa08a8dc202143c3b13850bccf16380466399"></a>SYSINFO_SOC_IO_PWM&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (20) (r/-): Pulse-width modulation unit implemented when 1 (via IO_PWM_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08afc964f39427cbc4090a960967eada7be" name="ae41ebd5785b09640a00df194b1a0fa08afc964f39427cbc4090a960967eada7be"></a>SYSINFO_SOC_IO_WDT&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (21) (r/-): Watchdog timer implemented when 1 (via IO_WDT_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08ae725c2452eeb33e3230dcfb3450598e6" name="ae41ebd5785b09640a00df194b1a0fa08ae725c2452eeb33e3230dcfb3450598e6"></a>SYSINFO_SOC_IO_CFS&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (22) (r/-): Custom functions subsystem implemented when 1 (via IO_CFS_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a44892276837b2b1bbe6ef9faa715ad5d" name="ae41ebd5785b09640a00df194b1a0fa08a44892276837b2b1bbe6ef9faa715ad5d"></a>SYSINFO_SOC_IO_TRNG&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (23) (r/-): True random number generator implemented when 1 (via IO_TRNG_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a84088f6664a3dc19041dfad5b551ced9" name="ae41ebd5785b09640a00df194b1a0fa08a84088f6664a3dc19041dfad5b551ced9"></a>SYSINFO_SOC_IO_SDI&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (24) (r/-): Serial data interface implemented when 1 (via IO_SDI_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a52b0ca1ef2af5e9c9a0250440b2de9e5" name="ae41ebd5785b09640a00df194b1a0fa08a52b0ca1ef2af5e9c9a0250440b2de9e5"></a>SYSINFO_SOC_IO_UART1&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (25) (r/-): Secondary universal asynchronous receiver/transmitter 1 implemented when 1 (via IO_UART1_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a164c5c9dc702b4b5fc71110fc047c7f1" name="ae41ebd5785b09640a00df194b1a0fa08a164c5c9dc702b4b5fc71110fc047c7f1"></a>SYSINFO_SOC_IO_NEOLED&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (26) (r/-): NeoPixel-compatible smart LED interface implemented when 1 (via IO_NEOLED_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08ad1b8d38e3715485242756cd37b7c1fe9" name="ae41ebd5785b09640a00df194b1a0fa08ad1b8d38e3715485242756cd37b7c1fe9"></a>SYSINFO_SOC_IO_XIRQ&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (27) (r/-): External interrupt controller implemented when 1 (via XIRQ_NUM_IO generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a4aea6c006f9c999720b1dd6166a01afe" name="ae41ebd5785b09640a00df194b1a0fa08a4aea6c006f9c999720b1dd6166a01afe"></a>SYSINFO_SOC_IO_GPTMR&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (28) (r/-): General purpose timer implemented when 1 (via IO_GPTMR_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08a26b25f1b47f62e98ff0920544f56b57e" name="ae41ebd5785b09640a00df194b1a0fa08a26b25f1b47f62e98ff0920544f56b57e"></a>SYSINFO_SOC_IO_SLINK&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (29) (r/-): Stream link interface implemented when 1 (via IO_SLINK_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08aa8ec3b39b36f13ee4f97a72700e881a8" name="ae41ebd5785b09640a00df194b1a0fa08aa8ec3b39b36f13ee4f97a72700e881a8"></a>SYSINFO_SOC_IO_ONEWIRE&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (30) (r/-): 1-wire interface controller implemented when 1 (via IO_ONEWIRE_EN generic) </p> +</td></tr> +<tr><td class="fieldname"><a id="ae41ebd5785b09640a00df194b1a0fa08ab89821e2c61ccb9db6324ee503f9dfa6" name="ae41ebd5785b09640a00df194b1a0fa08ab89821e2c61ccb9db6324ee503f9dfa6"></a>SYSINFO_SOC_IO_CRC&#160;</td><td class="fielddoc"><p>SYSINFO_SOC (31) (r/-): Cyclic redundancy check unit implemented when 1 (via IO_CRC_EN generic) </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a098105f8a133087f286c7010c5dec8dd" name="a098105f8a133087f286c7010c5dec8dd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a098105f8a133087f286c7010c5dec8dd">&#9670;&#160;</a></span>neorv32_sysinfo_get_clk()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_sysinfo_get_clk </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current processor clock frequency.</p> +<dl class="section return"><dt>Returns</dt><dd>Clock frequency in Hz. </dd></dl> + +</div> +</div> +<a id="a9b1ca94e298533641547ee448e1c52b3" name="a9b1ca94e298533641547ee448e1c52b3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9b1ca94e298533641547ee448e1c52b3">&#9670;&#160;</a></span>neorv32_sysinfo_set_clk()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_sysinfo_set_clk </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>clock</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Set processor clock frequency.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">clock</td><td>Clock frequency in Hz. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__sysinfo_8h_source.html b/sw/neorv32__sysinfo_8h_source.html new file mode 100644 index 0000000000..25cf2e2467 --- /dev/null +++ b/sw/neorv32__sysinfo_8h_source.html @@ -0,0 +1,258 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_sysinfo.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_sysinfo.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__sysinfo_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef neorv32_sysinfo_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define neorv32_sysinfo_h</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00027" data-start="{" data-end="};"> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="structneorv32__sysinfo__t.html"> 27</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="structneorv32__sysinfo__t.html#a3f8ce96050fc0a680afa9b7fdf7cb35c"> 28</a></span> uint32_t <a class="code hl_variable" href="structneorv32__sysinfo__t.html#a3f8ce96050fc0a680afa9b7fdf7cb35c">CLK</a>; </div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__sysinfo__t.html#a51eee92b1824c1b19eb0a83a0a9c7d4c"> 29</a></span> <span class="keyword">const</span> uint8_t MEM[4]; </div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__sysinfo__t.html#ac43abe3b416da3a2895d1d06537a14c3"> 30</a></span> <span class="keyword">const</span> uint32_t <a class="code hl_variable" href="structneorv32__sysinfo__t.html#ac43abe3b416da3a2895d1d06537a14c3">SOC</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__sysinfo__t.html#ada99a36ccda38b254d5b6a84883101f6"> 31</a></span> <span class="keyword">const</span> uint32_t <a class="code hl_variable" href="structneorv32__sysinfo__t.html#ada99a36ccda38b254d5b6a84883101f6">CACHE</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>} <a class="code hl_struct" href="structneorv32__sysinfo__t.html">neorv32_sysinfo_t</a>;</div> +</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a140e23434ef7e85b2b38d8ae9695227b"> 35</a></span><span class="preprocessor">#define NEORV32_SYSINFO ((neorv32_sysinfo_t*) (NEORV32_SYSINFO_BASE))</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="foldopen" id="foldopen00038" data-start="{" data-end="};"> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5f"> 38</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5f">NEORV32_SYSINFO_MEM_enum</a> {</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa807d9e70e78e2ba3d5bfb902cc1cdc53"> 39</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa807d9e70e78e2ba3d5bfb902cc1cdc53">SYSINFO_MEM_IMEM</a> = 0, </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa8a46c064e5a1339978a5fb1f41301894"> 40</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa8a46c064e5a1339978a5fb1f41301894">SYSINFO_MEM_DMEM</a> = 1, </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa1671eeca5b3a6d1c8069658e0b7bc182"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa1671eeca5b3a6d1c8069658e0b7bc182">SYSINFO_MEM_res</a> = 2, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa0f4e1e1c9320949bdacd2bc7ba6179f7">SYSINFO_MEM_BOOT</a> = 3 </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa0f4e1e1c9320949bdacd2bc7ba6179f7"> 43</a></span>};</div> +</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div> +<div class="foldopen" id="foldopen00046" data-start="{" data-end="};"> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08"> 46</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08">NEORV32_SYSINFO_SOC_enum</a> {</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a6899a935ae8c4aef08d828f250342e9a"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a6899a935ae8c4aef08d828f250342e9a">SYSINFO_SOC_BOOTLOADER</a> = 0, </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08add6721803c9d79f1e50248927ba30e16"> 48</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08add6721803c9d79f1e50248927ba30e16">SYSINFO_SOC_XBUS</a> = 1, </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a1c2fbb0cc03a1df2e5e8a472f3f1ca57"> 49</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a1c2fbb0cc03a1df2e5e8a472f3f1ca57">SYSINFO_SOC_MEM_INT_IMEM</a> = 2, </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a58ff6e112c09f798be014fdf84385135"> 50</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a58ff6e112c09f798be014fdf84385135">SYSINFO_SOC_MEM_INT_DMEM</a> = 3, </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3e50b1c24eec0f1811d5630e6dd33e93"> 51</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3e50b1c24eec0f1811d5630e6dd33e93">SYSINFO_SOC_OCD</a> = 4, </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a124c4c2b101008b0e3f1d82efec11c26"> 52</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a124c4c2b101008b0e3f1d82efec11c26">SYSINFO_SOC_ICACHE</a> = 5, </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a9823c2c0945997ed0d7e5eb473d81e41"> 53</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a9823c2c0945997ed0d7e5eb473d81e41">SYSINFO_SOC_DCACHE</a> = 6, </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a579f26ab04d4fd9af8e419df465695ca"> 55</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a579f26ab04d4fd9af8e419df465695ca">SYSINFO_SOC_XBUS_CACHE</a> = 8, </div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a516a2e254ae63e017caefbeed20f54e9"> 56</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a516a2e254ae63e017caefbeed20f54e9">SYSINFO_SOC_XIP</a> = 9, </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ac943fc33a2c1c25c3ab075228b87c0ef"> 57</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ac943fc33a2c1c25c3ab075228b87c0ef">SYSINFO_SOC_XIP_CACHE</a> = 10, </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a161826adba27e19186c5005626c160b8"> 58</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a161826adba27e19186c5005626c160b8">SYSINFO_SOC_OCD_AUTH</a> = 11, </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aaeafc2591f2cc95e9ff1fdee1e1c26e8"> 59</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aaeafc2591f2cc95e9ff1fdee1e1c26e8">SYSINFO_SOC_IMEM_ROM</a> = 12, </div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3bbac94e7f1f021f14cefa929b79e9d9"> 60</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3bbac94e7f1f021f14cefa929b79e9d9">SYSINFO_SOC_IO_TWD</a> = 13, </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a24658727efef9747414b5da8f26de66d"> 61</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a24658727efef9747414b5da8f26de66d">SYSINFO_SOC_IO_DMA</a> = 14, </div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a62a2337b33a2f65b6efd5c91e699c2d1"> 62</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a62a2337b33a2f65b6efd5c91e699c2d1">SYSINFO_SOC_IO_GPIO</a> = 15, </div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08adc914c065f5b51ae0881a6b62b54a3db"> 63</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08adc914c065f5b51ae0881a6b62b54a3db">SYSINFO_SOC_IO_CLINT</a> = 16, </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a244710794e00c93e91a7f13d533cb139"> 64</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a244710794e00c93e91a7f13d533cb139">SYSINFO_SOC_IO_UART0</a> = 17, </div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4cf4b1a83a4b52efbf26eace21f5ab20"> 65</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4cf4b1a83a4b52efbf26eace21f5ab20">SYSINFO_SOC_IO_SPI</a> = 18, </div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a179401244ac42bc4aac3108ca9bbb9c3"> 66</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a179401244ac42bc4aac3108ca9bbb9c3">SYSINFO_SOC_IO_TWI</a> = 19, </div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a8dc202143c3b13850bccf16380466399"> 67</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a8dc202143c3b13850bccf16380466399">SYSINFO_SOC_IO_PWM</a> = 20, </div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08afc964f39427cbc4090a960967eada7be"> 68</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08afc964f39427cbc4090a960967eada7be">SYSINFO_SOC_IO_WDT</a> = 21, </div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ae725c2452eeb33e3230dcfb3450598e6"> 69</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ae725c2452eeb33e3230dcfb3450598e6">SYSINFO_SOC_IO_CFS</a> = 22, </div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a44892276837b2b1bbe6ef9faa715ad5d"> 70</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a44892276837b2b1bbe6ef9faa715ad5d">SYSINFO_SOC_IO_TRNG</a> = 23, </div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a84088f6664a3dc19041dfad5b551ced9"> 71</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a84088f6664a3dc19041dfad5b551ced9">SYSINFO_SOC_IO_SDI</a> = 24, </div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a52b0ca1ef2af5e9c9a0250440b2de9e5"> 72</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a52b0ca1ef2af5e9c9a0250440b2de9e5">SYSINFO_SOC_IO_UART1</a> = 25, </div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a164c5c9dc702b4b5fc71110fc047c7f1"> 73</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a164c5c9dc702b4b5fc71110fc047c7f1">SYSINFO_SOC_IO_NEOLED</a> = 26, </div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ad1b8d38e3715485242756cd37b7c1fe9"> 74</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ad1b8d38e3715485242756cd37b7c1fe9">SYSINFO_SOC_IO_XIRQ</a> = 27, </div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4aea6c006f9c999720b1dd6166a01afe"> 75</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4aea6c006f9c999720b1dd6166a01afe">SYSINFO_SOC_IO_GPTMR</a> = 28, </div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a26b25f1b47f62e98ff0920544f56b57e"> 76</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a26b25f1b47f62e98ff0920544f56b57e">SYSINFO_SOC_IO_SLINK</a> = 29, </div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aa8ec3b39b36f13ee4f97a72700e881a8"> 77</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aa8ec3b39b36f13ee4f97a72700e881a8">SYSINFO_SOC_IO_ONEWIRE</a> = 30, </div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ab89821e2c61ccb9db6324ee503f9dfa6">SYSINFO_SOC_IO_CRC</a> = 31 </div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ab89821e2c61ccb9db6324ee503f9dfa6"> 79</a></span>};</div> +</div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div> +<div class="foldopen" id="foldopen00082" data-start="{" data-end="};"> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1ea"> 82</a></span> <span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1ea">NEORV32_SYSINFO_CACHE_enum</a> {</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa1bdccae04b3bd84988297c16ffbefaf2"> 83</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa1bdccae04b3bd84988297c16ffbefaf2">SYSINFO_CACHE_INST_BLOCK_SIZE_0</a> = 0, </div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf4a91f729e16adc72c2419d9ad3807e5"> 84</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf4a91f729e16adc72c2419d9ad3807e5">SYSINFO_CACHE_INST_BLOCK_SIZE_3</a> = 3, </div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabd13283ebd48dee48aee2cff3a560fe9"> 85</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabd13283ebd48dee48aee2cff3a560fe9">SYSINFO_CACHE_INST_NUM_BLOCKS_0</a> = 4, </div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa02f235d7d2fc30c4ae3a383a631d9060"> 86</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa02f235d7d2fc30c4ae3a383a631d9060">SYSINFO_CACHE_INST_NUM_BLOCKS_3</a> = 7, </div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa8a2c7079b44f4255196de49d6d59afdb"> 88</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa8a2c7079b44f4255196de49d6d59afdb">SYSINFO_CACHE_DATA_BLOCK_SIZE_0</a> = 8, </div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaaec544d85ce3296ca9e97e833e20936e"> 89</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaaec544d85ce3296ca9e97e833e20936e">SYSINFO_CACHE_DATA_BLOCK_SIZE_3</a> = 11, </div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabb743d3ca41bf44aa6ff188ec898cfb8"> 90</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabb743d3ca41bf44aa6ff188ec898cfb8">SYSINFO_CACHE_DATA_NUM_BLOCKS_0</a> = 12, </div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa5778928b290b3b1cba42412de4dabf96"> 91</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa5778928b290b3b1cba42412de4dabf96">SYSINFO_CACHE_DATA_NUM_BLOCKS_3</a> = 15, </div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaea0a88adaa9d0b5e1f4e5cca630ed6f8"> 93</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaea0a88adaa9d0b5e1f4e5cca630ed6f8">SYSINFO_CACHE_XIP_BLOCK_SIZE_0</a> = 16, </div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa44d4d12c0395e924b8bf7dc40059bfba"> 94</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa44d4d12c0395e924b8bf7dc40059bfba">SYSINFO_CACHE_XIP_BLOCK_SIZE_3</a> = 19, </div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa90ae265a72ea53d99b474798e721c317"> 95</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa90ae265a72ea53d99b474798e721c317">SYSINFO_CACHE_XIP_NUM_BLOCKS_0</a> = 20, </div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf88eacb3ed63d5a048a554927812460b"> 96</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf88eacb3ed63d5a048a554927812460b">SYSINFO_CACHE_XIP_NUM_BLOCKS_3</a> = 23, </div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa3f6e68cdf6bb641902a9a6d32c1f9d9e"> 98</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa3f6e68cdf6bb641902a9a6d32c1f9d9e">SYSINFO_CACHE_XBUS_BLOCK_SIZE_0</a> = 24, </div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa908c60a836b03129098cb70fe2a860a1"> 99</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa908c60a836b03129098cb70fe2a860a1">SYSINFO_CACHE_XBUS_BLOCK_SIZE_3</a> = 27, </div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa73553a14d3425498be9d3802ca5f1459"> 100</a></span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa73553a14d3425498be9d3802ca5f1459">SYSINFO_CACHE_XBUS_NUM_BLOCKS_0</a> = 28, </div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_enumvalue" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaade7f119164ff2c3800b4464a65ca247b">SYSINFO_CACHE_XBUS_NUM_BLOCKS_3</a> = 31 </div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"><a class="line" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaade7f119164ff2c3800b4464a65ca247b"> 102</a></span>};</div> +</div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span>uint32_t <a class="code hl_function" href="neorv32__sysinfo_8h.html#a098105f8a133087f286c7010c5dec8dd">neorv32_sysinfo_get_clk</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__sysinfo_8h.html#a9b1ca94e298533641547ee448e1c52b3">neorv32_sysinfo_set_clk</a>(uint32_t clock);</div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_sysinfo_h</span></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a098105f8a133087f286c7010c5dec8dd"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a098105f8a133087f286c7010c5dec8dd">neorv32_sysinfo_get_clk</a></div><div class="ttdeci">uint32_t neorv32_sysinfo_get_clk(void)</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.c:24</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1ea"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1ea">NEORV32_SYSINFO_CACHE_enum</a></div><div class="ttdeci">NEORV32_SYSINFO_CACHE_enum</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:82</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaa02f235d7d2fc30c4ae3a383a631d9060"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa02f235d7d2fc30c4ae3a383a631d9060">SYSINFO_CACHE_INST_NUM_BLOCKS_3</a></div><div class="ttdeci">@ SYSINFO_CACHE_INST_NUM_BLOCKS_3</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:86</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaa1bdccae04b3bd84988297c16ffbefaf2"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa1bdccae04b3bd84988297c16ffbefaf2">SYSINFO_CACHE_INST_BLOCK_SIZE_0</a></div><div class="ttdeci">@ SYSINFO_CACHE_INST_BLOCK_SIZE_0</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:83</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaa3f6e68cdf6bb641902a9a6d32c1f9d9e"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa3f6e68cdf6bb641902a9a6d32c1f9d9e">SYSINFO_CACHE_XBUS_BLOCK_SIZE_0</a></div><div class="ttdeci">@ SYSINFO_CACHE_XBUS_BLOCK_SIZE_0</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:98</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaa44d4d12c0395e924b8bf7dc40059bfba"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa44d4d12c0395e924b8bf7dc40059bfba">SYSINFO_CACHE_XIP_BLOCK_SIZE_3</a></div><div class="ttdeci">@ SYSINFO_CACHE_XIP_BLOCK_SIZE_3</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:94</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaa5778928b290b3b1cba42412de4dabf96"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa5778928b290b3b1cba42412de4dabf96">SYSINFO_CACHE_DATA_NUM_BLOCKS_3</a></div><div class="ttdeci">@ SYSINFO_CACHE_DATA_NUM_BLOCKS_3</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:91</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaa73553a14d3425498be9d3802ca5f1459"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa73553a14d3425498be9d3802ca5f1459">SYSINFO_CACHE_XBUS_NUM_BLOCKS_0</a></div><div class="ttdeci">@ SYSINFO_CACHE_XBUS_NUM_BLOCKS_0</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:100</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaa8a2c7079b44f4255196de49d6d59afdb"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa8a2c7079b44f4255196de49d6d59afdb">SYSINFO_CACHE_DATA_BLOCK_SIZE_0</a></div><div class="ttdeci">@ SYSINFO_CACHE_DATA_BLOCK_SIZE_0</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:88</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaa908c60a836b03129098cb70fe2a860a1"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa908c60a836b03129098cb70fe2a860a1">SYSINFO_CACHE_XBUS_BLOCK_SIZE_3</a></div><div class="ttdeci">@ SYSINFO_CACHE_XBUS_BLOCK_SIZE_3</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:99</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaa90ae265a72ea53d99b474798e721c317"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa90ae265a72ea53d99b474798e721c317">SYSINFO_CACHE_XIP_NUM_BLOCKS_0</a></div><div class="ttdeci">@ SYSINFO_CACHE_XIP_NUM_BLOCKS_0</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:95</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaaaec544d85ce3296ca9e97e833e20936e"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaaec544d85ce3296ca9e97e833e20936e">SYSINFO_CACHE_DATA_BLOCK_SIZE_3</a></div><div class="ttdeci">@ SYSINFO_CACHE_DATA_BLOCK_SIZE_3</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:89</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaabb743d3ca41bf44aa6ff188ec898cfb8"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabb743d3ca41bf44aa6ff188ec898cfb8">SYSINFO_CACHE_DATA_NUM_BLOCKS_0</a></div><div class="ttdeci">@ SYSINFO_CACHE_DATA_NUM_BLOCKS_0</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:90</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaabd13283ebd48dee48aee2cff3a560fe9"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabd13283ebd48dee48aee2cff3a560fe9">SYSINFO_CACHE_INST_NUM_BLOCKS_0</a></div><div class="ttdeci">@ SYSINFO_CACHE_INST_NUM_BLOCKS_0</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:85</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaade7f119164ff2c3800b4464a65ca247b"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaade7f119164ff2c3800b4464a65ca247b">SYSINFO_CACHE_XBUS_NUM_BLOCKS_3</a></div><div class="ttdeci">@ SYSINFO_CACHE_XBUS_NUM_BLOCKS_3</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:101</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaaea0a88adaa9d0b5e1f4e5cca630ed6f8"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaea0a88adaa9d0b5e1f4e5cca630ed6f8">SYSINFO_CACHE_XIP_BLOCK_SIZE_0</a></div><div class="ttdeci">@ SYSINFO_CACHE_XIP_BLOCK_SIZE_0</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:93</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaaf4a91f729e16adc72c2419d9ad3807e5"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf4a91f729e16adc72c2419d9ad3807e5">SYSINFO_CACHE_INST_BLOCK_SIZE_3</a></div><div class="ttdeci">@ SYSINFO_CACHE_INST_BLOCK_SIZE_3</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:84</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a50ee5bda9789b5cffae281db5d10a1eaaf88eacb3ed63d5a048a554927812460b"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf88eacb3ed63d5a048a554927812460b">SYSINFO_CACHE_XIP_NUM_BLOCKS_3</a></div><div class="ttdeci">@ SYSINFO_CACHE_XIP_NUM_BLOCKS_3</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:96</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_a9b1ca94e298533641547ee448e1c52b3"><div class="ttname"><a href="neorv32__sysinfo_8h.html#a9b1ca94e298533641547ee448e1c52b3">neorv32_sysinfo_set_clk</a></div><div class="ttdeci">void neorv32_sysinfo_set_clk(uint32_t clock)</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.c:35</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08">NEORV32_SYSINFO_SOC_enum</a></div><div class="ttdeci">NEORV32_SYSINFO_SOC_enum</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:46</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a124c4c2b101008b0e3f1d82efec11c26"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a124c4c2b101008b0e3f1d82efec11c26">SYSINFO_SOC_ICACHE</a></div><div class="ttdeci">@ SYSINFO_SOC_ICACHE</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:52</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a161826adba27e19186c5005626c160b8"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a161826adba27e19186c5005626c160b8">SYSINFO_SOC_OCD_AUTH</a></div><div class="ttdeci">@ SYSINFO_SOC_OCD_AUTH</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:58</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a164c5c9dc702b4b5fc71110fc047c7f1"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a164c5c9dc702b4b5fc71110fc047c7f1">SYSINFO_SOC_IO_NEOLED</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_NEOLED</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:73</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a179401244ac42bc4aac3108ca9bbb9c3"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a179401244ac42bc4aac3108ca9bbb9c3">SYSINFO_SOC_IO_TWI</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_TWI</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:66</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a1c2fbb0cc03a1df2e5e8a472f3f1ca57"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a1c2fbb0cc03a1df2e5e8a472f3f1ca57">SYSINFO_SOC_MEM_INT_IMEM</a></div><div class="ttdeci">@ SYSINFO_SOC_MEM_INT_IMEM</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:49</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a244710794e00c93e91a7f13d533cb139"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a244710794e00c93e91a7f13d533cb139">SYSINFO_SOC_IO_UART0</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_UART0</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:64</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a24658727efef9747414b5da8f26de66d"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a24658727efef9747414b5da8f26de66d">SYSINFO_SOC_IO_DMA</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_DMA</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:61</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a26b25f1b47f62e98ff0920544f56b57e"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a26b25f1b47f62e98ff0920544f56b57e">SYSINFO_SOC_IO_SLINK</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_SLINK</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:76</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a3bbac94e7f1f021f14cefa929b79e9d9"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3bbac94e7f1f021f14cefa929b79e9d9">SYSINFO_SOC_IO_TWD</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_TWD</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:60</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a3e50b1c24eec0f1811d5630e6dd33e93"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3e50b1c24eec0f1811d5630e6dd33e93">SYSINFO_SOC_OCD</a></div><div class="ttdeci">@ SYSINFO_SOC_OCD</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:51</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a44892276837b2b1bbe6ef9faa715ad5d"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a44892276837b2b1bbe6ef9faa715ad5d">SYSINFO_SOC_IO_TRNG</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_TRNG</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:70</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a4aea6c006f9c999720b1dd6166a01afe"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4aea6c006f9c999720b1dd6166a01afe">SYSINFO_SOC_IO_GPTMR</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_GPTMR</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:75</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a4cf4b1a83a4b52efbf26eace21f5ab20"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4cf4b1a83a4b52efbf26eace21f5ab20">SYSINFO_SOC_IO_SPI</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_SPI</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:65</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a516a2e254ae63e017caefbeed20f54e9"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a516a2e254ae63e017caefbeed20f54e9">SYSINFO_SOC_XIP</a></div><div class="ttdeci">@ SYSINFO_SOC_XIP</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:56</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a52b0ca1ef2af5e9c9a0250440b2de9e5"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a52b0ca1ef2af5e9c9a0250440b2de9e5">SYSINFO_SOC_IO_UART1</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_UART1</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:72</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a579f26ab04d4fd9af8e419df465695ca"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a579f26ab04d4fd9af8e419df465695ca">SYSINFO_SOC_XBUS_CACHE</a></div><div class="ttdeci">@ SYSINFO_SOC_XBUS_CACHE</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:55</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a58ff6e112c09f798be014fdf84385135"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a58ff6e112c09f798be014fdf84385135">SYSINFO_SOC_MEM_INT_DMEM</a></div><div class="ttdeci">@ SYSINFO_SOC_MEM_INT_DMEM</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:50</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a62a2337b33a2f65b6efd5c91e699c2d1"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a62a2337b33a2f65b6efd5c91e699c2d1">SYSINFO_SOC_IO_GPIO</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_GPIO</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:62</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a6899a935ae8c4aef08d828f250342e9a"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a6899a935ae8c4aef08d828f250342e9a">SYSINFO_SOC_BOOTLOADER</a></div><div class="ttdeci">@ SYSINFO_SOC_BOOTLOADER</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:47</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a84088f6664a3dc19041dfad5b551ced9"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a84088f6664a3dc19041dfad5b551ced9">SYSINFO_SOC_IO_SDI</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_SDI</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:71</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a8dc202143c3b13850bccf16380466399"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a8dc202143c3b13850bccf16380466399">SYSINFO_SOC_IO_PWM</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_PWM</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:67</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08a9823c2c0945997ed0d7e5eb473d81e41"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a9823c2c0945997ed0d7e5eb473d81e41">SYSINFO_SOC_DCACHE</a></div><div class="ttdeci">@ SYSINFO_SOC_DCACHE</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:53</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08aa8ec3b39b36f13ee4f97a72700e881a8"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aa8ec3b39b36f13ee4f97a72700e881a8">SYSINFO_SOC_IO_ONEWIRE</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_ONEWIRE</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:77</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08aaeafc2591f2cc95e9ff1fdee1e1c26e8"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aaeafc2591f2cc95e9ff1fdee1e1c26e8">SYSINFO_SOC_IMEM_ROM</a></div><div class="ttdeci">@ SYSINFO_SOC_IMEM_ROM</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:59</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08ab89821e2c61ccb9db6324ee503f9dfa6"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ab89821e2c61ccb9db6324ee503f9dfa6">SYSINFO_SOC_IO_CRC</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_CRC</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:78</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08ac943fc33a2c1c25c3ab075228b87c0ef"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ac943fc33a2c1c25c3ab075228b87c0ef">SYSINFO_SOC_XIP_CACHE</a></div><div class="ttdeci">@ SYSINFO_SOC_XIP_CACHE</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:57</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08ad1b8d38e3715485242756cd37b7c1fe9"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ad1b8d38e3715485242756cd37b7c1fe9">SYSINFO_SOC_IO_XIRQ</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_XIRQ</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:74</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08adc914c065f5b51ae0881a6b62b54a3db"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08adc914c065f5b51ae0881a6b62b54a3db">SYSINFO_SOC_IO_CLINT</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_CLINT</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:63</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08add6721803c9d79f1e50248927ba30e16"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08add6721803c9d79f1e50248927ba30e16">SYSINFO_SOC_XBUS</a></div><div class="ttdeci">@ SYSINFO_SOC_XBUS</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:48</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08ae725c2452eeb33e3230dcfb3450598e6"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ae725c2452eeb33e3230dcfb3450598e6">SYSINFO_SOC_IO_CFS</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_CFS</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:69</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_ae41ebd5785b09640a00df194b1a0fa08afc964f39427cbc4090a960967eada7be"><div class="ttname"><a href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08afc964f39427cbc4090a960967eada7be">SYSINFO_SOC_IO_WDT</a></div><div class="ttdeci">@ SYSINFO_SOC_IO_WDT</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:68</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_aebaa5f3f231003a05c899cc1491b8c5f"><div class="ttname"><a href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5f">NEORV32_SYSINFO_MEM_enum</a></div><div class="ttdeci">NEORV32_SYSINFO_MEM_enum</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:38</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_aebaa5f3f231003a05c899cc1491b8c5fa0f4e1e1c9320949bdacd2bc7ba6179f7"><div class="ttname"><a href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa0f4e1e1c9320949bdacd2bc7ba6179f7">SYSINFO_MEM_BOOT</a></div><div class="ttdeci">@ SYSINFO_MEM_BOOT</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:42</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_aebaa5f3f231003a05c899cc1491b8c5fa1671eeca5b3a6d1c8069658e0b7bc182"><div class="ttname"><a href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa1671eeca5b3a6d1c8069658e0b7bc182">SYSINFO_MEM_res</a></div><div class="ttdeci">@ SYSINFO_MEM_res</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:41</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_aebaa5f3f231003a05c899cc1491b8c5fa807d9e70e78e2ba3d5bfb902cc1cdc53"><div class="ttname"><a href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa807d9e70e78e2ba3d5bfb902cc1cdc53">SYSINFO_MEM_IMEM</a></div><div class="ttdeci">@ SYSINFO_MEM_IMEM</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:39</div></div> +<div class="ttc" id="aneorv32__sysinfo_8h_html_aebaa5f3f231003a05c899cc1491b8c5fa8a46c064e5a1339978a5fb1f41301894"><div class="ttname"><a href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa8a46c064e5a1339978a5fb1f41301894">SYSINFO_MEM_DMEM</a></div><div class="ttdeci">@ SYSINFO_MEM_DMEM</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:40</div></div> +<div class="ttc" id="astructneorv32__sysinfo__t_html"><div class="ttname"><a href="structneorv32__sysinfo__t.html">neorv32_sysinfo_t</a></div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:27</div></div> +<div class="ttc" id="astructneorv32__sysinfo__t_html_a3f8ce96050fc0a680afa9b7fdf7cb35c"><div class="ttname"><a href="structneorv32__sysinfo__t.html#a3f8ce96050fc0a680afa9b7fdf7cb35c">neorv32_sysinfo_t::CLK</a></div><div class="ttdeci">uint32_t CLK</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:28</div></div> +<div class="ttc" id="astructneorv32__sysinfo__t_html_ac43abe3b416da3a2895d1d06537a14c3"><div class="ttname"><a href="structneorv32__sysinfo__t.html#ac43abe3b416da3a2895d1d06537a14c3">neorv32_sysinfo_t::SOC</a></div><div class="ttdeci">const uint32_t SOC</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:30</div></div> +<div class="ttc" id="astructneorv32__sysinfo__t_html_ada99a36ccda38b254d5b6a84883101f6"><div class="ttname"><a href="structneorv32__sysinfo__t.html#ada99a36ccda38b254d5b6a84883101f6">neorv32_sysinfo_t::CACHE</a></div><div class="ttdeci">const uint32_t CACHE</div><div class="ttdef"><b>Definition</b> neorv32_sysinfo.h:31</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__trng_8c.html b/sw/neorv32__trng_8c.html new file mode 100644 index 0000000000..e94a73091e --- /dev/null +++ b/sw/neorv32__trng_8c.html @@ -0,0 +1,269 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_trng.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_trng.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>True Random Number Generator (TRNG) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:af0c4139ff68763623b3d658a8dd8b5ce" id="r_af0c4139ff68763623b3d658a8dd8b5ce"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af0c4139ff68763623b3d658a8dd8b5ce">neorv32_trng_available</a> (void)</td></tr> +<tr class="separator:af0c4139ff68763623b3d658a8dd8b5ce"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af64df166369d79bf744de06c8a962304" id="r_af64df166369d79bf744de06c8a962304"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af64df166369d79bf744de06c8a962304">neorv32_trng_enable</a> (void)</td></tr> +<tr class="separator:af64df166369d79bf744de06c8a962304"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae838bc980e28c300dc2c9c3f34a46bb8" id="r_ae838bc980e28c300dc2c9c3f34a46bb8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae838bc980e28c300dc2c9c3f34a46bb8">neorv32_trng_disable</a> (void)</td></tr> +<tr class="separator:ae838bc980e28c300dc2c9c3f34a46bb8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a87cfe338e2ff559f96c73f729465f967" id="r_a87cfe338e2ff559f96c73f729465f967"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a87cfe338e2ff559f96c73f729465f967">neorv32_trng_fifo_clear</a> (void)</td></tr> +<tr class="separator:a87cfe338e2ff559f96c73f729465f967"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad24e44372f4fd1ed29a6967dccab4fb0" id="r_ad24e44372f4fd1ed29a6967dccab4fb0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad24e44372f4fd1ed29a6967dccab4fb0">neorv32_trng_get_fifo_depth</a> (void)</td></tr> +<tr class="separator:ad24e44372f4fd1ed29a6967dccab4fb0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9148bcb6a7c448c364e78fa98aac6985" id="r_a9148bcb6a7c448c364e78fa98aac6985"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9148bcb6a7c448c364e78fa98aac6985">neorv32_trng_get</a> (uint8_t *data)</td></tr> +<tr class="separator:a9148bcb6a7c448c364e78fa98aac6985"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aba36f08dd88f2f3e58353ae72eaa14f7" id="r_aba36f08dd88f2f3e58353ae72eaa14f7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aba36f08dd88f2f3e58353ae72eaa14f7">neorv32_trng_check_sim_mode</a> (void)</td></tr> +<tr class="separator:aba36f08dd88f2f3e58353ae72eaa14f7"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>True Random Number Generator (TRNG) HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the TRNG unit was synthesized (IO_TRNG_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="af0c4139ff68763623b3d658a8dd8b5ce" name="af0c4139ff68763623b3d658a8dd8b5ce"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af0c4139ff68763623b3d658a8dd8b5ce">&#9670;&#160;</a></span>neorv32_trng_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_trng_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TRNG unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if TRNG was not synthesized, 1 if TRNG is available. </dd></dl> + +</div> +</div> +<a id="aba36f08dd88f2f3e58353ae72eaa14f7" name="aba36f08dd88f2f3e58353ae72eaa14f7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aba36f08dd88f2f3e58353ae72eaa14f7">&#9670;&#160;</a></span>neorv32_trng_check_sim_mode()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_trng_check_sim_mode </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TRNG is implemented using SIMULATION mode.</p> +<dl class="section warning"><dt>Warning</dt><dd>In simulation mode the physical entropy source is replaced by a PRNG (LFSR) with very bad random quality.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Simulation mode active when not zero. </dd></dl> + +</div> +</div> +<a id="ae838bc980e28c300dc2c9c3f34a46bb8" name="ae838bc980e28c300dc2c9c3f34a46bb8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae838bc980e28c300dc2c9c3f34a46bb8">&#9670;&#160;</a></span>neorv32_trng_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_trng_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset and disable TRNG. </p> + +</div> +</div> +<a id="af64df166369d79bf744de06c8a962304" name="af64df166369d79bf744de06c8a962304"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af64df166369d79bf744de06c8a962304">&#9670;&#160;</a></span>neorv32_trng_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_trng_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset, configure and enable TRNG. </p> + +</div> +</div> +<a id="a87cfe338e2ff559f96c73f729465f967" name="a87cfe338e2ff559f96c73f729465f967"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a87cfe338e2ff559f96c73f729465f967">&#9670;&#160;</a></span>neorv32_trng_fifo_clear()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_trng_fifo_clear </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Flush TRNG random data FIFO. </p> + +</div> +</div> +<a id="a9148bcb6a7c448c364e78fa98aac6985" name="a9148bcb6a7c448c364e78fa98aac6985"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9148bcb6a7c448c364e78fa98aac6985">&#9670;&#160;</a></span>neorv32_trng_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_trng_get </td> + <td>(</td> + <td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get random data byte from TRNG.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">data</td><td>uint8_t pointer for storing random data byte. Will be set to zero if no valid data available. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Data is valid when 0 and invalid otherwise. </dd></dl> + +</div> +</div> +<a id="ad24e44372f4fd1ed29a6967dccab4fb0" name="ad24e44372f4fd1ed29a6967dccab4fb0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad24e44372f4fd1ed29a6967dccab4fb0">&#9670;&#160;</a></span>neorv32_trng_get_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_trng_get_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get TRNG FIFO depth.</p> +<dl class="section return"><dt>Returns</dt><dd>TRNG FIFO size (number of entries). </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__trng_8h.html b/sw/neorv32__trng_8h.html new file mode 100644 index 0000000000..aa80353e6c --- /dev/null +++ b/sw/neorv32__trng_8h.html @@ -0,0 +1,363 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_trng.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_trng.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>True Random Number Generator (TRNG) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__trng_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__trng__t.html">neorv32_trng_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:af0c4139ff68763623b3d658a8dd8b5ce" id="r_af0c4139ff68763623b3d658a8dd8b5ce"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af0c4139ff68763623b3d658a8dd8b5ce">neorv32_trng_available</a> (void)</td></tr> +<tr class="separator:af0c4139ff68763623b3d658a8dd8b5ce"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af64df166369d79bf744de06c8a962304" id="r_af64df166369d79bf744de06c8a962304"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af64df166369d79bf744de06c8a962304">neorv32_trng_enable</a> (void)</td></tr> +<tr class="separator:af64df166369d79bf744de06c8a962304"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae838bc980e28c300dc2c9c3f34a46bb8" id="r_ae838bc980e28c300dc2c9c3f34a46bb8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae838bc980e28c300dc2c9c3f34a46bb8">neorv32_trng_disable</a> (void)</td></tr> +<tr class="separator:ae838bc980e28c300dc2c9c3f34a46bb8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a87cfe338e2ff559f96c73f729465f967" id="r_a87cfe338e2ff559f96c73f729465f967"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a87cfe338e2ff559f96c73f729465f967">neorv32_trng_fifo_clear</a> (void)</td></tr> +<tr class="separator:a87cfe338e2ff559f96c73f729465f967"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad24e44372f4fd1ed29a6967dccab4fb0" id="r_ad24e44372f4fd1ed29a6967dccab4fb0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad24e44372f4fd1ed29a6967dccab4fb0">neorv32_trng_get_fifo_depth</a> (void)</td></tr> +<tr class="separator:ad24e44372f4fd1ed29a6967dccab4fb0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9148bcb6a7c448c364e78fa98aac6985" id="r_a9148bcb6a7c448c364e78fa98aac6985"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9148bcb6a7c448c364e78fa98aac6985">neorv32_trng_get</a> (uint8_t *data)</td></tr> +<tr class="separator:a9148bcb6a7c448c364e78fa98aac6985"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aba36f08dd88f2f3e58353ae72eaa14f7" id="r_aba36f08dd88f2f3e58353ae72eaa14f7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aba36f08dd88f2f3e58353ae72eaa14f7">neorv32_trng_check_sim_mode</a> (void)</td></tr> +<tr class="separator:aba36f08dd88f2f3e58353ae72eaa14f7"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: True Random Number Generator (TRNG)</h2></td></tr> +<tr class="memitem:a9794ff3746eb5321ad9c2bf522ea26dd" id="r_a9794ff3746eb5321ad9c2bf522ea26dd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9794ff3746eb5321ad9c2bf522ea26dd">NEORV32_TRNG</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__trng__t.html">neorv32_trng_t</a>*) (<a class="el" href="neorv32_8h.html#ab4846cd153e8a23deec45d81cc8372a2">NEORV32_TRNG_BASE</a>))</td></tr> +<tr class="separator:a9794ff3746eb5321ad9c2bf522ea26dd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1440e1355bf5bff17760992adc156b1a" id="r_a1440e1355bf5bff17760992adc156b1a"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1440e1355bf5bff17760992adc156b1a">NEORV32_TRNG_CTRL_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d">TRNG_CTRL_EN</a> = 0 +, <a class="el" href="#a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac">TRNG_CTRL_FIFO_CLR</a> = 1 +, <a class="el" href="#a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52">TRNG_CTRL_FIFO_LSB</a> = 2 +, <a class="el" href="#a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5">TRNG_CTRL_FIFO_MSB</a> = 5 +, <br /> +&#160;&#160;<a class="el" href="#a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5">TRNG_CTRL_SIM_MODE</a> = 6 +, <a class="el" href="#a1440e1355bf5bff17760992adc156b1aac0a6c8451985a61dc522509ded22695f">TRNG_CTRL_AVAIL</a> = 7 +<br /> + }</td></tr> +<tr class="separator:a1440e1355bf5bff17760992adc156b1a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a86e46cb19bb7e716ac5ffec4afc620e2" id="r_a86e46cb19bb7e716ac5ffec4afc620e2"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a86e46cb19bb7e716ac5ffec4afc620e2">NEORV32_TRNG_DATA_enum</a> { <a class="el" href="#a86e46cb19bb7e716ac5ffec4afc620e2ac2a7a79da7010342366ea97a2af2ebe6">TRNG_DATA_LSB</a> = 0 +, <a class="el" href="#a86e46cb19bb7e716ac5ffec4afc620e2ac73221cb67facda1db8fc9591e2f6364">TRNG_DATA_MSB</a> = 7 + }</td></tr> +<tr class="separator:a86e46cb19bb7e716ac5ffec4afc620e2"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>True Random Number Generator (TRNG) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the TRNG unit was synthesized (IO_TRNG_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a9794ff3746eb5321ad9c2bf522ea26dd" name="a9794ff3746eb5321ad9c2bf522ea26dd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9794ff3746eb5321ad9c2bf522ea26dd">&#9670;&#160;</a></span>NEORV32_TRNG</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_TRNG&#160;&#160;&#160;((<a class="el" href="structneorv32__trng__t.html">neorv32_trng_t</a>*) (<a class="el" href="neorv32_8h.html#ab4846cd153e8a23deec45d81cc8372a2">NEORV32_TRNG_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>TRNG module hardware access (<a class="el" href="structneorv32__trng__t.html">neorv32_trng_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="a1440e1355bf5bff17760992adc156b1a" name="a1440e1355bf5bff17760992adc156b1a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1440e1355bf5bff17760992adc156b1a">&#9670;&#160;</a></span>NEORV32_TRNG_CTRL_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a1440e1355bf5bff17760992adc156b1a">NEORV32_TRNG_CTRL_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>TRNG control register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d" name="a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d"></a>TRNG_CTRL_EN&#160;</td><td class="fielddoc"><p>TRNG data register(0) (r/w): TRNG enable </p> +</td></tr> +<tr><td class="fieldname"><a id="a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac" name="a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac"></a>TRNG_CTRL_FIFO_CLR&#160;</td><td class="fielddoc"><p>TRNG data register(1) (-/w): Clear data FIFO (auto clears) </p> +</td></tr> +<tr><td class="fieldname"><a id="a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52" name="a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52"></a>TRNG_CTRL_FIFO_LSB&#160;</td><td class="fielddoc"><p>TRNG data register(2) (r/-): log2(FIFO size), LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5" name="a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5"></a>TRNG_CTRL_FIFO_MSB&#160;</td><td class="fielddoc"><p>TRNG data register(5) (r/-): log2(FIFO size), MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5" name="a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5"></a>TRNG_CTRL_SIM_MODE&#160;</td><td class="fielddoc"><p>TRNG data register(6) (r/-): PRNG mode (simulation mode) </p> +</td></tr> +<tr><td class="fieldname"><a id="a1440e1355bf5bff17760992adc156b1aac0a6c8451985a61dc522509ded22695f" name="a1440e1355bf5bff17760992adc156b1aac0a6c8451985a61dc522509ded22695f"></a>TRNG_CTRL_AVAIL&#160;</td><td class="fielddoc"><p>TRNG data register(7) (r/-): Random data available </p> +</td></tr> +</table> + +</div> +</div> +<a id="a86e46cb19bb7e716ac5ffec4afc620e2" name="a86e46cb19bb7e716ac5ffec4afc620e2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a86e46cb19bb7e716ac5ffec4afc620e2">&#9670;&#160;</a></span>NEORV32_TRNG_DATA_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a86e46cb19bb7e716ac5ffec4afc620e2">NEORV32_TRNG_DATA_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>TRNG data register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a86e46cb19bb7e716ac5ffec4afc620e2ac2a7a79da7010342366ea97a2af2ebe6" name="a86e46cb19bb7e716ac5ffec4afc620e2ac2a7a79da7010342366ea97a2af2ebe6"></a>TRNG_DATA_LSB&#160;</td><td class="fielddoc"><p>TRNG control register(0) (r/-): Random data byte, bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="a86e46cb19bb7e716ac5ffec4afc620e2ac73221cb67facda1db8fc9591e2f6364" name="a86e46cb19bb7e716ac5ffec4afc620e2ac73221cb67facda1db8fc9591e2f6364"></a>TRNG_DATA_MSB&#160;</td><td class="fielddoc"><p>TRNG control register(7) (r/-): Random data byte, bit 7 </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="af0c4139ff68763623b3d658a8dd8b5ce" name="af0c4139ff68763623b3d658a8dd8b5ce"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af0c4139ff68763623b3d658a8dd8b5ce">&#9670;&#160;</a></span>neorv32_trng_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_trng_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TRNG unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if TRNG was not synthesized, 1 if TRNG is available. </dd></dl> + +</div> +</div> +<a id="aba36f08dd88f2f3e58353ae72eaa14f7" name="aba36f08dd88f2f3e58353ae72eaa14f7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aba36f08dd88f2f3e58353ae72eaa14f7">&#9670;&#160;</a></span>neorv32_trng_check_sim_mode()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_trng_check_sim_mode </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TRNG is implemented using SIMULATION mode.</p> +<dl class="section warning"><dt>Warning</dt><dd>In simulation mode the physical entropy source is replaced by a PRNG (LFSR) with very bad random quality.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Simulation mode active when not zero. </dd></dl> + +</div> +</div> +<a id="ae838bc980e28c300dc2c9c3f34a46bb8" name="ae838bc980e28c300dc2c9c3f34a46bb8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae838bc980e28c300dc2c9c3f34a46bb8">&#9670;&#160;</a></span>neorv32_trng_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_trng_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset and disable TRNG. </p> + +</div> +</div> +<a id="af64df166369d79bf744de06c8a962304" name="af64df166369d79bf744de06c8a962304"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af64df166369d79bf744de06c8a962304">&#9670;&#160;</a></span>neorv32_trng_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_trng_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset, configure and enable TRNG. </p> + +</div> +</div> +<a id="a87cfe338e2ff559f96c73f729465f967" name="a87cfe338e2ff559f96c73f729465f967"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a87cfe338e2ff559f96c73f729465f967">&#9670;&#160;</a></span>neorv32_trng_fifo_clear()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_trng_fifo_clear </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Flush TRNG random data FIFO. </p> + +</div> +</div> +<a id="a9148bcb6a7c448c364e78fa98aac6985" name="a9148bcb6a7c448c364e78fa98aac6985"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9148bcb6a7c448c364e78fa98aac6985">&#9670;&#160;</a></span>neorv32_trng_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_trng_get </td> + <td>(</td> + <td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get random data byte from TRNG.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">data</td><td>uint8_t pointer for storing random data byte. Will be set to zero if no valid data available. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Data is valid when 0 and invalid otherwise. </dd></dl> + +</div> +</div> +<a id="ad24e44372f4fd1ed29a6967dccab4fb0" name="ad24e44372f4fd1ed29a6967dccab4fb0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad24e44372f4fd1ed29a6967dccab4fb0">&#9670;&#160;</a></span>neorv32_trng_get_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_trng_get_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get TRNG FIFO depth.</p> +<dl class="section return"><dt>Returns</dt><dd>TRNG FIFO size (number of entries). </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__trng_8h_source.html b/sw/neorv32__trng_8h_source.html new file mode 100644 index 0000000000..a656d375e2 --- /dev/null +++ b/sw/neorv32__trng_8h_source.html @@ -0,0 +1,173 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_trng.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_trng.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__trng_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_trng_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_trng_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__trng__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__trng__t.html#ae2ff37ce30fb85ef59d9012534bc7e67"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__trng__t.html#ae2ff37ce30fb85ef59d9012534bc7e67">CTRL</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__trng__t.html#acf3f269a8097b731cd82e0d6660e16b5"> 31</a></span> <span class="keyword">const</span> uint32_t <a class="code hl_variable" href="structneorv32__trng__t.html#acf3f269a8097b731cd82e0d6660e16b5">DATA</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>} <a class="code hl_struct" href="structneorv32__trng__t.html">neorv32_trng_t</a>;</div> +</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__trng_8h.html#a9794ff3746eb5321ad9c2bf522ea26dd"> 35</a></span><span class="preprocessor">#define NEORV32_TRNG ((neorv32_trng_t*) (NEORV32_TRNG_BASE))</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="foldopen" id="foldopen00038" data-start="{" data-end="};"> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1a"> 38</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1a">NEORV32_TRNG_CTRL_enum</a> {</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d"> 39</a></span> <a class="code hl_enumvalue" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d">TRNG_CTRL_EN</a> = 0, </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac"> 40</a></span> <a class="code hl_enumvalue" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac">TRNG_CTRL_FIFO_CLR</a> = 1, </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52">TRNG_CTRL_FIFO_LSB</a> = 2, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5">TRNG_CTRL_FIFO_MSB</a> = 5, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5">TRNG_CTRL_SIM_MODE</a> = 6, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_enumvalue" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aac0a6c8451985a61dc522509ded22695f">TRNG_CTRL_AVAIL</a> = 7 </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aac0a6c8451985a61dc522509ded22695f"> 45</a></span>};</div> +</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div> +<div class="foldopen" id="foldopen00048" data-start="{" data-end="};"> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2"> 48</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2">NEORV32_TRNG_DATA_enum</a> {</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac2a7a79da7010342366ea97a2af2ebe6"> 49</a></span> <a class="code hl_enumvalue" href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac2a7a79da7010342366ea97a2af2ebe6">TRNG_DATA_LSB</a> = 0, </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <a class="code hl_enumvalue" href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac73221cb67facda1db8fc9591e2f6364">TRNG_DATA_MSB</a> = 7 </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac73221cb67facda1db8fc9591e2f6364"> 51</a></span>};</div> +</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__trng_8h.html#af0c4139ff68763623b3d658a8dd8b5ce">neorv32_trng_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__trng_8h.html#af64df166369d79bf744de06c8a962304">neorv32_trng_enable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__trng_8h.html#ae838bc980e28c300dc2c9c3f34a46bb8">neorv32_trng_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__trng_8h.html#a87cfe338e2ff559f96c73f729465f967">neorv32_trng_fifo_clear</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__trng_8h.html#ad24e44372f4fd1ed29a6967dccab4fb0">neorv32_trng_get_fifo_depth</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__trng_8h.html#a9148bcb6a7c448c364e78fa98aac6985">neorv32_trng_get</a>(uint8_t *data);</div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__trng_8h.html#aba36f08dd88f2f3e58353ae72eaa14f7">neorv32_trng_check_sim_mode</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_trng_h</span></div> +<div class="ttc" id="aneorv32__trng_8h_html_a1440e1355bf5bff17760992adc156b1a"><div class="ttname"><a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1a">NEORV32_TRNG_CTRL_enum</a></div><div class="ttdeci">NEORV32_TRNG_CTRL_enum</div><div class="ttdef"><b>Definition</b> neorv32_trng.h:38</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d"><div class="ttname"><a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d">TRNG_CTRL_EN</a></div><div class="ttdeci">@ TRNG_CTRL_EN</div><div class="ttdef"><b>Definition</b> neorv32_trng.h:39</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52"><div class="ttname"><a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52">TRNG_CTRL_FIFO_LSB</a></div><div class="ttdeci">@ TRNG_CTRL_FIFO_LSB</div><div class="ttdef"><b>Definition</b> neorv32_trng.h:41</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5"><div class="ttname"><a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5">TRNG_CTRL_FIFO_MSB</a></div><div class="ttdeci">@ TRNG_CTRL_FIFO_MSB</div><div class="ttdef"><b>Definition</b> neorv32_trng.h:42</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5"><div class="ttname"><a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5">TRNG_CTRL_SIM_MODE</a></div><div class="ttdeci">@ TRNG_CTRL_SIM_MODE</div><div class="ttdef"><b>Definition</b> neorv32_trng.h:43</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac"><div class="ttname"><a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac">TRNG_CTRL_FIFO_CLR</a></div><div class="ttdeci">@ TRNG_CTRL_FIFO_CLR</div><div class="ttdef"><b>Definition</b> neorv32_trng.h:40</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_a1440e1355bf5bff17760992adc156b1aac0a6c8451985a61dc522509ded22695f"><div class="ttname"><a href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aac0a6c8451985a61dc522509ded22695f">TRNG_CTRL_AVAIL</a></div><div class="ttdeci">@ TRNG_CTRL_AVAIL</div><div class="ttdef"><b>Definition</b> neorv32_trng.h:44</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_a86e46cb19bb7e716ac5ffec4afc620e2"><div class="ttname"><a href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2">NEORV32_TRNG_DATA_enum</a></div><div class="ttdeci">NEORV32_TRNG_DATA_enum</div><div class="ttdef"><b>Definition</b> neorv32_trng.h:48</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_a86e46cb19bb7e716ac5ffec4afc620e2ac2a7a79da7010342366ea97a2af2ebe6"><div class="ttname"><a href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac2a7a79da7010342366ea97a2af2ebe6">TRNG_DATA_LSB</a></div><div class="ttdeci">@ TRNG_DATA_LSB</div><div class="ttdef"><b>Definition</b> neorv32_trng.h:49</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_a86e46cb19bb7e716ac5ffec4afc620e2ac73221cb67facda1db8fc9591e2f6364"><div class="ttname"><a href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac73221cb67facda1db8fc9591e2f6364">TRNG_DATA_MSB</a></div><div class="ttdeci">@ TRNG_DATA_MSB</div><div class="ttdef"><b>Definition</b> neorv32_trng.h:50</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_a87cfe338e2ff559f96c73f729465f967"><div class="ttname"><a href="neorv32__trng_8h.html#a87cfe338e2ff559f96c73f729465f967">neorv32_trng_fifo_clear</a></div><div class="ttdeci">void neorv32_trng_fifo_clear(void)</div><div class="ttdef"><b>Definition</b> neorv32_trng.c:66</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_a9148bcb6a7c448c364e78fa98aac6985"><div class="ttname"><a href="neorv32__trng_8h.html#a9148bcb6a7c448c364e78fa98aac6985">neorv32_trng_get</a></div><div class="ttdeci">int neorv32_trng_get(uint8_t *data)</div><div class="ttdef"><b>Definition</b> neorv32_trng.c:90</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_aba36f08dd88f2f3e58353ae72eaa14f7"><div class="ttname"><a href="neorv32__trng_8h.html#aba36f08dd88f2f3e58353ae72eaa14f7">neorv32_trng_check_sim_mode</a></div><div class="ttdeci">int neorv32_trng_check_sim_mode(void)</div><div class="ttdef"><b>Definition</b> neorv32_trng.c:109</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_ad24e44372f4fd1ed29a6967dccab4fb0"><div class="ttname"><a href="neorv32__trng_8h.html#ad24e44372f4fd1ed29a6967dccab4fb0">neorv32_trng_get_fifo_depth</a></div><div class="ttdeci">int neorv32_trng_get_fifo_depth(void)</div><div class="ttdef"><b>Definition</b> neorv32_trng.c:77</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_ae838bc980e28c300dc2c9c3f34a46bb8"><div class="ttname"><a href="neorv32__trng_8h.html#ae838bc980e28c300dc2c9c3f34a46bb8">neorv32_trng_disable</a></div><div class="ttdeci">void neorv32_trng_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_trng.c:57</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_af0c4139ff68763623b3d658a8dd8b5ce"><div class="ttname"><a href="neorv32__trng_8h.html#af0c4139ff68763623b3d658a8dd8b5ce">neorv32_trng_available</a></div><div class="ttdeci">int neorv32_trng_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_trng.c:26</div></div> +<div class="ttc" id="aneorv32__trng_8h_html_af64df166369d79bf744de06c8a962304"><div class="ttname"><a href="neorv32__trng_8h.html#af64df166369d79bf744de06c8a962304">neorv32_trng_enable</a></div><div class="ttdeci">void neorv32_trng_enable(void)</div><div class="ttdef"><b>Definition</b> neorv32_trng.c:40</div></div> +<div class="ttc" id="astructneorv32__trng__t_html"><div class="ttname"><a href="structneorv32__trng__t.html">neorv32_trng_t</a></div><div class="ttdef"><b>Definition</b> neorv32_trng.h:29</div></div> +<div class="ttc" id="astructneorv32__trng__t_html_acf3f269a8097b731cd82e0d6660e16b5"><div class="ttname"><a href="structneorv32__trng__t.html#acf3f269a8097b731cd82e0d6660e16b5">neorv32_trng_t::DATA</a></div><div class="ttdeci">const uint32_t DATA</div><div class="ttdef"><b>Definition</b> neorv32_trng.h:31</div></div> +<div class="ttc" id="astructneorv32__trng__t_html_ae2ff37ce30fb85ef59d9012534bc7e67"><div class="ttname"><a href="structneorv32__trng__t.html#ae2ff37ce30fb85ef59d9012534bc7e67">neorv32_trng_t::CTRL</a></div><div class="ttdeci">uint32_t CTRL</div><div class="ttdef"><b>Definition</b> neorv32_trng.h:30</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__twd_8c.html b/sw/neorv32__twd_8c.html new file mode 100644 index 0000000000..2a4be0ee1e --- /dev/null +++ b/sw/neorv32__twd_8c.html @@ -0,0 +1,485 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_twd.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_twd.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Two-Wire Device Controller (TWD) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ae6392461557d300b3b9c1f8e63a7dcc7" id="r_ae6392461557d300b3b9c1f8e63a7dcc7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae6392461557d300b3b9c1f8e63a7dcc7">neorv32_twd_available</a> (void)</td></tr> +<tr class="separator:ae6392461557d300b3b9c1f8e63a7dcc7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ace89f57655c6aacf6e05a5b6a29a1616" id="r_ace89f57655c6aacf6e05a5b6a29a1616"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ace89f57655c6aacf6e05a5b6a29a1616">neorv32_twd_setup</a> (int device_addr, int fsel, int irq_rx_avail, int irq_rx_full, int irq_tx_empty)</td></tr> +<tr class="separator:ace89f57655c6aacf6e05a5b6a29a1616"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4fe22b79183dc7d07a1b84a70328a00b" id="r_a4fe22b79183dc7d07a1b84a70328a00b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4fe22b79183dc7d07a1b84a70328a00b">neorv32_twd_get_fifo_depth</a> (void)</td></tr> +<tr class="separator:a4fe22b79183dc7d07a1b84a70328a00b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af82c89d23e3fc3fbd61c750ecb25d0dc" id="r_af82c89d23e3fc3fbd61c750ecb25d0dc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af82c89d23e3fc3fbd61c750ecb25d0dc">neorv32_twd_disable</a> (void)</td></tr> +<tr class="separator:af82c89d23e3fc3fbd61c750ecb25d0dc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7fa01904130031ab2dee77b4058061c7" id="r_a7fa01904130031ab2dee77b4058061c7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7fa01904130031ab2dee77b4058061c7">neorv32_twd_enable</a> (void)</td></tr> +<tr class="separator:a7fa01904130031ab2dee77b4058061c7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab12e92dfbe37710c12b44fed97c01c06" id="r_ab12e92dfbe37710c12b44fed97c01c06"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab12e92dfbe37710c12b44fed97c01c06">neorv32_twd_clear_rx</a> (void)</td></tr> +<tr class="separator:ab12e92dfbe37710c12b44fed97c01c06"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a38f7c54e2b356851f3b18011796f3902" id="r_a38f7c54e2b356851f3b18011796f3902"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a38f7c54e2b356851f3b18011796f3902">neorv32_twd_clear_tx</a> (void)</td></tr> +<tr class="separator:a38f7c54e2b356851f3b18011796f3902"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4d167a59c4297e0e93af5a74091bd752" id="r_a4d167a59c4297e0e93af5a74091bd752"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4d167a59c4297e0e93af5a74091bd752">neorv32_twd_sense_scl</a> (void)</td></tr> +<tr class="separator:a4d167a59c4297e0e93af5a74091bd752"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6b728dd7e359c1f3ae170a4dae054a31" id="r_a6b728dd7e359c1f3ae170a4dae054a31"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6b728dd7e359c1f3ae170a4dae054a31">neorv32_twd_sense_sda</a> (void)</td></tr> +<tr class="separator:a6b728dd7e359c1f3ae170a4dae054a31"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a90e8f83ff4f6f05a5aef0046e82dc908" id="r_a90e8f83ff4f6f05a5aef0046e82dc908"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a90e8f83ff4f6f05a5aef0046e82dc908">neorv32_twd_busy</a> (void)</td></tr> +<tr class="separator:a90e8f83ff4f6f05a5aef0046e82dc908"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af2b925dffe4e4d0f8412052b92281066" id="r_af2b925dffe4e4d0f8412052b92281066"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af2b925dffe4e4d0f8412052b92281066">neorv32_twd_rx_available</a> (void)</td></tr> +<tr class="separator:af2b925dffe4e4d0f8412052b92281066"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a138bd6bdefed2a24b746ddb550a02407" id="r_a138bd6bdefed2a24b746ddb550a02407"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a138bd6bdefed2a24b746ddb550a02407">neorv32_twd_rx_full</a> (void)</td></tr> +<tr class="separator:a138bd6bdefed2a24b746ddb550a02407"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae106ee8a74649853eab1b2a07c2c0ede" id="r_ae106ee8a74649853eab1b2a07c2c0ede"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae106ee8a74649853eab1b2a07c2c0ede">neorv32_twd_tx_empty</a> (void)</td></tr> +<tr class="separator:ae106ee8a74649853eab1b2a07c2c0ede"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac06102b8e4f692415ec91d37253a3118" id="r_ac06102b8e4f692415ec91d37253a3118"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac06102b8e4f692415ec91d37253a3118">neorv32_twd_tx_full</a> (void)</td></tr> +<tr class="separator:ac06102b8e4f692415ec91d37253a3118"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0cbf868493aa8931e5c5bc71e5b478a4" id="r_a0cbf868493aa8931e5c5bc71e5b478a4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0cbf868493aa8931e5c5bc71e5b478a4">neorv32_twd_put</a> (uint8_t data)</td></tr> +<tr class="separator:a0cbf868493aa8931e5c5bc71e5b478a4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6382d25525ff9bb88e6df0802f0037e2" id="r_a6382d25525ff9bb88e6df0802f0037e2"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6382d25525ff9bb88e6df0802f0037e2">neorv32_twd_get</a> (void)</td></tr> +<tr class="separator:a6382d25525ff9bb88e6df0802f0037e2"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Two-Wire Device Controller (TWD) HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the TWD unit was synthesized (IO_TWD_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="ae6392461557d300b3b9c1f8e63a7dcc7" name="ae6392461557d300b3b9c1f8e63a7dcc7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae6392461557d300b3b9c1f8e63a7dcc7">&#9670;&#160;</a></span>neorv32_twd_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TWD unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if TWD was not synthesized, 1 if TWD is available. </dd></dl> + +</div> +</div> +<a id="a90e8f83ff4f6f05a5aef0046e82dc908" name="a90e8f83ff4f6f05a5aef0046e82dc908"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a90e8f83ff4f6f05a5aef0046e82dc908">&#9670;&#160;</a></span>neorv32_twd_busy()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_busy </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if there is a TWD bus operation in progress.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if idle, 1 if busy. </dd></dl> + +</div> +</div> +<a id="ab12e92dfbe37710c12b44fed97c01c06" name="ab12e92dfbe37710c12b44fed97c01c06"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab12e92dfbe37710c12b44fed97c01c06">&#9670;&#160;</a></span>neorv32_twd_clear_rx()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twd_clear_rx </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear TWD RX FIFO. </p> + +</div> +</div> +<a id="a38f7c54e2b356851f3b18011796f3902" name="a38f7c54e2b356851f3b18011796f3902"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a38f7c54e2b356851f3b18011796f3902">&#9670;&#160;</a></span>neorv32_twd_clear_tx()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twd_clear_tx </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear TWD TX FIFO. </p> + +</div> +</div> +<a id="af82c89d23e3fc3fbd61c750ecb25d0dc" name="af82c89d23e3fc3fbd61c750ecb25d0dc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af82c89d23e3fc3fbd61c750ecb25d0dc">&#9670;&#160;</a></span>neorv32_twd_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twd_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable TWD controller. </p> + +</div> +</div> +<a id="a7fa01904130031ab2dee77b4058061c7" name="a7fa01904130031ab2dee77b4058061c7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7fa01904130031ab2dee77b4058061c7">&#9670;&#160;</a></span>neorv32_twd_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twd_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable TWD controller. </p> + +</div> +</div> +<a id="a6382d25525ff9bb88e6df0802f0037e2" name="a6382d25525ff9bb88e6df0802f0037e2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6382d25525ff9bb88e6df0802f0037e2">&#9670;&#160;</a></span>neorv32_twd_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_twd_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get data byte from RX FIFO.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is non-blocking. Check FIFO status before.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Data byte read from RX FIFO. </dd></dl> + +</div> +</div> +<a id="a4fe22b79183dc7d07a1b84a70328a00b" name="a4fe22b79183dc7d07a1b84a70328a00b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4fe22b79183dc7d07a1b84a70328a00b">&#9670;&#160;</a></span>neorv32_twd_get_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_get_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get TWD FIFO depth.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries), zero if no FIFO implemented </dd></dl> + +</div> +</div> +<a id="a0cbf868493aa8931e5c5bc71e5b478a4" name="a0cbf868493aa8931e5c5bc71e5b478a4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0cbf868493aa8931e5c5bc71e5b478a4">&#9670;&#160;</a></span>neorv32_twd_put()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twd_put </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Put data byte into TX FIFO.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is non-blocking. Check FIFO status before.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Data byte to be stored in TX FIFO. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="af2b925dffe4e4d0f8412052b92281066" name="af2b925dffe4e4d0f8412052b92281066"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af2b925dffe4e4d0f8412052b92281066">&#9670;&#160;</a></span>neorv32_twd_rx_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_rx_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if RX data available.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if no data available, 1 if data is available. </dd></dl> + +</div> +</div> +<a id="a138bd6bdefed2a24b746ddb550a02407" name="a138bd6bdefed2a24b746ddb550a02407"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a138bd6bdefed2a24b746ddb550a02407">&#9670;&#160;</a></span>neorv32_twd_rx_full()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_rx_full </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if RX FIFO is full.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if no RX FIFO is not full, 1 if RX FIFO is full. </dd></dl> + +</div> +</div> +<a id="a4d167a59c4297e0e93af5a74091bd752" name="a4d167a59c4297e0e93af5a74091bd752"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4d167a59c4297e0e93af5a74091bd752">&#9670;&#160;</a></span>neorv32_twd_sense_scl()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_sense_scl </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current state of SCL bus line.</p> +<dl class="section return"><dt>Returns</dt><dd>1 if SCL is high, 0 if SCL is low. </dd></dl> + +</div> +</div> +<a id="a6b728dd7e359c1f3ae170a4dae054a31" name="a6b728dd7e359c1f3ae170a4dae054a31"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6b728dd7e359c1f3ae170a4dae054a31">&#9670;&#160;</a></span>neorv32_twd_sense_sda()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_sense_sda </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current state of SDA bus line.</p> +<dl class="section return"><dt>Returns</dt><dd>1 if SDA is high, 0 if SDA is low. </dd></dl> + +</div> +</div> +<a id="ace89f57655c6aacf6e05a5b6a29a1616" name="ace89f57655c6aacf6e05a5b6a29a1616"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ace89f57655c6aacf6e05a5b6a29a1616">&#9670;&#160;</a></span>neorv32_twd_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twd_setup </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>device_addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>fsel</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>irq_rx_avail</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>irq_rx_full</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>irq_tx_empty</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable and configure TWD controller. The TWD control register bits are listed in <a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18">NEORV32_TWD_CTRL_enum</a>.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">device_addr</td><td>7-bit device address. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">fsel</td><td>Bus sample clock / filter select. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_rx_avail</td><td>IRQ if RX FIFO data available. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_rx_full</td><td>IRQ if RX FIFO full. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_tx_empty</td><td>IRQ if TX FIFO empty. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ae106ee8a74649853eab1b2a07c2c0ede" name="ae106ee8a74649853eab1b2a07c2c0ede"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae106ee8a74649853eab1b2a07c2c0ede">&#9670;&#160;</a></span>neorv32_twd_tx_empty()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_tx_empty </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TX FIFO is empty.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if no TX FIFO is not empty, 1 if TX FIFO is empty. </dd></dl> + +</div> +</div> +<a id="ac06102b8e4f692415ec91d37253a3118" name="ac06102b8e4f692415ec91d37253a3118"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac06102b8e4f692415ec91d37253a3118">&#9670;&#160;</a></span>neorv32_twd_tx_full()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_tx_full </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TX FIFO is full.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if no TX FIFO is not full, 1 if TX FIFO is full. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__twd_8h.html b/sw/neorv32__twd_8h.html new file mode 100644 index 0000000000..e89f794b85 --- /dev/null +++ b/sw/neorv32__twd_8h.html @@ -0,0 +1,618 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_twd.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_twd.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Two-Wire Device Controller (TWD) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__twd_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__twd__t.html">neorv32_twd_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:ae6392461557d300b3b9c1f8e63a7dcc7" id="r_ae6392461557d300b3b9c1f8e63a7dcc7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae6392461557d300b3b9c1f8e63a7dcc7">neorv32_twd_available</a> (void)</td></tr> +<tr class="separator:ae6392461557d300b3b9c1f8e63a7dcc7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ace89f57655c6aacf6e05a5b6a29a1616" id="r_ace89f57655c6aacf6e05a5b6a29a1616"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ace89f57655c6aacf6e05a5b6a29a1616">neorv32_twd_setup</a> (int device_addr, int fsel, int irq_rx_avail, int irq_rx_full, int irq_tx_empty)</td></tr> +<tr class="separator:ace89f57655c6aacf6e05a5b6a29a1616"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4fe22b79183dc7d07a1b84a70328a00b" id="r_a4fe22b79183dc7d07a1b84a70328a00b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4fe22b79183dc7d07a1b84a70328a00b">neorv32_twd_get_fifo_depth</a> (void)</td></tr> +<tr class="separator:a4fe22b79183dc7d07a1b84a70328a00b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af82c89d23e3fc3fbd61c750ecb25d0dc" id="r_af82c89d23e3fc3fbd61c750ecb25d0dc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af82c89d23e3fc3fbd61c750ecb25d0dc">neorv32_twd_disable</a> (void)</td></tr> +<tr class="separator:af82c89d23e3fc3fbd61c750ecb25d0dc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7fa01904130031ab2dee77b4058061c7" id="r_a7fa01904130031ab2dee77b4058061c7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7fa01904130031ab2dee77b4058061c7">neorv32_twd_enable</a> (void)</td></tr> +<tr class="separator:a7fa01904130031ab2dee77b4058061c7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab12e92dfbe37710c12b44fed97c01c06" id="r_ab12e92dfbe37710c12b44fed97c01c06"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab12e92dfbe37710c12b44fed97c01c06">neorv32_twd_clear_rx</a> (void)</td></tr> +<tr class="separator:ab12e92dfbe37710c12b44fed97c01c06"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a38f7c54e2b356851f3b18011796f3902" id="r_a38f7c54e2b356851f3b18011796f3902"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a38f7c54e2b356851f3b18011796f3902">neorv32_twd_clear_tx</a> (void)</td></tr> +<tr class="separator:a38f7c54e2b356851f3b18011796f3902"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4d167a59c4297e0e93af5a74091bd752" id="r_a4d167a59c4297e0e93af5a74091bd752"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4d167a59c4297e0e93af5a74091bd752">neorv32_twd_sense_scl</a> (void)</td></tr> +<tr class="separator:a4d167a59c4297e0e93af5a74091bd752"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6b728dd7e359c1f3ae170a4dae054a31" id="r_a6b728dd7e359c1f3ae170a4dae054a31"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6b728dd7e359c1f3ae170a4dae054a31">neorv32_twd_sense_sda</a> (void)</td></tr> +<tr class="separator:a6b728dd7e359c1f3ae170a4dae054a31"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a90e8f83ff4f6f05a5aef0046e82dc908" id="r_a90e8f83ff4f6f05a5aef0046e82dc908"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a90e8f83ff4f6f05a5aef0046e82dc908">neorv32_twd_busy</a> (void)</td></tr> +<tr class="separator:a90e8f83ff4f6f05a5aef0046e82dc908"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af2b925dffe4e4d0f8412052b92281066" id="r_af2b925dffe4e4d0f8412052b92281066"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af2b925dffe4e4d0f8412052b92281066">neorv32_twd_rx_available</a> (void)</td></tr> +<tr class="separator:af2b925dffe4e4d0f8412052b92281066"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a138bd6bdefed2a24b746ddb550a02407" id="r_a138bd6bdefed2a24b746ddb550a02407"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a138bd6bdefed2a24b746ddb550a02407">neorv32_twd_rx_full</a> (void)</td></tr> +<tr class="separator:a138bd6bdefed2a24b746ddb550a02407"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae106ee8a74649853eab1b2a07c2c0ede" id="r_ae106ee8a74649853eab1b2a07c2c0ede"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae106ee8a74649853eab1b2a07c2c0ede">neorv32_twd_tx_empty</a> (void)</td></tr> +<tr class="separator:ae106ee8a74649853eab1b2a07c2c0ede"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac06102b8e4f692415ec91d37253a3118" id="r_ac06102b8e4f692415ec91d37253a3118"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac06102b8e4f692415ec91d37253a3118">neorv32_twd_tx_full</a> (void)</td></tr> +<tr class="separator:ac06102b8e4f692415ec91d37253a3118"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0cbf868493aa8931e5c5bc71e5b478a4" id="r_a0cbf868493aa8931e5c5bc71e5b478a4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0cbf868493aa8931e5c5bc71e5b478a4">neorv32_twd_put</a> (uint8_t data)</td></tr> +<tr class="separator:a0cbf868493aa8931e5c5bc71e5b478a4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6382d25525ff9bb88e6df0802f0037e2" id="r_a6382d25525ff9bb88e6df0802f0037e2"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6382d25525ff9bb88e6df0802f0037e2">neorv32_twd_get</a> (void)</td></tr> +<tr class="separator:a6382d25525ff9bb88e6df0802f0037e2"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: Two-Wire Device Controller (TWD)</h2></td></tr> +<tr class="memitem:ac9995cfc63846945ac26992148cd9401" id="r_ac9995cfc63846945ac26992148cd9401"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac9995cfc63846945ac26992148cd9401">NEORV32_TWD</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__twd__t.html">neorv32_twd_t</a>*) (<a class="el" href="neorv32_8h.html#a8ac9e39bd62e9c5d7bcde0d44716b958">NEORV32_TWD_BASE</a>))</td></tr> +<tr class="separator:ac9995cfc63846945ac26992148cd9401"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5d944bd98813c6a1fa9f54588962fd18" id="r_a5d944bd98813c6a1fa9f54588962fd18"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18">NEORV32_TWD_CTRL_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18aded9f8ad7a2e0217e73d8484246157b2">TWD_CTRL_EN</a> = 0 +, <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18a1a951d8cf167b79bffdd8f19033ba657">TWD_CTRL_CLR_RX</a> = 1 +, <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18ab2d8eef73a9cc3de9bf99c5bf9c7114b">TWD_CTRL_CLR_TX</a> = 2 +, <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18aef0fcc46f5595fa73fe547f0737f85e6">TWD_CTRL_FSEL</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18a3cc82a5ab8ad0ac4cff85b40d2ed6ffe">TWD_CTRL_DEV_ADDR0</a> = 4 +, <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18abea8949a5164bd28f1504a34dadb17c2">TWD_CTRL_DEV_ADDR6</a> = 10 +, <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18ad59552e7f3c7c747307f71e78ac1c00b">TWD_CTRL_IRQ_RX_AVAIL</a> = 11 +, <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18af6d6b5bda034fc7af54036c95b94c01a">TWD_CTRL_IRQ_RX_FULL</a> = 12 +, <br /> +&#160;&#160;<a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18a73bfda5ccd72ba0c8deed6d848013757">TWD_CTRL_IRQ_TX_EMPTY</a> = 13 +, <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18a943bbe073ea36da264cb16f5a9f2acc9">TWD_CTRL_FIFO_LSB</a> = 15 +, <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18af121649145e5403bf44246d416c26530">TWD_CTRL_FIFO_MSB</a> = 18 +, <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18aaf31cc771b97f6b1f4d2da2347f43878">TWD_CTRL_RX_AVAIL</a> = 25 +, <br /> +&#160;&#160;<a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18ad1360350bafec23f10e28ffddefa625a">TWD_CTRL_RX_FULL</a> = 26 +, <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18a428ca1617d4bc287fbf03bfc74d12dfd">TWD_CTRL_TX_EMPTY</a> = 27 +, <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18a243f36178c91f94ccc848399a3b715b5">TWD_CTRL_TX_FULL</a> = 28 +, <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18a8816adbecd0c929c88134e9e41efcf5c">TWD_CTRL_SENSE_SCL</a> = 29 +, <br /> +&#160;&#160;<a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18acc0cdd72b63e7a029e97ae942754958c">TWD_CTRL_SENSE_SDA</a> = 30 +, <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18a71eb18275ffd7138251049c39294f4f3">TWD_CTRL_BUSY</a> = 31 +<br /> + }</td></tr> +<tr class="separator:a5d944bd98813c6a1fa9f54588962fd18"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6745c84c540b583eb7fe9bd9f2f6bcc8" id="r_a6745c84c540b583eb7fe9bd9f2f6bcc8"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6745c84c540b583eb7fe9bd9f2f6bcc8">NEORV32_TWD_DATA_enum</a> { <a class="el" href="#a6745c84c540b583eb7fe9bd9f2f6bcc8a5f5e055b2d8ea968da1670251b70f824">TWD_DATA_LSB</a> = 0 +, <a class="el" href="#a6745c84c540b583eb7fe9bd9f2f6bcc8a8f40d28bfc00d40ba03560bf44d47829">TWD_DATA_MSB</a> = 7 + }</td></tr> +<tr class="separator:a6745c84c540b583eb7fe9bd9f2f6bcc8"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Two-Wire Device Controller (TWD) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the TWD unit was synthesized (IO_TWD_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ac9995cfc63846945ac26992148cd9401" name="ac9995cfc63846945ac26992148cd9401"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac9995cfc63846945ac26992148cd9401">&#9670;&#160;</a></span>NEORV32_TWD</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_TWD&#160;&#160;&#160;((<a class="el" href="structneorv32__twd__t.html">neorv32_twd_t</a>*) (<a class="el" href="neorv32_8h.html#a8ac9e39bd62e9c5d7bcde0d44716b958">NEORV32_TWD_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>TWD module hardware access (<a class="el" href="structneorv32__twd__t.html">neorv32_twd_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="a5d944bd98813c6a1fa9f54588962fd18" name="a5d944bd98813c6a1fa9f54588962fd18"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5d944bd98813c6a1fa9f54588962fd18">&#9670;&#160;</a></span>NEORV32_TWD_CTRL_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18">NEORV32_TWD_CTRL_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>TWD control register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18aded9f8ad7a2e0217e73d8484246157b2" name="a5d944bd98813c6a1fa9f54588962fd18aded9f8ad7a2e0217e73d8484246157b2"></a>TWD_CTRL_EN&#160;</td><td class="fielddoc"><p>TWD control register(0) (r/w): TWD enable </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18a1a951d8cf167b79bffdd8f19033ba657" name="a5d944bd98813c6a1fa9f54588962fd18a1a951d8cf167b79bffdd8f19033ba657"></a>TWD_CTRL_CLR_RX&#160;</td><td class="fielddoc"><p>TWD control register(1) (-/w): Clear RX FIFO, flag auto-clears </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18ab2d8eef73a9cc3de9bf99c5bf9c7114b" name="a5d944bd98813c6a1fa9f54588962fd18ab2d8eef73a9cc3de9bf99c5bf9c7114b"></a>TWD_CTRL_CLR_TX&#160;</td><td class="fielddoc"><p>TWD control register(2) (-/w): Clear TX FIFO, flag auto-clears </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18aef0fcc46f5595fa73fe547f0737f85e6" name="a5d944bd98813c6a1fa9f54588962fd18aef0fcc46f5595fa73fe547f0737f85e6"></a>TWD_CTRL_FSEL&#160;</td><td class="fielddoc"><p>TWD control register(3) (r/w): Bus sample clock / filter select </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18a3cc82a5ab8ad0ac4cff85b40d2ed6ffe" name="a5d944bd98813c6a1fa9f54588962fd18a3cc82a5ab8ad0ac4cff85b40d2ed6ffe"></a>TWD_CTRL_DEV_ADDR0&#160;</td><td class="fielddoc"><p>TWD control register(4) (r/w): Device address (7-bit), LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18abea8949a5164bd28f1504a34dadb17c2" name="a5d944bd98813c6a1fa9f54588962fd18abea8949a5164bd28f1504a34dadb17c2"></a>TWD_CTRL_DEV_ADDR6&#160;</td><td class="fielddoc"><p>TWD control register(10) (r/w): Device address (7-bit), MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18ad59552e7f3c7c747307f71e78ac1c00b" name="a5d944bd98813c6a1fa9f54588962fd18ad59552e7f3c7c747307f71e78ac1c00b"></a>TWD_CTRL_IRQ_RX_AVAIL&#160;</td><td class="fielddoc"><p>TWD control register(11) (r/w): IRQ if RX FIFO data available </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18af6d6b5bda034fc7af54036c95b94c01a" name="a5d944bd98813c6a1fa9f54588962fd18af6d6b5bda034fc7af54036c95b94c01a"></a>TWD_CTRL_IRQ_RX_FULL&#160;</td><td class="fielddoc"><p>TWD control register(12) (r/w): IRQ if RX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18a73bfda5ccd72ba0c8deed6d848013757" name="a5d944bd98813c6a1fa9f54588962fd18a73bfda5ccd72ba0c8deed6d848013757"></a>TWD_CTRL_IRQ_TX_EMPTY&#160;</td><td class="fielddoc"><p>TWD control register(13) (r/w): IRQ if TX FIFO empty </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18a943bbe073ea36da264cb16f5a9f2acc9" name="a5d944bd98813c6a1fa9f54588962fd18a943bbe073ea36da264cb16f5a9f2acc9"></a>TWD_CTRL_FIFO_LSB&#160;</td><td class="fielddoc"><p>TWD control register(15) (r/-): log2(FIFO size), LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18af121649145e5403bf44246d416c26530" name="a5d944bd98813c6a1fa9f54588962fd18af121649145e5403bf44246d416c26530"></a>TWD_CTRL_FIFO_MSB&#160;</td><td class="fielddoc"><p>TWD control register(18) (r/-): log2(FIFO size), MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18aaf31cc771b97f6b1f4d2da2347f43878" name="a5d944bd98813c6a1fa9f54588962fd18aaf31cc771b97f6b1f4d2da2347f43878"></a>TWD_CTRL_RX_AVAIL&#160;</td><td class="fielddoc"><p>TWD control register(25) (r/-): RX FIFO data available </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18ad1360350bafec23f10e28ffddefa625a" name="a5d944bd98813c6a1fa9f54588962fd18ad1360350bafec23f10e28ffddefa625a"></a>TWD_CTRL_RX_FULL&#160;</td><td class="fielddoc"><p>TWD control register(26) (r/-): RX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18a428ca1617d4bc287fbf03bfc74d12dfd" name="a5d944bd98813c6a1fa9f54588962fd18a428ca1617d4bc287fbf03bfc74d12dfd"></a>TWD_CTRL_TX_EMPTY&#160;</td><td class="fielddoc"><p>TWD control register(27) (r/-): TX FIFO empty </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18a243f36178c91f94ccc848399a3b715b5" name="a5d944bd98813c6a1fa9f54588962fd18a243f36178c91f94ccc848399a3b715b5"></a>TWD_CTRL_TX_FULL&#160;</td><td class="fielddoc"><p>TWD control register(28) (r/-): TX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18a8816adbecd0c929c88134e9e41efcf5c" name="a5d944bd98813c6a1fa9f54588962fd18a8816adbecd0c929c88134e9e41efcf5c"></a>TWD_CTRL_SENSE_SCL&#160;</td><td class="fielddoc"><p>TWD control register(29) (r/-): current state of the SCL bus line </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18acc0cdd72b63e7a029e97ae942754958c" name="a5d944bd98813c6a1fa9f54588962fd18acc0cdd72b63e7a029e97ae942754958c"></a>TWD_CTRL_SENSE_SDA&#160;</td><td class="fielddoc"><p>TWD control register(30) (r/-): current state of the SDA bus line </p> +</td></tr> +<tr><td class="fieldname"><a id="a5d944bd98813c6a1fa9f54588962fd18a71eb18275ffd7138251049c39294f4f3" name="a5d944bd98813c6a1fa9f54588962fd18a71eb18275ffd7138251049c39294f4f3"></a>TWD_CTRL_BUSY&#160;</td><td class="fielddoc"><p>TWD control register(31) (r/-): bus engine is busy (transaction in progress) </p> +</td></tr> +</table> + +</div> +</div> +<a id="a6745c84c540b583eb7fe9bd9f2f6bcc8" name="a6745c84c540b583eb7fe9bd9f2f6bcc8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6745c84c540b583eb7fe9bd9f2f6bcc8">&#9670;&#160;</a></span>NEORV32_TWD_DATA_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a6745c84c540b583eb7fe9bd9f2f6bcc8">NEORV32_TWD_DATA_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>TWD data register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a6745c84c540b583eb7fe9bd9f2f6bcc8a5f5e055b2d8ea968da1670251b70f824" name="a6745c84c540b583eb7fe9bd9f2f6bcc8a5f5e055b2d8ea968da1670251b70f824"></a>TWD_DATA_LSB&#160;</td><td class="fielddoc"><p>TWD data register(0) (r/w): Receive/transmit data (8-bit) LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a6745c84c540b583eb7fe9bd9f2f6bcc8a8f40d28bfc00d40ba03560bf44d47829" name="a6745c84c540b583eb7fe9bd9f2f6bcc8a8f40d28bfc00d40ba03560bf44d47829"></a>TWD_DATA_MSB&#160;</td><td class="fielddoc"><p>TWD data register(7) (r/w): Receive/transmit data (8-bit) MSB </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="ae6392461557d300b3b9c1f8e63a7dcc7" name="ae6392461557d300b3b9c1f8e63a7dcc7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae6392461557d300b3b9c1f8e63a7dcc7">&#9670;&#160;</a></span>neorv32_twd_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TWD unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if TWD was not synthesized, 1 if TWD is available. </dd></dl> + +</div> +</div> +<a id="a90e8f83ff4f6f05a5aef0046e82dc908" name="a90e8f83ff4f6f05a5aef0046e82dc908"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a90e8f83ff4f6f05a5aef0046e82dc908">&#9670;&#160;</a></span>neorv32_twd_busy()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_busy </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if there is a TWD bus operation in progress.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if idle, 1 if busy. </dd></dl> + +</div> +</div> +<a id="ab12e92dfbe37710c12b44fed97c01c06" name="ab12e92dfbe37710c12b44fed97c01c06"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab12e92dfbe37710c12b44fed97c01c06">&#9670;&#160;</a></span>neorv32_twd_clear_rx()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twd_clear_rx </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear TWD RX FIFO. </p> + +</div> +</div> +<a id="a38f7c54e2b356851f3b18011796f3902" name="a38f7c54e2b356851f3b18011796f3902"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a38f7c54e2b356851f3b18011796f3902">&#9670;&#160;</a></span>neorv32_twd_clear_tx()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twd_clear_tx </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear TWD TX FIFO. </p> + +</div> +</div> +<a id="af82c89d23e3fc3fbd61c750ecb25d0dc" name="af82c89d23e3fc3fbd61c750ecb25d0dc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af82c89d23e3fc3fbd61c750ecb25d0dc">&#9670;&#160;</a></span>neorv32_twd_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twd_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable TWD controller. </p> + +</div> +</div> +<a id="a7fa01904130031ab2dee77b4058061c7" name="a7fa01904130031ab2dee77b4058061c7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7fa01904130031ab2dee77b4058061c7">&#9670;&#160;</a></span>neorv32_twd_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twd_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable TWD controller. </p> + +</div> +</div> +<a id="a6382d25525ff9bb88e6df0802f0037e2" name="a6382d25525ff9bb88e6df0802f0037e2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6382d25525ff9bb88e6df0802f0037e2">&#9670;&#160;</a></span>neorv32_twd_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t neorv32_twd_get </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get data byte from RX FIFO.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is non-blocking. Check FIFO status before.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Data byte read from RX FIFO. </dd></dl> + +</div> +</div> +<a id="a4fe22b79183dc7d07a1b84a70328a00b" name="a4fe22b79183dc7d07a1b84a70328a00b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4fe22b79183dc7d07a1b84a70328a00b">&#9670;&#160;</a></span>neorv32_twd_get_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_get_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get TWD FIFO depth.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries), zero if no FIFO implemented </dd></dl> + +</div> +</div> +<a id="a0cbf868493aa8931e5c5bc71e5b478a4" name="a0cbf868493aa8931e5c5bc71e5b478a4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0cbf868493aa8931e5c5bc71e5b478a4">&#9670;&#160;</a></span>neorv32_twd_put()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twd_put </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Put data byte into TX FIFO.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function is non-blocking. Check FIFO status before.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Data byte to be stored in TX FIFO. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="af2b925dffe4e4d0f8412052b92281066" name="af2b925dffe4e4d0f8412052b92281066"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af2b925dffe4e4d0f8412052b92281066">&#9670;&#160;</a></span>neorv32_twd_rx_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_rx_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if RX data available.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if no data available, 1 if data is available. </dd></dl> + +</div> +</div> +<a id="a138bd6bdefed2a24b746ddb550a02407" name="a138bd6bdefed2a24b746ddb550a02407"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a138bd6bdefed2a24b746ddb550a02407">&#9670;&#160;</a></span>neorv32_twd_rx_full()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_rx_full </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if RX FIFO is full.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if no RX FIFO is not full, 1 if RX FIFO is full. </dd></dl> + +</div> +</div> +<a id="a4d167a59c4297e0e93af5a74091bd752" name="a4d167a59c4297e0e93af5a74091bd752"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4d167a59c4297e0e93af5a74091bd752">&#9670;&#160;</a></span>neorv32_twd_sense_scl()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_sense_scl </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current state of SCL bus line.</p> +<dl class="section return"><dt>Returns</dt><dd>1 if SCL is high, 0 if SCL is low. </dd></dl> + +</div> +</div> +<a id="a6b728dd7e359c1f3ae170a4dae054a31" name="a6b728dd7e359c1f3ae170a4dae054a31"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6b728dd7e359c1f3ae170a4dae054a31">&#9670;&#160;</a></span>neorv32_twd_sense_sda()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_sense_sda </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current state of SDA bus line.</p> +<dl class="section return"><dt>Returns</dt><dd>1 if SDA is high, 0 if SDA is low. </dd></dl> + +</div> +</div> +<a id="ace89f57655c6aacf6e05a5b6a29a1616" name="ace89f57655c6aacf6e05a5b6a29a1616"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ace89f57655c6aacf6e05a5b6a29a1616">&#9670;&#160;</a></span>neorv32_twd_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twd_setup </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>device_addr</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>fsel</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>irq_rx_avail</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>irq_rx_full</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>irq_tx_empty</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable and configure TWD controller. The TWD control register bits are listed in <a class="el" href="#a5d944bd98813c6a1fa9f54588962fd18">NEORV32_TWD_CTRL_enum</a>.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">device_addr</td><td>7-bit device address. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">fsel</td><td>Bus sample clock / filter select. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_rx_avail</td><td>IRQ if RX FIFO data available. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_rx_full</td><td>IRQ if RX FIFO full. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_tx_empty</td><td>IRQ if TX FIFO empty. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ae106ee8a74649853eab1b2a07c2c0ede" name="ae106ee8a74649853eab1b2a07c2c0ede"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae106ee8a74649853eab1b2a07c2c0ede">&#9670;&#160;</a></span>neorv32_twd_tx_empty()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_tx_empty </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TX FIFO is empty.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if no TX FIFO is not empty, 1 if TX FIFO is empty. </dd></dl> + +</div> +</div> +<a id="ac06102b8e4f692415ec91d37253a3118" name="ac06102b8e4f692415ec91d37253a3118"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac06102b8e4f692415ec91d37253a3118">&#9670;&#160;</a></span>neorv32_twd_tx_full()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twd_tx_full </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TX FIFO is full.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if no TX FIFO is not full, 1 if TX FIFO is full. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__twd_8h_source.html b/sw/neorv32__twd_8h_source.html new file mode 100644 index 0000000000..9880b7f940 --- /dev/null +++ b/sw/neorv32__twd_8h_source.html @@ -0,0 +1,215 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_twd.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_twd.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__twd_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_twd_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_twd_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__twd__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__twd__t.html#acff774cf759c304daf68d709b41b781a"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__twd__t.html#acff774cf759c304daf68d709b41b781a">CTRL</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__twd__t.html#a0ce59594f8c1aa8cffc78a384c6f6257"> 31</a></span> uint32_t <a class="code hl_variable" href="structneorv32__twd__t.html#a0ce59594f8c1aa8cffc78a384c6f6257">DATA</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>} <a class="code hl_struct" href="structneorv32__twd__t.html">neorv32_twd_t</a>;</div> +</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#ac9995cfc63846945ac26992148cd9401"> 35</a></span><span class="preprocessor">#define NEORV32_TWD ((neorv32_twd_t*) (NEORV32_TWD_BASE))</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="foldopen" id="foldopen00038" data-start="{" data-end="};"> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18"> 38</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18">NEORV32_TWD_CTRL_enum</a> {</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aded9f8ad7a2e0217e73d8484246157b2"> 39</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aded9f8ad7a2e0217e73d8484246157b2">TWD_CTRL_EN</a> = 0, </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a1a951d8cf167b79bffdd8f19033ba657"> 40</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a1a951d8cf167b79bffdd8f19033ba657">TWD_CTRL_CLR_RX</a> = 1, </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ab2d8eef73a9cc3de9bf99c5bf9c7114b"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ab2d8eef73a9cc3de9bf99c5bf9c7114b">TWD_CTRL_CLR_TX</a> = 2, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aef0fcc46f5595fa73fe547f0737f85e6"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aef0fcc46f5595fa73fe547f0737f85e6">TWD_CTRL_FSEL</a> = 3, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a3cc82a5ab8ad0ac4cff85b40d2ed6ffe"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a3cc82a5ab8ad0ac4cff85b40d2ed6ffe">TWD_CTRL_DEV_ADDR0</a> = 4, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18abea8949a5164bd28f1504a34dadb17c2"> 44</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18abea8949a5164bd28f1504a34dadb17c2">TWD_CTRL_DEV_ADDR6</a> = 10, </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad59552e7f3c7c747307f71e78ac1c00b"> 45</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad59552e7f3c7c747307f71e78ac1c00b">TWD_CTRL_IRQ_RX_AVAIL</a> = 11, </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af6d6b5bda034fc7af54036c95b94c01a"> 46</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af6d6b5bda034fc7af54036c95b94c01a">TWD_CTRL_IRQ_RX_FULL</a> = 12, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a73bfda5ccd72ba0c8deed6d848013757"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a73bfda5ccd72ba0c8deed6d848013757">TWD_CTRL_IRQ_TX_EMPTY</a> = 13, </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a943bbe073ea36da264cb16f5a9f2acc9"> 49</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a943bbe073ea36da264cb16f5a9f2acc9">TWD_CTRL_FIFO_LSB</a> = 15, </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af121649145e5403bf44246d416c26530"> 50</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af121649145e5403bf44246d416c26530">TWD_CTRL_FIFO_MSB</a> = 18, </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aaf31cc771b97f6b1f4d2da2347f43878"> 52</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aaf31cc771b97f6b1f4d2da2347f43878">TWD_CTRL_RX_AVAIL</a> = 25, </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad1360350bafec23f10e28ffddefa625a"> 53</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad1360350bafec23f10e28ffddefa625a">TWD_CTRL_RX_FULL</a> = 26, </div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a428ca1617d4bc287fbf03bfc74d12dfd"> 54</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a428ca1617d4bc287fbf03bfc74d12dfd">TWD_CTRL_TX_EMPTY</a> = 27, </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a243f36178c91f94ccc848399a3b715b5"> 55</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a243f36178c91f94ccc848399a3b715b5">TWD_CTRL_TX_FULL</a> = 28, </div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a8816adbecd0c929c88134e9e41efcf5c"> 56</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a8816adbecd0c929c88134e9e41efcf5c">TWD_CTRL_SENSE_SCL</a> = 29, </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18acc0cdd72b63e7a029e97ae942754958c"> 57</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18acc0cdd72b63e7a029e97ae942754958c">TWD_CTRL_SENSE_SDA</a> = 30, </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a71eb18275ffd7138251049c39294f4f3">TWD_CTRL_BUSY</a> = 31 </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a71eb18275ffd7138251049c39294f4f3"> 59</a></span>};</div> +</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div> +<div class="foldopen" id="foldopen00062" data-start="{" data-end="};"> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8"> 62</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8">NEORV32_TWD_DATA_enum</a> {</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a5f5e055b2d8ea968da1670251b70f824"> 63</a></span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a5f5e055b2d8ea968da1670251b70f824">TWD_DATA_LSB</a> = 0, </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <a class="code hl_enumvalue" href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a8f40d28bfc00d40ba03560bf44d47829">TWD_DATA_MSB</a> = 7 </div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a8f40d28bfc00d40ba03560bf44d47829"> 65</a></span>};</div> +</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twd_8h.html#ae6392461557d300b3b9c1f8e63a7dcc7">neorv32_twd_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twd_8h.html#ace89f57655c6aacf6e05a5b6a29a1616">neorv32_twd_setup</a>(<span class="keywordtype">int</span> device_addr, <span class="keywordtype">int</span> fsel, <span class="keywordtype">int</span> irq_rx_avail, <span class="keywordtype">int</span> irq_rx_full, <span class="keywordtype">int</span> irq_tx_empty);</div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twd_8h.html#a4fe22b79183dc7d07a1b84a70328a00b">neorv32_twd_get_fifo_depth</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twd_8h.html#af82c89d23e3fc3fbd61c750ecb25d0dc">neorv32_twd_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twd_8h.html#a7fa01904130031ab2dee77b4058061c7">neorv32_twd_enable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twd_8h.html#ab12e92dfbe37710c12b44fed97c01c06">neorv32_twd_clear_rx</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twd_8h.html#a38f7c54e2b356851f3b18011796f3902">neorv32_twd_clear_tx</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twd_8h.html#a4d167a59c4297e0e93af5a74091bd752">neorv32_twd_sense_scl</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twd_8h.html#a6b728dd7e359c1f3ae170a4dae054a31">neorv32_twd_sense_sda</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twd_8h.html#a90e8f83ff4f6f05a5aef0046e82dc908">neorv32_twd_busy</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twd_8h.html#af2b925dffe4e4d0f8412052b92281066">neorv32_twd_rx_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twd_8h.html#a138bd6bdefed2a24b746ddb550a02407">neorv32_twd_rx_full</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twd_8h.html#ae106ee8a74649853eab1b2a07c2c0ede">neorv32_twd_tx_empty</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twd_8h.html#ac06102b8e4f692415ec91d37253a3118">neorv32_twd_tx_full</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twd_8h.html#a0cbf868493aa8931e5c5bc71e5b478a4">neorv32_twd_put</a>(uint8_t data);</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span>uint8_t <a class="code hl_function" href="neorv32__twd_8h.html#a6382d25525ff9bb88e6df0802f0037e2">neorv32_twd_get</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_twd_h</span></div> +<div class="ttc" id="aneorv32__twd_8h_html_a0cbf868493aa8931e5c5bc71e5b478a4"><div class="ttname"><a href="neorv32__twd_8h.html#a0cbf868493aa8931e5c5bc71e5b478a4">neorv32_twd_put</a></div><div class="ttdeci">void neorv32_twd_put(uint8_t data)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:228</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a138bd6bdefed2a24b746ddb550a02407"><div class="ttname"><a href="neorv32__twd_8h.html#a138bd6bdefed2a24b746ddb550a02407">neorv32_twd_rx_full</a></div><div class="ttdeci">int neorv32_twd_rx_full(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:178</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a38f7c54e2b356851f3b18011796f3902"><div class="ttname"><a href="neorv32__twd_8h.html#a38f7c54e2b356851f3b18011796f3902">neorv32_twd_clear_tx</a></div><div class="ttdeci">void neorv32_twd_clear_tx(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:103</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a4d167a59c4297e0e93af5a74091bd752"><div class="ttname"><a href="neorv32__twd_8h.html#a4d167a59c4297e0e93af5a74091bd752">neorv32_twd_sense_scl</a></div><div class="ttdeci">int neorv32_twd_sense_scl(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:114</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a4fe22b79183dc7d07a1b84a70328a00b"><div class="ttname"><a href="neorv32__twd_8h.html#a4fe22b79183dc7d07a1b84a70328a00b">neorv32_twd_get_fifo_depth</a></div><div class="ttdeci">int neorv32_twd_get_fifo_depth(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:66</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18">NEORV32_TWD_CTRL_enum</a></div><div class="ttdeci">NEORV32_TWD_CTRL_enum</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:38</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18a1a951d8cf167b79bffdd8f19033ba657"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a1a951d8cf167b79bffdd8f19033ba657">TWD_CTRL_CLR_RX</a></div><div class="ttdeci">@ TWD_CTRL_CLR_RX</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:40</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18a243f36178c91f94ccc848399a3b715b5"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a243f36178c91f94ccc848399a3b715b5">TWD_CTRL_TX_FULL</a></div><div class="ttdeci">@ TWD_CTRL_TX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:55</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18a3cc82a5ab8ad0ac4cff85b40d2ed6ffe"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a3cc82a5ab8ad0ac4cff85b40d2ed6ffe">TWD_CTRL_DEV_ADDR0</a></div><div class="ttdeci">@ TWD_CTRL_DEV_ADDR0</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:43</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18a428ca1617d4bc287fbf03bfc74d12dfd"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a428ca1617d4bc287fbf03bfc74d12dfd">TWD_CTRL_TX_EMPTY</a></div><div class="ttdeci">@ TWD_CTRL_TX_EMPTY</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:54</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18a71eb18275ffd7138251049c39294f4f3"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a71eb18275ffd7138251049c39294f4f3">TWD_CTRL_BUSY</a></div><div class="ttdeci">@ TWD_CTRL_BUSY</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:58</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18a73bfda5ccd72ba0c8deed6d848013757"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a73bfda5ccd72ba0c8deed6d848013757">TWD_CTRL_IRQ_TX_EMPTY</a></div><div class="ttdeci">@ TWD_CTRL_IRQ_TX_EMPTY</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:47</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18a8816adbecd0c929c88134e9e41efcf5c"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a8816adbecd0c929c88134e9e41efcf5c">TWD_CTRL_SENSE_SCL</a></div><div class="ttdeci">@ TWD_CTRL_SENSE_SCL</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:56</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18a943bbe073ea36da264cb16f5a9f2acc9"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a943bbe073ea36da264cb16f5a9f2acc9">TWD_CTRL_FIFO_LSB</a></div><div class="ttdeci">@ TWD_CTRL_FIFO_LSB</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:49</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18aaf31cc771b97f6b1f4d2da2347f43878"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aaf31cc771b97f6b1f4d2da2347f43878">TWD_CTRL_RX_AVAIL</a></div><div class="ttdeci">@ TWD_CTRL_RX_AVAIL</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:52</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18ab2d8eef73a9cc3de9bf99c5bf9c7114b"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ab2d8eef73a9cc3de9bf99c5bf9c7114b">TWD_CTRL_CLR_TX</a></div><div class="ttdeci">@ TWD_CTRL_CLR_TX</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:41</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18abea8949a5164bd28f1504a34dadb17c2"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18abea8949a5164bd28f1504a34dadb17c2">TWD_CTRL_DEV_ADDR6</a></div><div class="ttdeci">@ TWD_CTRL_DEV_ADDR6</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:44</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18acc0cdd72b63e7a029e97ae942754958c"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18acc0cdd72b63e7a029e97ae942754958c">TWD_CTRL_SENSE_SDA</a></div><div class="ttdeci">@ TWD_CTRL_SENSE_SDA</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:57</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18ad1360350bafec23f10e28ffddefa625a"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad1360350bafec23f10e28ffddefa625a">TWD_CTRL_RX_FULL</a></div><div class="ttdeci">@ TWD_CTRL_RX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:53</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18ad59552e7f3c7c747307f71e78ac1c00b"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad59552e7f3c7c747307f71e78ac1c00b">TWD_CTRL_IRQ_RX_AVAIL</a></div><div class="ttdeci">@ TWD_CTRL_IRQ_RX_AVAIL</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:45</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18aded9f8ad7a2e0217e73d8484246157b2"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aded9f8ad7a2e0217e73d8484246157b2">TWD_CTRL_EN</a></div><div class="ttdeci">@ TWD_CTRL_EN</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:39</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18aef0fcc46f5595fa73fe547f0737f85e6"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aef0fcc46f5595fa73fe547f0737f85e6">TWD_CTRL_FSEL</a></div><div class="ttdeci">@ TWD_CTRL_FSEL</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:42</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18af121649145e5403bf44246d416c26530"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af121649145e5403bf44246d416c26530">TWD_CTRL_FIFO_MSB</a></div><div class="ttdeci">@ TWD_CTRL_FIFO_MSB</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:50</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a5d944bd98813c6a1fa9f54588962fd18af6d6b5bda034fc7af54036c95b94c01a"><div class="ttname"><a href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af6d6b5bda034fc7af54036c95b94c01a">TWD_CTRL_IRQ_RX_FULL</a></div><div class="ttdeci">@ TWD_CTRL_IRQ_RX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:46</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a6382d25525ff9bb88e6df0802f0037e2"><div class="ttname"><a href="neorv32__twd_8h.html#a6382d25525ff9bb88e6df0802f0037e2">neorv32_twd_get</a></div><div class="ttdeci">uint8_t neorv32_twd_get(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:241</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a6745c84c540b583eb7fe9bd9f2f6bcc8"><div class="ttname"><a href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8">NEORV32_TWD_DATA_enum</a></div><div class="ttdeci">NEORV32_TWD_DATA_enum</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:62</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a6745c84c540b583eb7fe9bd9f2f6bcc8a5f5e055b2d8ea968da1670251b70f824"><div class="ttname"><a href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a5f5e055b2d8ea968da1670251b70f824">TWD_DATA_LSB</a></div><div class="ttdeci">@ TWD_DATA_LSB</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:63</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a6745c84c540b583eb7fe9bd9f2f6bcc8a8f40d28bfc00d40ba03560bf44d47829"><div class="ttname"><a href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a8f40d28bfc00d40ba03560bf44d47829">TWD_DATA_MSB</a></div><div class="ttdeci">@ TWD_DATA_MSB</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:64</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a6b728dd7e359c1f3ae170a4dae054a31"><div class="ttname"><a href="neorv32__twd_8h.html#a6b728dd7e359c1f3ae170a4dae054a31">neorv32_twd_sense_sda</a></div><div class="ttdeci">int neorv32_twd_sense_sda(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:130</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a7fa01904130031ab2dee77b4058061c7"><div class="ttname"><a href="neorv32__twd_8h.html#a7fa01904130031ab2dee77b4058061c7">neorv32_twd_enable</a></div><div class="ttdeci">void neorv32_twd_enable(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:85</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_a90e8f83ff4f6f05a5aef0046e82dc908"><div class="ttname"><a href="neorv32__twd_8h.html#a90e8f83ff4f6f05a5aef0046e82dc908">neorv32_twd_busy</a></div><div class="ttdeci">int neorv32_twd_busy(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:146</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_ab12e92dfbe37710c12b44fed97c01c06"><div class="ttname"><a href="neorv32__twd_8h.html#ab12e92dfbe37710c12b44fed97c01c06">neorv32_twd_clear_rx</a></div><div class="ttdeci">void neorv32_twd_clear_rx(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:94</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_ac06102b8e4f692415ec91d37253a3118"><div class="ttname"><a href="neorv32__twd_8h.html#ac06102b8e4f692415ec91d37253a3118">neorv32_twd_tx_full</a></div><div class="ttdeci">int neorv32_twd_tx_full(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:210</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_ace89f57655c6aacf6e05a5b6a29a1616"><div class="ttname"><a href="neorv32__twd_8h.html#ace89f57655c6aacf6e05a5b6a29a1616">neorv32_twd_setup</a></div><div class="ttdeci">void neorv32_twd_setup(int device_addr, int fsel, int irq_rx_avail, int irq_rx_full, int irq_tx_empty)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:46</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_ae106ee8a74649853eab1b2a07c2c0ede"><div class="ttname"><a href="neorv32__twd_8h.html#ae106ee8a74649853eab1b2a07c2c0ede">neorv32_twd_tx_empty</a></div><div class="ttdeci">int neorv32_twd_tx_empty(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:194</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_ae6392461557d300b3b9c1f8e63a7dcc7"><div class="ttname"><a href="neorv32__twd_8h.html#ae6392461557d300b3b9c1f8e63a7dcc7">neorv32_twd_available</a></div><div class="ttdeci">int neorv32_twd_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:26</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_af2b925dffe4e4d0f8412052b92281066"><div class="ttname"><a href="neorv32__twd_8h.html#af2b925dffe4e4d0f8412052b92281066">neorv32_twd_rx_available</a></div><div class="ttdeci">int neorv32_twd_rx_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:162</div></div> +<div class="ttc" id="aneorv32__twd_8h_html_af82c89d23e3fc3fbd61c750ecb25d0dc"><div class="ttname"><a href="neorv32__twd_8h.html#af82c89d23e3fc3fbd61c750ecb25d0dc">neorv32_twd_disable</a></div><div class="ttdeci">void neorv32_twd_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_twd.c:76</div></div> +<div class="ttc" id="astructneorv32__twd__t_html"><div class="ttname"><a href="structneorv32__twd__t.html">neorv32_twd_t</a></div><div class="ttdef"><b>Definition</b> neorv32_twd.h:29</div></div> +<div class="ttc" id="astructneorv32__twd__t_html_a0ce59594f8c1aa8cffc78a384c6f6257"><div class="ttname"><a href="structneorv32__twd__t.html#a0ce59594f8c1aa8cffc78a384c6f6257">neorv32_twd_t::DATA</a></div><div class="ttdeci">uint32_t DATA</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:31</div></div> +<div class="ttc" id="astructneorv32__twd__t_html_acff774cf759c304daf68d709b41b781a"><div class="ttname"><a href="structneorv32__twd__t.html#acff774cf759c304daf68d709b41b781a">neorv32_twd_t::CTRL</a></div><div class="ttdeci">uint32_t CTRL</div><div class="ttdef"><b>Definition</b> neorv32_twd.h:30</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__twi_8c.html b/sw/neorv32__twi_8c.html new file mode 100644 index 0000000000..b540c29928 --- /dev/null +++ b/sw/neorv32__twi_8c.html @@ -0,0 +1,476 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_twi.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_twi.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Two-Wire Interface Controller (TWI) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:aa2e01ebbc0c82d65ed4ded351f4d8711" id="r_aa2e01ebbc0c82d65ed4ded351f4d8711"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa2e01ebbc0c82d65ed4ded351f4d8711">neorv32_twi_available</a> (void)</td></tr> +<tr class="separator:aa2e01ebbc0c82d65ed4ded351f4d8711"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7ea6f3509a7cf622234d4b83e33afbe3" id="r_a7ea6f3509a7cf622234d4b83e33afbe3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7ea6f3509a7cf622234d4b83e33afbe3">neorv32_twi_setup</a> (int prsc, int cdiv, int clkstr)</td></tr> +<tr class="separator:a7ea6f3509a7cf622234d4b83e33afbe3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2c8f3bc55f4a9a8bdcb111759cf56ae2" id="r_a2c8f3bc55f4a9a8bdcb111759cf56ae2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2c8f3bc55f4a9a8bdcb111759cf56ae2">neorv32_twi_get_fifo_depth</a> (void)</td></tr> +<tr class="separator:a2c8f3bc55f4a9a8bdcb111759cf56ae2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae5f31e737c7a6c3c86070ff34cb0d861" id="r_ae5f31e737c7a6c3c86070ff34cb0d861"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae5f31e737c7a6c3c86070ff34cb0d861">neorv32_twi_disable</a> (void)</td></tr> +<tr class="separator:ae5f31e737c7a6c3c86070ff34cb0d861"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a22717887cffff1e6830756bc73140e7b" id="r_a22717887cffff1e6830756bc73140e7b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a22717887cffff1e6830756bc73140e7b">neorv32_twi_enable</a> (void)</td></tr> +<tr class="separator:a22717887cffff1e6830756bc73140e7b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a71e204837e71ce8c18c66e2ef3e7d9ef" id="r_a71e204837e71ce8c18c66e2ef3e7d9ef"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a71e204837e71ce8c18c66e2ef3e7d9ef">neorv32_twi_sense_scl</a> (void)</td></tr> +<tr class="separator:a71e204837e71ce8c18c66e2ef3e7d9ef"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7645e3ba5a92ea0fbe446dbaac33b363" id="r_a7645e3ba5a92ea0fbe446dbaac33b363"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7645e3ba5a92ea0fbe446dbaac33b363">neorv32_twi_sense_sda</a> (void)</td></tr> +<tr class="separator:a7645e3ba5a92ea0fbe446dbaac33b363"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4fff1ddade320f6cc568c6266f2c2acd" id="r_a4fff1ddade320f6cc568c6266f2c2acd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4fff1ddade320f6cc568c6266f2c2acd">neorv32_twi_busy</a> (void)</td></tr> +<tr class="separator:a4fff1ddade320f6cc568c6266f2c2acd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7735376d26560866b153ed205dfcb2ba" id="r_a7735376d26560866b153ed205dfcb2ba"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7735376d26560866b153ed205dfcb2ba">neorv32_twi_get</a> (uint8_t *data)</td></tr> +<tr class="separator:a7735376d26560866b153ed205dfcb2ba"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac7020f3379602f11c47ca16f1bd82f2e" id="r_ac7020f3379602f11c47ca16f1bd82f2e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac7020f3379602f11c47ca16f1bd82f2e">neorv32_twi_trans</a> (uint8_t *data, int mack)</td></tr> +<tr class="separator:ac7020f3379602f11c47ca16f1bd82f2e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad352447adcccccabd4e20577b34fbece" id="r_ad352447adcccccabd4e20577b34fbece"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad352447adcccccabd4e20577b34fbece">neorv32_twi_generate_stop</a> (void)</td></tr> +<tr class="separator:ad352447adcccccabd4e20577b34fbece"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a633d460e4735eb369d74a834b03c8b78" id="r_a633d460e4735eb369d74a834b03c8b78"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a633d460e4735eb369d74a834b03c8b78">neorv32_twi_generate_start</a> (void)</td></tr> +<tr class="separator:a633d460e4735eb369d74a834b03c8b78"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a28fc44cce5d28f6e8c32268b239b07d5" id="r_a28fc44cce5d28f6e8c32268b239b07d5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a28fc44cce5d28f6e8c32268b239b07d5">neorv32_twi_send_nonblocking</a> (uint8_t data, int mack)</td></tr> +<tr class="separator:a28fc44cce5d28f6e8c32268b239b07d5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa22430aab0a38d88cbd2c4220c573da0" id="r_aa22430aab0a38d88cbd2c4220c573da0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa22430aab0a38d88cbd2c4220c573da0">neorv32_twi_generate_stop_nonblocking</a> (void)</td></tr> +<tr class="separator:aa22430aab0a38d88cbd2c4220c573da0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adbf2eaed0c76221da5c3091665fc885e" id="r_adbf2eaed0c76221da5c3091665fc885e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adbf2eaed0c76221da5c3091665fc885e">neorv32_twi_generate_start_nonblocking</a> (void)</td></tr> +<tr class="separator:adbf2eaed0c76221da5c3091665fc885e"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Two-Wire Interface Controller (TWI) HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the TWI unit was synthesized (IO_TWI_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="aa2e01ebbc0c82d65ed4ded351f4d8711" name="aa2e01ebbc0c82d65ed4ded351f4d8711"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa2e01ebbc0c82d65ed4ded351f4d8711">&#9670;&#160;</a></span>neorv32_twi_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TWI unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if TWI was not synthesized, 1 if TWI is available. </dd></dl> + +</div> +</div> +<a id="a4fff1ddade320f6cc568c6266f2c2acd" name="a4fff1ddade320f6cc568c6266f2c2acd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4fff1ddade320f6cc568c6266f2c2acd">&#9670;&#160;</a></span>neorv32_twi_busy()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_busy </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TWI controller is busy (TWI bus engine busy or TX FIFO not empty).</p> +<dl class="section return"><dt>Returns</dt><dd>0 if idle, 1 if busy </dd></dl> + +</div> +</div> +<a id="ae5f31e737c7a6c3c86070ff34cb0d861" name="ae5f31e737c7a6c3c86070ff34cb0d861"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae5f31e737c7a6c3c86070ff34cb0d861">&#9670;&#160;</a></span>neorv32_twi_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable TWI controller. </p> + +</div> +</div> +<a id="a22717887cffff1e6830756bc73140e7b" name="a22717887cffff1e6830756bc73140e7b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a22717887cffff1e6830756bc73140e7b">&#9670;&#160;</a></span>neorv32_twi_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable TWI controller. </p> + +</div> +</div> +<a id="a633d460e4735eb369d74a834b03c8b78" name="a633d460e4735eb369d74a834b03c8b78"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a633d460e4735eb369d74a834b03c8b78">&#9670;&#160;</a></span>neorv32_twi_generate_start()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_generate_start </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Generate START (or REPEATED-START) condition.</p> +<dl class="section note"><dt>Note</dt><dd>Blocking function. </dd></dl> + +</div> +</div> +<a id="adbf2eaed0c76221da5c3091665fc885e" name="adbf2eaed0c76221da5c3091665fc885e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adbf2eaed0c76221da5c3091665fc885e">&#9670;&#160;</a></span>neorv32_twi_generate_start_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_generate_start_nonblocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Generate START (or REPEATED-START) condition.</p> +<dl class="section note"><dt>Note</dt><dd>Non-blocking function; does not check the TX FIFO. </dd></dl> + +</div> +</div> +<a id="ad352447adcccccabd4e20577b34fbece" name="ad352447adcccccabd4e20577b34fbece"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad352447adcccccabd4e20577b34fbece">&#9670;&#160;</a></span>neorv32_twi_generate_stop()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_generate_stop </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Generate STOP condition.</p> +<dl class="section note"><dt>Note</dt><dd>Blocking function. </dd></dl> + +</div> +</div> +<a id="aa22430aab0a38d88cbd2c4220c573da0" name="aa22430aab0a38d88cbd2c4220c573da0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa22430aab0a38d88cbd2c4220c573da0">&#9670;&#160;</a></span>neorv32_twi_generate_stop_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_generate_stop_nonblocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Generate STOP condition.</p> +<dl class="section note"><dt>Note</dt><dd>Non-blocking function; does not check the TX FIFO. </dd></dl> + +</div> +</div> +<a id="a7735376d26560866b153ed205dfcb2ba" name="a7735376d26560866b153ed205dfcb2ba"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7735376d26560866b153ed205dfcb2ba">&#9670;&#160;</a></span>neorv32_twi_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_get </td> + <td>(</td> + <td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get received data + ACK/NACH from RX FIFO.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">data</td><td>Pointer for returned data (uint8_t). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>RX FIFO access status (-1 = no data available, 0 = ACK received, 1 = NACK received). </dd></dl> + +</div> +</div> +<a id="a2c8f3bc55f4a9a8bdcb111759cf56ae2" name="a2c8f3bc55f4a9a8bdcb111759cf56ae2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2c8f3bc55f4a9a8bdcb111759cf56ae2">&#9670;&#160;</a></span>neorv32_twi_get_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_get_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get TWI FIFO depth.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries), zero if no FIFO implemented </dd></dl> + +</div> +</div> +<a id="a28fc44cce5d28f6e8c32268b239b07d5" name="a28fc44cce5d28f6e8c32268b239b07d5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a28fc44cce5d28f6e8c32268b239b07d5">&#9670;&#160;</a></span>neorv32_twi_send_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_send_nonblocking </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>data</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>mack</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Send data byte (RX can be read via <a class="el" href="#a7735376d26560866b153ed205dfcb2ba">neorv32_twi_get()</a>).</p> +<dl class="section note"><dt>Note</dt><dd>Non-blocking function; does not check the TX FIFO.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Data byte to be send. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">mack</td><td>Generate ACK by host controller when set. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a71e204837e71ce8c18c66e2ef3e7d9ef" name="a71e204837e71ce8c18c66e2ef3e7d9ef"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a71e204837e71ce8c18c66e2ef3e7d9ef">&#9670;&#160;</a></span>neorv32_twi_sense_scl()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_sense_scl </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current state of SCL bus line.</p> +<dl class="section return"><dt>Returns</dt><dd>1 if SCL is high, 0 if SCL is low. </dd></dl> + +</div> +</div> +<a id="a7645e3ba5a92ea0fbe446dbaac33b363" name="a7645e3ba5a92ea0fbe446dbaac33b363"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7645e3ba5a92ea0fbe446dbaac33b363">&#9670;&#160;</a></span>neorv32_twi_sense_sda()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_sense_sda </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current state of SDA bus line.</p> +<dl class="section return"><dt>Returns</dt><dd>1 if SDA is high, 0 if SDA is low. </dd></dl> + +</div> +</div> +<a id="a7ea6f3509a7cf622234d4b83e33afbe3" name="a7ea6f3509a7cf622234d4b83e33afbe3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7ea6f3509a7cf622234d4b83e33afbe3">&#9670;&#160;</a></span>neorv32_twi_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_setup </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>prsc</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cdiv</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>clkstr</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable and configure TWI controller. The TWI control register bits are listed in <a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafa">NEORV32_TWI_CTRL_enum</a>.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>Clock prescaler select (0..7). See <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">cdiv</td><td>Clock divider (0..15). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">clkstr</td><td>Enable (allow) clock stretching. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac7020f3379602f11c47ca16f1bd82f2e" name="ac7020f3379602f11c47ca16f1bd82f2e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac7020f3379602f11c47ca16f1bd82f2e">&#9670;&#160;</a></span>neorv32_twi_trans()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_trans </td> + <td>(</td> + <td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>data</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>mack</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>TWI transfer: send data byte and also receive data byte.</p> +<dl class="section note"><dt>Note</dt><dd>Blocking function.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">data</td><td>Pointer for TX/RX data (uint8_t). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">mack</td><td>Generate ACK by host controller when set. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0: ACK received, 1: NACK received. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__twi_8h.html b/sw/neorv32__twi_8h.html new file mode 100644 index 0000000000..e37cc012e4 --- /dev/null +++ b/sw/neorv32__twi_8h.html @@ -0,0 +1,630 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_twi.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_twi.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Two-Wire Interface Controller (TWI) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__twi_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__twi__t.html">neorv32_twi_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">TWI commands</div></td></tr> +<tr class="memitem:a62866821d0aa4500114ce2a7295ffb73" id="r_a62866821d0aa4500114ce2a7295ffb73"><td class="memItemLeft" align="right" valign="top"><a id="a62866821d0aa4500114ce2a7295ffb73" name="a62866821d0aa4500114ce2a7295ffb73"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>TWI_CMD_NOP</b>&#160;&#160;&#160;(0b00)</td></tr> +<tr class="separator:a62866821d0aa4500114ce2a7295ffb73"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad55273f04f6b92146f0a1c3e8e6abe5e" id="r_ad55273f04f6b92146f0a1c3e8e6abe5e"><td class="memItemLeft" align="right" valign="top"><a id="ad55273f04f6b92146f0a1c3e8e6abe5e" name="ad55273f04f6b92146f0a1c3e8e6abe5e"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>TWI_CMD_START</b>&#160;&#160;&#160;(0b01)</td></tr> +<tr class="separator:ad55273f04f6b92146f0a1c3e8e6abe5e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8b6b6c0bbeee2df9d3e246c4e49c2bd9" id="r_a8b6b6c0bbeee2df9d3e246c4e49c2bd9"><td class="memItemLeft" align="right" valign="top"><a id="a8b6b6c0bbeee2df9d3e246c4e49c2bd9" name="a8b6b6c0bbeee2df9d3e246c4e49c2bd9"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>TWI_CMD_STOP</b>&#160;&#160;&#160;(0b10)</td></tr> +<tr class="separator:a8b6b6c0bbeee2df9d3e246c4e49c2bd9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9770d78d5fa52d94606b1dfb6cefc144" id="r_a9770d78d5fa52d94606b1dfb6cefc144"><td class="memItemLeft" align="right" valign="top"><a id="a9770d78d5fa52d94606b1dfb6cefc144" name="a9770d78d5fa52d94606b1dfb6cefc144"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>TWI_CMD_RTX</b>&#160;&#160;&#160;(0b11)</td></tr> +<tr class="separator:a9770d78d5fa52d94606b1dfb6cefc144"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:aa2e01ebbc0c82d65ed4ded351f4d8711" id="r_aa2e01ebbc0c82d65ed4ded351f4d8711"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa2e01ebbc0c82d65ed4ded351f4d8711">neorv32_twi_available</a> (void)</td></tr> +<tr class="separator:aa2e01ebbc0c82d65ed4ded351f4d8711"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7ea6f3509a7cf622234d4b83e33afbe3" id="r_a7ea6f3509a7cf622234d4b83e33afbe3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7ea6f3509a7cf622234d4b83e33afbe3">neorv32_twi_setup</a> (int prsc, int cdiv, int clkstr)</td></tr> +<tr class="separator:a7ea6f3509a7cf622234d4b83e33afbe3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2c8f3bc55f4a9a8bdcb111759cf56ae2" id="r_a2c8f3bc55f4a9a8bdcb111759cf56ae2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2c8f3bc55f4a9a8bdcb111759cf56ae2">neorv32_twi_get_fifo_depth</a> (void)</td></tr> +<tr class="separator:a2c8f3bc55f4a9a8bdcb111759cf56ae2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae5f31e737c7a6c3c86070ff34cb0d861" id="r_ae5f31e737c7a6c3c86070ff34cb0d861"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae5f31e737c7a6c3c86070ff34cb0d861">neorv32_twi_disable</a> (void)</td></tr> +<tr class="separator:ae5f31e737c7a6c3c86070ff34cb0d861"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a22717887cffff1e6830756bc73140e7b" id="r_a22717887cffff1e6830756bc73140e7b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a22717887cffff1e6830756bc73140e7b">neorv32_twi_enable</a> (void)</td></tr> +<tr class="separator:a22717887cffff1e6830756bc73140e7b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a71e204837e71ce8c18c66e2ef3e7d9ef" id="r_a71e204837e71ce8c18c66e2ef3e7d9ef"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a71e204837e71ce8c18c66e2ef3e7d9ef">neorv32_twi_sense_scl</a> (void)</td></tr> +<tr class="separator:a71e204837e71ce8c18c66e2ef3e7d9ef"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7645e3ba5a92ea0fbe446dbaac33b363" id="r_a7645e3ba5a92ea0fbe446dbaac33b363"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7645e3ba5a92ea0fbe446dbaac33b363">neorv32_twi_sense_sda</a> (void)</td></tr> +<tr class="separator:a7645e3ba5a92ea0fbe446dbaac33b363"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4fff1ddade320f6cc568c6266f2c2acd" id="r_a4fff1ddade320f6cc568c6266f2c2acd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4fff1ddade320f6cc568c6266f2c2acd">neorv32_twi_busy</a> (void)</td></tr> +<tr class="separator:a4fff1ddade320f6cc568c6266f2c2acd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7735376d26560866b153ed205dfcb2ba" id="r_a7735376d26560866b153ed205dfcb2ba"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7735376d26560866b153ed205dfcb2ba">neorv32_twi_get</a> (uint8_t *data)</td></tr> +<tr class="separator:a7735376d26560866b153ed205dfcb2ba"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac7020f3379602f11c47ca16f1bd82f2e" id="r_ac7020f3379602f11c47ca16f1bd82f2e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac7020f3379602f11c47ca16f1bd82f2e">neorv32_twi_trans</a> (uint8_t *data, int mack)</td></tr> +<tr class="separator:ac7020f3379602f11c47ca16f1bd82f2e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad352447adcccccabd4e20577b34fbece" id="r_ad352447adcccccabd4e20577b34fbece"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad352447adcccccabd4e20577b34fbece">neorv32_twi_generate_stop</a> (void)</td></tr> +<tr class="separator:ad352447adcccccabd4e20577b34fbece"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a633d460e4735eb369d74a834b03c8b78" id="r_a633d460e4735eb369d74a834b03c8b78"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a633d460e4735eb369d74a834b03c8b78">neorv32_twi_generate_start</a> (void)</td></tr> +<tr class="separator:a633d460e4735eb369d74a834b03c8b78"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a28fc44cce5d28f6e8c32268b239b07d5" id="r_a28fc44cce5d28f6e8c32268b239b07d5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a28fc44cce5d28f6e8c32268b239b07d5">neorv32_twi_send_nonblocking</a> (uint8_t data, int mack)</td></tr> +<tr class="separator:a28fc44cce5d28f6e8c32268b239b07d5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa22430aab0a38d88cbd2c4220c573da0" id="r_aa22430aab0a38d88cbd2c4220c573da0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa22430aab0a38d88cbd2c4220c573da0">neorv32_twi_generate_stop_nonblocking</a> (void)</td></tr> +<tr class="separator:aa22430aab0a38d88cbd2c4220c573da0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adbf2eaed0c76221da5c3091665fc885e" id="r_adbf2eaed0c76221da5c3091665fc885e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adbf2eaed0c76221da5c3091665fc885e">neorv32_twi_generate_start_nonblocking</a> (void)</td></tr> +<tr class="separator:adbf2eaed0c76221da5c3091665fc885e"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: Two-Wire Interface Controller (TWI)</h2></td></tr> +<tr class="memitem:a2769c2fe5e0de01b12fe4a5fad029768" id="r_a2769c2fe5e0de01b12fe4a5fad029768"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2769c2fe5e0de01b12fe4a5fad029768">NEORV32_TWI</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__twi__t.html">neorv32_twi_t</a>*) (<a class="el" href="neorv32_8h.html#a4a741408a4bb0938e03b99555306db9c">NEORV32_TWI_BASE</a>))</td></tr> +<tr class="separator:a2769c2fe5e0de01b12fe4a5fad029768"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a71ef393d3b34d2dd0698590994b7dafa" id="r_a71ef393d3b34d2dd0698590994b7dafa"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a71ef393d3b34d2dd0698590994b7dafa">NEORV32_TWI_CTRL_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694">TWI_CTRL_EN</a> = 0 +, <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9">TWI_CTRL_PRSC0</a> = 1 +, <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df">TWI_CTRL_PRSC1</a> = 2 +, <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31">TWI_CTRL_PRSC2</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31">TWI_CTRL_CDIV0</a> = 4 +, <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674">TWI_CTRL_CDIV1</a> = 5 +, <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12">TWI_CTRL_CDIV2</a> = 6 +, <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc">TWI_CTRL_CDIV3</a> = 7 +, <br /> +&#160;&#160;<a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48">TWI_CTRL_CLKSTR</a> = 8 +, <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb">TWI_CTRL_FIFO_LSB</a> = 15 +, <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75">TWI_CTRL_FIFO_MSB</a> = 18 +, <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaa51ea52c7ad18f1a8bcb6c2a979802107">TWI_CTRL_SENSE_SCL</a> = 27 +, <br /> +&#160;&#160;<a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaaf715b63c5c3edbd1e61766df53c2dd6c">TWI_CTRL_SENSE_SDA</a> = 28 +, <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb">TWI_CTRL_TX_FULL</a> = 29 +, <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671">TWI_CTRL_RX_AVAIL</a> = 30 +, <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d">TWI_CTRL_BUSY</a> = 31 +<br /> + }</td></tr> +<tr class="separator:a71ef393d3b34d2dd0698590994b7dafa"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3421852c63baca60fe58c990b1c653d8" id="r_a3421852c63baca60fe58c990b1c653d8"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3421852c63baca60fe58c990b1c653d8">NEORV32_TWI_DCMD_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56">TWI_DCMD_LSB</a> = 0 +, <a class="el" href="#a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d">TWI_DCMD_MSB</a> = 7 +, <a class="el" href="#a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5">TWI_DCMD_ACK</a> = 8 +, <a class="el" href="#a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e">TWI_DCMD_CMD_LO</a> = 9 +, <br /> +&#160;&#160;<a class="el" href="#a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e">TWI_DCMD_CMD_HI</a> = 10 +<br /> + }</td></tr> +<tr class="separator:a3421852c63baca60fe58c990b1c653d8"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Two-Wire Interface Controller (TWI) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the TWI unit was synthesized (IO_TWI_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a2769c2fe5e0de01b12fe4a5fad029768" name="a2769c2fe5e0de01b12fe4a5fad029768"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2769c2fe5e0de01b12fe4a5fad029768">&#9670;&#160;</a></span>NEORV32_TWI</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_TWI&#160;&#160;&#160;((<a class="el" href="structneorv32__twi__t.html">neorv32_twi_t</a>*) (<a class="el" href="neorv32_8h.html#a4a741408a4bb0938e03b99555306db9c">NEORV32_TWI_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>TWI module hardware access (<a class="el" href="structneorv32__twi__t.html">neorv32_twi_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="a71ef393d3b34d2dd0698590994b7dafa" name="a71ef393d3b34d2dd0698590994b7dafa"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a71ef393d3b34d2dd0698590994b7dafa">&#9670;&#160;</a></span>NEORV32_TWI_CTRL_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafa">NEORV32_TWI_CTRL_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>TWI control register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694" name="a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694"></a>TWI_CTRL_EN&#160;</td><td class="fielddoc"><p>TWI control register(0) (r/w): TWI enable </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9" name="a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9"></a>TWI_CTRL_PRSC0&#160;</td><td class="fielddoc"><p>TWI control register(1) (r/w): Clock prescaler select bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df" name="a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df"></a>TWI_CTRL_PRSC1&#160;</td><td class="fielddoc"><p>TWI control register(2) (r/w): Clock prescaler select bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31" name="a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31"></a>TWI_CTRL_PRSC2&#160;</td><td class="fielddoc"><p>TWI control register(3) (r/w): Clock prescaler select bit 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31" name="a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31"></a>TWI_CTRL_CDIV0&#160;</td><td class="fielddoc"><p>TWI control register(4) (r/w): Clock divider bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674" name="a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674"></a>TWI_CTRL_CDIV1&#160;</td><td class="fielddoc"><p>TWI control register(5) (r/w): Clock divider bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12" name="a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12"></a>TWI_CTRL_CDIV2&#160;</td><td class="fielddoc"><p>TWI control register(6) (r/w): Clock divider bit 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc" name="a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc"></a>TWI_CTRL_CDIV3&#160;</td><td class="fielddoc"><p>TWI control register(7) (r/w): Clock divider bit 3 </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48" name="a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48"></a>TWI_CTRL_CLKSTR&#160;</td><td class="fielddoc"><p>TWI control register(8) (r/w): Enable/allow clock stretching </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb" name="a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb"></a>TWI_CTRL_FIFO_LSB&#160;</td><td class="fielddoc"><p>TWI control register(15) (r/-): log2(FIFO size), lsb </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75" name="a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75"></a>TWI_CTRL_FIFO_MSB&#160;</td><td class="fielddoc"><p>TWI control register(18) (r/-): log2(FIFO size), msb </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaa51ea52c7ad18f1a8bcb6c2a979802107" name="a71ef393d3b34d2dd0698590994b7dafaa51ea52c7ad18f1a8bcb6c2a979802107"></a>TWI_CTRL_SENSE_SCL&#160;</td><td class="fielddoc"><p>TWI control register(27) (r/-): current state of the SCL bus line </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaaf715b63c5c3edbd1e61766df53c2dd6c" name="a71ef393d3b34d2dd0698590994b7dafaaf715b63c5c3edbd1e61766df53c2dd6c"></a>TWI_CTRL_SENSE_SDA&#160;</td><td class="fielddoc"><p>TWI control register(28) (r/-): current state of the SDA bus line </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb" name="a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb"></a>TWI_CTRL_TX_FULL&#160;</td><td class="fielddoc"><p>TWI control register(29) (r/-): TX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671" name="a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671"></a>TWI_CTRL_RX_AVAIL&#160;</td><td class="fielddoc"><p>TWI control register(30) (r/-): RX FIFO data available </p> +</td></tr> +<tr><td class="fieldname"><a id="a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d" name="a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d"></a>TWI_CTRL_BUSY&#160;</td><td class="fielddoc"><p>TWI control register(31) (r/-): Bus engine busy or TX FIFO not empty </p> +</td></tr> +</table> + +</div> +</div> +<a id="a3421852c63baca60fe58c990b1c653d8" name="a3421852c63baca60fe58c990b1c653d8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3421852c63baca60fe58c990b1c653d8">&#9670;&#160;</a></span>NEORV32_TWI_DCMD_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a3421852c63baca60fe58c990b1c653d8">NEORV32_TWI_DCMD_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>TWI command/data register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56" name="a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56"></a>TWI_DCMD_LSB&#160;</td><td class="fielddoc"><p>TWI data register(0) (r/w): Receive/transmit data (8-bit) LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d" name="a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d"></a>TWI_DCMD_MSB&#160;</td><td class="fielddoc"><p>TWI data register(7) (r/w): Receive/transmit data (8-bit) MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5" name="a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5"></a>TWI_DCMD_ACK&#160;</td><td class="fielddoc"><p>TWI data register(8) (r/w): RX = ACK/NACK, TX = MACK </p> +</td></tr> +<tr><td class="fieldname"><a id="a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e" name="a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e"></a>TWI_DCMD_CMD_LO&#160;</td><td class="fielddoc"><p>TWI data register(9) (r/w): CMD lsb </p> +</td></tr> +<tr><td class="fieldname"><a id="a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e" name="a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e"></a>TWI_DCMD_CMD_HI&#160;</td><td class="fielddoc"><p>TWI data register(10) (r/w): CMD msb </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="aa2e01ebbc0c82d65ed4ded351f4d8711" name="aa2e01ebbc0c82d65ed4ded351f4d8711"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa2e01ebbc0c82d65ed4ded351f4d8711">&#9670;&#160;</a></span>neorv32_twi_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TWI unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if TWI was not synthesized, 1 if TWI is available. </dd></dl> + +</div> +</div> +<a id="a4fff1ddade320f6cc568c6266f2c2acd" name="a4fff1ddade320f6cc568c6266f2c2acd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4fff1ddade320f6cc568c6266f2c2acd">&#9670;&#160;</a></span>neorv32_twi_busy()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_busy </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if TWI controller is busy (TWI bus engine busy or TX FIFO not empty).</p> +<dl class="section return"><dt>Returns</dt><dd>0 if idle, 1 if busy </dd></dl> + +</div> +</div> +<a id="ae5f31e737c7a6c3c86070ff34cb0d861" name="ae5f31e737c7a6c3c86070ff34cb0d861"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae5f31e737c7a6c3c86070ff34cb0d861">&#9670;&#160;</a></span>neorv32_twi_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable TWI controller. </p> + +</div> +</div> +<a id="a22717887cffff1e6830756bc73140e7b" name="a22717887cffff1e6830756bc73140e7b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a22717887cffff1e6830756bc73140e7b">&#9670;&#160;</a></span>neorv32_twi_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable TWI controller. </p> + +</div> +</div> +<a id="a633d460e4735eb369d74a834b03c8b78" name="a633d460e4735eb369d74a834b03c8b78"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a633d460e4735eb369d74a834b03c8b78">&#9670;&#160;</a></span>neorv32_twi_generate_start()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_generate_start </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Generate START (or REPEATED-START) condition.</p> +<dl class="section note"><dt>Note</dt><dd>Blocking function. </dd></dl> + +</div> +</div> +<a id="adbf2eaed0c76221da5c3091665fc885e" name="adbf2eaed0c76221da5c3091665fc885e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adbf2eaed0c76221da5c3091665fc885e">&#9670;&#160;</a></span>neorv32_twi_generate_start_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_generate_start_nonblocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Generate START (or REPEATED-START) condition.</p> +<dl class="section note"><dt>Note</dt><dd>Non-blocking function; does not check the TX FIFO. </dd></dl> + +</div> +</div> +<a id="ad352447adcccccabd4e20577b34fbece" name="ad352447adcccccabd4e20577b34fbece"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad352447adcccccabd4e20577b34fbece">&#9670;&#160;</a></span>neorv32_twi_generate_stop()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_generate_stop </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Generate STOP condition.</p> +<dl class="section note"><dt>Note</dt><dd>Blocking function. </dd></dl> + +</div> +</div> +<a id="aa22430aab0a38d88cbd2c4220c573da0" name="aa22430aab0a38d88cbd2c4220c573da0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa22430aab0a38d88cbd2c4220c573da0">&#9670;&#160;</a></span>neorv32_twi_generate_stop_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_generate_stop_nonblocking </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Generate STOP condition.</p> +<dl class="section note"><dt>Note</dt><dd>Non-blocking function; does not check the TX FIFO. </dd></dl> + +</div> +</div> +<a id="a7735376d26560866b153ed205dfcb2ba" name="a7735376d26560866b153ed205dfcb2ba"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7735376d26560866b153ed205dfcb2ba">&#9670;&#160;</a></span>neorv32_twi_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_get </td> + <td>(</td> + <td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get received data + ACK/NACH from RX FIFO.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">data</td><td>Pointer for returned data (uint8_t). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>RX FIFO access status (-1 = no data available, 0 = ACK received, 1 = NACK received). </dd></dl> + +</div> +</div> +<a id="a2c8f3bc55f4a9a8bdcb111759cf56ae2" name="a2c8f3bc55f4a9a8bdcb111759cf56ae2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2c8f3bc55f4a9a8bdcb111759cf56ae2">&#9670;&#160;</a></span>neorv32_twi_get_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_get_fifo_depth </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get TWI FIFO depth.</p> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries), zero if no FIFO implemented </dd></dl> + +</div> +</div> +<a id="a28fc44cce5d28f6e8c32268b239b07d5" name="a28fc44cce5d28f6e8c32268b239b07d5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a28fc44cce5d28f6e8c32268b239b07d5">&#9670;&#160;</a></span>neorv32_twi_send_nonblocking()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_send_nonblocking </td> + <td>(</td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>data</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>mack</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Send data byte (RX can be read via <a class="el" href="neorv32__twi_8c.html#a7735376d26560866b153ed205dfcb2ba">neorv32_twi_get()</a>).</p> +<dl class="section note"><dt>Note</dt><dd>Non-blocking function; does not check the TX FIFO.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Data byte to be send. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">mack</td><td>Generate ACK by host controller when set. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a71e204837e71ce8c18c66e2ef3e7d9ef" name="a71e204837e71ce8c18c66e2ef3e7d9ef"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a71e204837e71ce8c18c66e2ef3e7d9ef">&#9670;&#160;</a></span>neorv32_twi_sense_scl()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_sense_scl </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current state of SCL bus line.</p> +<dl class="section return"><dt>Returns</dt><dd>1 if SCL is high, 0 if SCL is low. </dd></dl> + +</div> +</div> +<a id="a7645e3ba5a92ea0fbe446dbaac33b363" name="a7645e3ba5a92ea0fbe446dbaac33b363"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7645e3ba5a92ea0fbe446dbaac33b363">&#9670;&#160;</a></span>neorv32_twi_sense_sda()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_sense_sda </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get current state of SDA bus line.</p> +<dl class="section return"><dt>Returns</dt><dd>1 if SDA is high, 0 if SDA is low. </dd></dl> + +</div> +</div> +<a id="a7ea6f3509a7cf622234d4b83e33afbe3" name="a7ea6f3509a7cf622234d4b83e33afbe3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7ea6f3509a7cf622234d4b83e33afbe3">&#9670;&#160;</a></span>neorv32_twi_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_twi_setup </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>prsc</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cdiv</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>clkstr</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable and configure TWI controller. The TWI control register bits are listed in <a class="el" href="#a71ef393d3b34d2dd0698590994b7dafa">NEORV32_TWI_CTRL_enum</a>.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>Clock prescaler select (0..7). See <a class="el" href="neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73">NEORV32_CLOCK_PRSC_enum</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">cdiv</td><td>Clock divider (0..15). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">clkstr</td><td>Enable (allow) clock stretching. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac7020f3379602f11c47ca16f1bd82f2e" name="ac7020f3379602f11c47ca16f1bd82f2e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac7020f3379602f11c47ca16f1bd82f2e">&#9670;&#160;</a></span>neorv32_twi_trans()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_twi_trans </td> + <td>(</td> + <td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>data</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>mack</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>TWI transfer: send data byte and also receive data byte.</p> +<dl class="section note"><dt>Note</dt><dd>Blocking function.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">data</td><td>Pointer for TX/RX data (uint8_t). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">mack</td><td>Generate ACK by host controller when set. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0: ACK received, 1: NACK received. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__twi_8h_source.html b/sw/neorv32__twi_8h_source.html new file mode 100644 index 0000000000..03c75c5d74 --- /dev/null +++ b/sw/neorv32__twi_8h_source.html @@ -0,0 +1,224 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_twi.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_twi.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__twi_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_twi_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_twi_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__twi__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__twi__t.html#a148a1c681a2632881b25ee41652b5304"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__twi__t.html#a148a1c681a2632881b25ee41652b5304">CTRL</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__twi__t.html#ae311e0827bdb178c6dd8c4535b80d5cb"> 31</a></span> uint32_t <a class="code hl_variable" href="structneorv32__twi__t.html#ae311e0827bdb178c6dd8c4535b80d5cb">DCMD</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>} <a class="code hl_struct" href="structneorv32__twi__t.html">neorv32_twi_t</a>;</div> +</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a2769c2fe5e0de01b12fe4a5fad029768"> 35</a></span><span class="preprocessor">#define NEORV32_TWI ((neorv32_twi_t*) (NEORV32_TWI_BASE))</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="foldopen" id="foldopen00038" data-start="{" data-end="};"> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafa"> 38</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafa">NEORV32_TWI_CTRL_enum</a> {</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694"> 39</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694">TWI_CTRL_EN</a> = 0, </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9"> 40</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9">TWI_CTRL_PRSC0</a> = 1, </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df">TWI_CTRL_PRSC1</a> = 2, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31">TWI_CTRL_PRSC2</a> = 3, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31">TWI_CTRL_CDIV0</a> = 4, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674"> 44</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674">TWI_CTRL_CDIV1</a> = 5, </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12"> 45</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12">TWI_CTRL_CDIV2</a> = 6, </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc"> 46</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc">TWI_CTRL_CDIV3</a> = 7, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48">TWI_CTRL_CLKSTR</a> = 8, </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb"> 49</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb">TWI_CTRL_FIFO_LSB</a> = 15, </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75"> 50</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75">TWI_CTRL_FIFO_MSB</a> = 18, </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa51ea52c7ad18f1a8bcb6c2a979802107"> 52</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa51ea52c7ad18f1a8bcb6c2a979802107">TWI_CTRL_SENSE_SCL</a> = 27, </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaf715b63c5c3edbd1e61766df53c2dd6c"> 53</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaf715b63c5c3edbd1e61766df53c2dd6c">TWI_CTRL_SENSE_SDA</a> = 28, </div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb"> 54</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb">TWI_CTRL_TX_FULL</a> = 29, </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671"> 55</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671">TWI_CTRL_RX_AVAIL</a> = 30, </div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d">TWI_CTRL_BUSY</a> = 31 </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d"> 57</a></span>};</div> +</div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div> +<div class="foldopen" id="foldopen00060" data-start="{" data-end="};"> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8"> 60</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8">NEORV32_TWI_DCMD_enum</a> {</div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56"> 61</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56">TWI_DCMD_LSB</a> = 0, </div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d"> 62</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d">TWI_DCMD_MSB</a> = 7, </div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5"> 63</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5">TWI_DCMD_ACK</a> = 8, </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e"> 64</a></span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e">TWI_DCMD_CMD_LO</a> = 9, </div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_enumvalue" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e">TWI_DCMD_CMD_HI</a> = 10 </div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e"> 66</a></span>};</div> +</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="preprocessor">#define TWI_CMD_NOP (0b00) </span><span class="comment">// no operation</span></div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor">#define TWI_CMD_START (0b01) </span><span class="comment">// generate start condition</span></div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="preprocessor">#define TWI_CMD_STOP (0b10) </span><span class="comment">// generate stop condition</span></div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="preprocessor">#define TWI_CMD_RTX (0b11) </span><span class="comment">// transmit+receive data byte</span></div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment">/**********************************************************************/</span><span class="preprocessor"></span></div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twi_8h.html#aa2e01ebbc0c82d65ed4ded351f4d8711">neorv32_twi_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twi_8h.html#a7ea6f3509a7cf622234d4b83e33afbe3">neorv32_twi_setup</a>(<span class="keywordtype">int</span> prsc, <span class="keywordtype">int</span> cdiv, <span class="keywordtype">int</span> clkstr);</div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twi_8h.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2">neorv32_twi_get_fifo_depth</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twi_8h.html#ae5f31e737c7a6c3c86070ff34cb0d861">neorv32_twi_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twi_8h.html#a22717887cffff1e6830756bc73140e7b">neorv32_twi_enable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twi_8h.html#a71e204837e71ce8c18c66e2ef3e7d9ef">neorv32_twi_sense_scl</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twi_8h.html#a7645e3ba5a92ea0fbe446dbaac33b363">neorv32_twi_sense_sda</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twi_8h.html#a4fff1ddade320f6cc568c6266f2c2acd">neorv32_twi_busy</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twi_8h.html#a7735376d26560866b153ed205dfcb2ba">neorv32_twi_get</a>(uint8_t *data);</div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__twi_8h.html#ac7020f3379602f11c47ca16f1bd82f2e">neorv32_twi_trans</a>(uint8_t *data, <span class="keywordtype">int</span> mack);</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twi_8h.html#ad352447adcccccabd4e20577b34fbece">neorv32_twi_generate_stop</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twi_8h.html#a633d460e4735eb369d74a834b03c8b78">neorv32_twi_generate_start</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twi_8h.html#a28fc44cce5d28f6e8c32268b239b07d5">neorv32_twi_send_nonblocking</a>(uint8_t data, <span class="keywordtype">int</span> mack);</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twi_8h.html#aa22430aab0a38d88cbd2c4220c573da0">neorv32_twi_generate_stop_nonblocking</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__twi_8h.html#adbf2eaed0c76221da5c3091665fc885e">neorv32_twi_generate_start_nonblocking</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_twi_h</span></div> +<div class="ttc" id="aneorv32__twi_8h_html_a22717887cffff1e6830756bc73140e7b"><div class="ttname"><a href="neorv32__twi_8h.html#a22717887cffff1e6830756bc73140e7b">neorv32_twi_enable</a></div><div class="ttdeci">void neorv32_twi_enable(void)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:81</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a28fc44cce5d28f6e8c32268b239b07d5"><div class="ttname"><a href="neorv32__twi_8h.html#a28fc44cce5d28f6e8c32268b239b07d5">neorv32_twi_send_nonblocking</a></div><div class="ttdeci">void neorv32_twi_send_nonblocking(uint8_t data, int mack)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:214</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a2c8f3bc55f4a9a8bdcb111759cf56ae2"><div class="ttname"><a href="neorv32__twi_8h.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2">neorv32_twi_get_fifo_depth</a></div><div class="ttdeci">int neorv32_twi_get_fifo_depth(void)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:62</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a3421852c63baca60fe58c990b1c653d8"><div class="ttname"><a href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8">NEORV32_TWI_DCMD_enum</a></div><div class="ttdeci">NEORV32_TWI_DCMD_enum</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:60</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e"><div class="ttname"><a href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e">TWI_DCMD_CMD_LO</a></div><div class="ttdeci">@ TWI_DCMD_CMD_LO</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:64</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d"><div class="ttname"><a href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d">TWI_DCMD_MSB</a></div><div class="ttdeci">@ TWI_DCMD_MSB</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:62</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e"><div class="ttname"><a href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e">TWI_DCMD_CMD_HI</a></div><div class="ttdeci">@ TWI_DCMD_CMD_HI</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:65</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56"><div class="ttname"><a href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56">TWI_DCMD_LSB</a></div><div class="ttdeci">@ TWI_DCMD_LSB</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:61</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5"><div class="ttname"><a href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5">TWI_DCMD_ACK</a></div><div class="ttdeci">@ TWI_DCMD_ACK</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:63</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a4fff1ddade320f6cc568c6266f2c2acd"><div class="ttname"><a href="neorv32__twi_8h.html#a4fff1ddade320f6cc568c6266f2c2acd">neorv32_twi_busy</a></div><div class="ttdeci">int neorv32_twi_busy(void)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:124</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a633d460e4735eb369d74a834b03c8b78"><div class="ttname"><a href="neorv32__twi_8h.html#a633d460e4735eb369d74a834b03c8b78">neorv32_twi_generate_start</a></div><div class="ttdeci">void neorv32_twi_generate_start(void)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:198</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71e204837e71ce8c18c66e2ef3e7d9ef"><div class="ttname"><a href="neorv32__twi_8h.html#a71e204837e71ce8c18c66e2ef3e7d9ef">neorv32_twi_sense_scl</a></div><div class="ttdeci">int neorv32_twi_sense_scl(void)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:92</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafa"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafa">NEORV32_TWI_CTRL_enum</a></div><div class="ttdeci">NEORV32_TWI_CTRL_enum</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:38</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75">TWI_CTRL_FIFO_MSB</a></div><div class="ttdeci">@ TWI_CTRL_FIFO_MSB</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:50</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694">TWI_CTRL_EN</a></div><div class="ttdeci">@ TWI_CTRL_EN</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:39</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d">TWI_CTRL_BUSY</a></div><div class="ttdeci">@ TWI_CTRL_BUSY</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:56</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674">TWI_CTRL_CDIV1</a></div><div class="ttdeci">@ TWI_CTRL_CDIV1</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:44</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31">TWI_CTRL_PRSC2</a></div><div class="ttdeci">@ TWI_CTRL_PRSC2</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:42</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaa51ea52c7ad18f1a8bcb6c2a979802107"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa51ea52c7ad18f1a8bcb6c2a979802107">TWI_CTRL_SENSE_SCL</a></div><div class="ttdeci">@ TWI_CTRL_SENSE_SCL</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:52</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb">TWI_CTRL_FIFO_LSB</a></div><div class="ttdeci">@ TWI_CTRL_FIFO_LSB</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:49</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31">TWI_CTRL_CDIV0</a></div><div class="ttdeci">@ TWI_CTRL_CDIV0</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:43</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df">TWI_CTRL_PRSC1</a></div><div class="ttdeci">@ TWI_CTRL_PRSC1</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:41</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9">TWI_CTRL_PRSC0</a></div><div class="ttdeci">@ TWI_CTRL_PRSC0</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:40</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc">TWI_CTRL_CDIV3</a></div><div class="ttdeci">@ TWI_CTRL_CDIV3</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:46</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb">TWI_CTRL_TX_FULL</a></div><div class="ttdeci">@ TWI_CTRL_TX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:54</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12">TWI_CTRL_CDIV2</a></div><div class="ttdeci">@ TWI_CTRL_CDIV2</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:45</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48">TWI_CTRL_CLKSTR</a></div><div class="ttdeci">@ TWI_CTRL_CLKSTR</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:47</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671">TWI_CTRL_RX_AVAIL</a></div><div class="ttdeci">@ TWI_CTRL_RX_AVAIL</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:55</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a71ef393d3b34d2dd0698590994b7dafaaf715b63c5c3edbd1e61766df53c2dd6c"><div class="ttname"><a href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaf715b63c5c3edbd1e61766df53c2dd6c">TWI_CTRL_SENSE_SDA</a></div><div class="ttdeci">@ TWI_CTRL_SENSE_SDA</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:53</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a7645e3ba5a92ea0fbe446dbaac33b363"><div class="ttname"><a href="neorv32__twi_8h.html#a7645e3ba5a92ea0fbe446dbaac33b363">neorv32_twi_sense_sda</a></div><div class="ttdeci">int neorv32_twi_sense_sda(void)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:108</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a7735376d26560866b153ed205dfcb2ba"><div class="ttname"><a href="neorv32__twi_8h.html#a7735376d26560866b153ed205dfcb2ba">neorv32_twi_get</a></div><div class="ttdeci">int neorv32_twi_get(uint8_t *data)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:141</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_a7ea6f3509a7cf622234d4b83e33afbe3"><div class="ttname"><a href="neorv32__twi_8h.html#a7ea6f3509a7cf622234d4b83e33afbe3">neorv32_twi_setup</a></div><div class="ttdeci">void neorv32_twi_setup(int prsc, int cdiv, int clkstr)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:44</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_aa22430aab0a38d88cbd2c4220c573da0"><div class="ttname"><a href="neorv32__twi_8h.html#aa22430aab0a38d88cbd2c4220c573da0">neorv32_twi_generate_stop_nonblocking</a></div><div class="ttdeci">void neorv32_twi_generate_stop_nonblocking(void)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:228</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_aa2e01ebbc0c82d65ed4ded351f4d8711"><div class="ttname"><a href="neorv32__twi_8h.html#aa2e01ebbc0c82d65ed4ded351f4d8711">neorv32_twi_available</a></div><div class="ttdeci">int neorv32_twi_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:26</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_ac7020f3379602f11c47ca16f1bd82f2e"><div class="ttname"><a href="neorv32__twi_8h.html#ac7020f3379602f11c47ca16f1bd82f2e">neorv32_twi_trans</a></div><div class="ttdeci">int neorv32_twi_trans(uint8_t *data, int mack)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:162</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_ad352447adcccccabd4e20577b34fbece"><div class="ttname"><a href="neorv32__twi_8h.html#ad352447adcccccabd4e20577b34fbece">neorv32_twi_generate_stop</a></div><div class="ttdeci">void neorv32_twi_generate_stop(void)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:185</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_adbf2eaed0c76221da5c3091665fc885e"><div class="ttname"><a href="neorv32__twi_8h.html#adbf2eaed0c76221da5c3091665fc885e">neorv32_twi_generate_start_nonblocking</a></div><div class="ttdeci">void neorv32_twi_generate_start_nonblocking(void)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:239</div></div> +<div class="ttc" id="aneorv32__twi_8h_html_ae5f31e737c7a6c3c86070ff34cb0d861"><div class="ttname"><a href="neorv32__twi_8h.html#ae5f31e737c7a6c3c86070ff34cb0d861">neorv32_twi_disable</a></div><div class="ttdeci">void neorv32_twi_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_twi.c:72</div></div> +<div class="ttc" id="astructneorv32__twi__t_html"><div class="ttname"><a href="structneorv32__twi__t.html">neorv32_twi_t</a></div><div class="ttdef"><b>Definition</b> neorv32_twi.h:29</div></div> +<div class="ttc" id="astructneorv32__twi__t_html_a148a1c681a2632881b25ee41652b5304"><div class="ttname"><a href="structneorv32__twi__t.html#a148a1c681a2632881b25ee41652b5304">neorv32_twi_t::CTRL</a></div><div class="ttdeci">uint32_t CTRL</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:30</div></div> +<div class="ttc" id="astructneorv32__twi__t_html_ae311e0827bdb178c6dd8c4535b80d5cb"><div class="ttname"><a href="structneorv32__twi__t.html#ae311e0827bdb178c6dd8c4535b80d5cb">neorv32_twi_t::DCMD</a></div><div class="ttdeci">uint32_t DCMD</div><div class="ttdef"><b>Definition</b> neorv32_twi.h:31</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__uart_8c.html b/sw/neorv32__uart_8c.html new file mode 100644 index 0000000000..29e7782b17 --- /dev/null +++ b/sw/neorv32__uart_8c.html @@ -0,0 +1,696 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_uart.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_uart.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Universal asynchronous receiver/transmitter (UART0/UART1) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +<code>#include &lt;string.h&gt;</code><br /> +<code>#include &lt;stdarg.h&gt;</code><br /> +<code>#include &lt;ctype.h&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:abef6415b0391dc055713404312196682" id="r_abef6415b0391dc055713404312196682"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abef6415b0391dc055713404312196682">neorv32_uart_available</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:abef6415b0391dc055713404312196682"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9cdec36f2723c5373664022d1b68b841" id="r_a9cdec36f2723c5373664022d1b68b841"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9cdec36f2723c5373664022d1b68b841">neorv32_uart_setup</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, uint32_t baudrate, uint32_t irq_mask)</td></tr> +<tr class="separator:a9cdec36f2723c5373664022d1b68b841"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af85fb929c912d3edef3d86ffa833982a" id="r_af85fb929c912d3edef3d86ffa833982a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af85fb929c912d3edef3d86ffa833982a">neorv32_uart_get_rx_fifo_depth</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:af85fb929c912d3edef3d86ffa833982a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a031e3e27c8783c299623468020a22b0e" id="r_a031e3e27c8783c299623468020a22b0e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a031e3e27c8783c299623468020a22b0e">neorv32_uart_get_tx_fifo_depth</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:a031e3e27c8783c299623468020a22b0e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afa0533e81d53057c36f4997a2dbbe2bc" id="r_afa0533e81d53057c36f4997a2dbbe2bc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afa0533e81d53057c36f4997a2dbbe2bc">neorv32_uart_enable</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:afa0533e81d53057c36f4997a2dbbe2bc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae18804ccd29ec2fd1cc06e9ce985b704" id="r_ae18804ccd29ec2fd1cc06e9ce985b704"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae18804ccd29ec2fd1cc06e9ce985b704">neorv32_uart_disable</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:ae18804ccd29ec2fd1cc06e9ce985b704"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a734b610f4cd1b474d7763f9700a715ec" id="r_a734b610f4cd1b474d7763f9700a715ec"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a734b610f4cd1b474d7763f9700a715ec">neorv32_uart_rtscts_enable</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:a734b610f4cd1b474d7763f9700a715ec"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7b2f924ef4554b1fa90433c38d97558d" id="r_a7b2f924ef4554b1fa90433c38d97558d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7b2f924ef4554b1fa90433c38d97558d">neorv32_uart_rtscts_disable</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:a7b2f924ef4554b1fa90433c38d97558d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9bc7bb94a50b74e1145b78eec6094129" id="r_a9bc7bb94a50b74e1145b78eec6094129"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9bc7bb94a50b74e1145b78eec6094129">neorv32_uart_putc</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, char c)</td></tr> +<tr class="separator:a9bc7bb94a50b74e1145b78eec6094129"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afe0de59c14faff1e0c890d5465be25f0" id="r_afe0de59c14faff1e0c890d5465be25f0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afe0de59c14faff1e0c890d5465be25f0">neorv32_uart_rx_clear</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:afe0de59c14faff1e0c890d5465be25f0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a27971954262a2fd1f21d3bf1ba27e87c" id="r_a27971954262a2fd1f21d3bf1ba27e87c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a27971954262a2fd1f21d3bf1ba27e87c">neorv32_uart_tx_clear</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:a27971954262a2fd1f21d3bf1ba27e87c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa7bef48a58e044c246b8c4ad32864502" id="r_aa7bef48a58e044c246b8c4ad32864502"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa7bef48a58e044c246b8c4ad32864502">neorv32_uart_tx_busy</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:aa7bef48a58e044c246b8c4ad32864502"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2efd432f63b8d36d44263d0b1f39a6dc" id="r_a2efd432f63b8d36d44263d0b1f39a6dc"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2efd432f63b8d36d44263d0b1f39a6dc">neorv32_uart_getc</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:a2efd432f63b8d36d44263d0b1f39a6dc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adedb0e07efb232717534017167a5be98" id="r_adedb0e07efb232717534017167a5be98"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adedb0e07efb232717534017167a5be98">neorv32_uart_char_received</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:adedb0e07efb232717534017167a5be98"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa490df3a9bb2aa3215fa6fad34ffe7d1" id="r_aa490df3a9bb2aa3215fa6fad34ffe7d1"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa490df3a9bb2aa3215fa6fad34ffe7d1">neorv32_uart_char_received_get</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:aa490df3a9bb2aa3215fa6fad34ffe7d1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a45a07d5e71677162baaa1025759c67a2" id="r_a45a07d5e71677162baaa1025759c67a2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a45a07d5e71677162baaa1025759c67a2">neorv32_uart_puts</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, const char *s)</td></tr> +<tr class="separator:a45a07d5e71677162baaa1025759c67a2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8714cdb1c04d94bec322c6215ea10238" id="r_a8714cdb1c04d94bec322c6215ea10238"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8714cdb1c04d94bec322c6215ea10238">neorv32_uart_vprintf</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, const char *format, va_list args)</td></tr> +<tr class="separator:a8714cdb1c04d94bec322c6215ea10238"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab8c1f9f451def9126ab2749d7bbe50d9" id="r_ab8c1f9f451def9126ab2749d7bbe50d9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab8c1f9f451def9126ab2749d7bbe50d9">neorv32_uart_printf</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, const char *format,...)</td></tr> +<tr class="separator:ab8c1f9f451def9126ab2749d7bbe50d9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac429964878bd6deab61d9ed8659bca75" id="r_ac429964878bd6deab61d9ed8659bca75"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac429964878bd6deab61d9ed8659bca75">neorv32_uart_scan</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, char *buffer, int max_size, int echo)</td></tr> +<tr class="separator:ac429964878bd6deab61d9ed8659bca75"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Universal asynchronous receiver/transmitter (UART0/UART1) HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the UART0/UART1 unit was synthesized.</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="abef6415b0391dc055713404312196682" name="abef6415b0391dc055713404312196682"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abef6415b0391dc055713404312196682">&#9670;&#160;</a></span>neorv32_uart_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_uart_available </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if UART unit was synthesized.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">Hardware</td><td>handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if UART0/1 was not synthesized, 1 if UART0/1 is available. </dd></dl> + +</div> +</div> +<a id="adedb0e07efb232717534017167a5be98" name="adedb0e07efb232717534017167a5be98"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adedb0e07efb232717534017167a5be98">&#9670;&#160;</a></span>neorv32_uart_char_received()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_uart_char_received </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if UART has received a char.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking. </dd> +<dd> +Use neorv32_uart_char_received_get(void) to get the char.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>1 when a char has been received, 0 otherwise. </dd></dl> + +</div> +</div> +<a id="aa490df3a9bb2aa3215fa6fad34ffe7d1" name="aa490df3a9bb2aa3215fa6fad34ffe7d1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa490df3a9bb2aa3215fa6fad34ffe7d1">&#9670;&#160;</a></span>neorv32_uart_char_received_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char neorv32_uart_char_received_get </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get a received char from UART.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking. </dd> +<dd> +Should only be used in combination with neorv32_uart_char_received(void).</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Received char. </dd></dl> + +</div> +</div> +<a id="ae18804ccd29ec2fd1cc06e9ce985b704" name="ae18804ccd29ec2fd1cc06e9ce985b704"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae18804ccd29ec2fd1cc06e9ce985b704">&#9670;&#160;</a></span>neorv32_uart_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_disable </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable UART.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="afa0533e81d53057c36f4997a2dbbe2bc" name="afa0533e81d53057c36f4997a2dbbe2bc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afa0533e81d53057c36f4997a2dbbe2bc">&#9670;&#160;</a></span>neorv32_uart_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_enable </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable UART.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="af85fb929c912d3edef3d86ffa833982a" name="af85fb929c912d3edef3d86ffa833982a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af85fb929c912d3edef3d86ffa833982a">&#9670;&#160;</a></span>neorv32_uart_get_rx_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_uart_get_rx_fifo_depth </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get UART RX FIFO depth.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>.</td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries) </dd></dl> + +</div> +</div> +<a id="a031e3e27c8783c299623468020a22b0e" name="a031e3e27c8783c299623468020a22b0e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a031e3e27c8783c299623468020a22b0e">&#9670;&#160;</a></span>neorv32_uart_get_tx_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_uart_get_tx_fifo_depth </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get UART TX FIFO depth.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>.</td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries) </dd></dl> + +</div> +</div> +<a id="a2efd432f63b8d36d44263d0b1f39a6dc" name="a2efd432f63b8d36d44263d0b1f39a6dc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2efd432f63b8d36d44263d0b1f39a6dc">&#9670;&#160;</a></span>neorv32_uart_getc()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char neorv32_uart_getc </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get char from UART.</p> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Received char. </dd></dl> + +</div> +</div> +<a id="ab8c1f9f451def9126ab2749d7bbe50d9" name="ab8c1f9f451def9126ab2749d7bbe50d9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab8c1f9f451def9126ab2749d7bbe50d9">&#9670;&#160;</a></span>neorv32_uart_printf()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_printf </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char *</td> <td class="paramname"><span class="paramname"><em>format</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>...</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Custom version of 'printf' printing to UART.</p> +<dl class="section warning"><dt>Warning</dt><dd>: This functions only provides a minimal subset of the 'printf' formatting features! </dd></dl> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">format</td><td>Pointer to format string. See neorv32_uart_vprintf. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a9bc7bb94a50b74e1145b78eec6094129" name="a9bc7bb94a50b74e1145b78eec6094129"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9bc7bb94a50b74e1145b78eec6094129">&#9670;&#160;</a></span>neorv32_uart_putc()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_putc </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char</td> <td class="paramname"><span class="paramname"><em>c</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Send single char via UART.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">c</td><td>Char to be send. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a45a07d5e71677162baaa1025759c67a2" name="a45a07d5e71677162baaa1025759c67a2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a45a07d5e71677162baaa1025759c67a2">&#9670;&#160;</a></span>neorv32_uart_puts()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_puts </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char *</td> <td class="paramname"><span class="paramname"><em>s</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print string (zero-terminated) via UART. Print full line break "\r\n" for every '<br /> +'.</p> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">s</td><td>Pointer to string. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a7b2f924ef4554b1fa90433c38d97558d" name="a7b2f924ef4554b1fa90433c38d97558d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7b2f924ef4554b1fa90433c38d97558d">&#9670;&#160;</a></span>neorv32_uart_rtscts_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_rtscts_disable </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable RTS/CTS hardware flow-control.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a734b610f4cd1b474d7763f9700a715ec" name="a734b610f4cd1b474d7763f9700a715ec"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a734b610f4cd1b474d7763f9700a715ec">&#9670;&#160;</a></span>neorv32_uart_rtscts_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_rtscts_enable </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable RTS/CTS hardware flow-control.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="afe0de59c14faff1e0c890d5465be25f0" name="afe0de59c14faff1e0c890d5465be25f0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afe0de59c14faff1e0c890d5465be25f0">&#9670;&#160;</a></span>neorv32_uart_rx_clear()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_rx_clear </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear RX FIFO.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac429964878bd6deab61d9ed8659bca75" name="ac429964878bd6deab61d9ed8659bca75"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac429964878bd6deab61d9ed8659bca75">&#9670;&#160;</a></span>neorv32_uart_scan()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_uart_scan </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char *</td> <td class="paramname"><span class="paramname"><em>buffer</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>max_size</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>echo</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Simplified custom version of 'scanf' reading from UART.</p> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + <tr><td class="paramdir">[in,out]</td><td class="paramname">buffer</td><td>Pointer to array of chars to store string. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">max_size</td><td>Maximum number of chars to sample (including zero-termination). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">echo</td><td>Echo UART input when 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Number of chars read. </dd></dl> + +</div> +</div> +<a id="a9cdec36f2723c5373664022d1b68b841" name="a9cdec36f2723c5373664022d1b68b841"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9cdec36f2723c5373664022d1b68b841">&#9670;&#160;</a></span>neorv32_uart_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_setup </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>baudrate</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>irq_mask</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset, configure and enable UART.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">baudrate</td><td>Targeted BAUD rate (e.g. 19200). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_mask</td><td>Interrupt configuration mask (CTRL's irq_* bits). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="aa7bef48a58e044c246b8c4ad32864502" name="aa7bef48a58e044c246b8c4ad32864502"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa7bef48a58e044c246b8c4ad32864502">&#9670;&#160;</a></span>neorv32_uart_tx_busy()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_uart_tx_busy </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if UART TX is busy (transmitter busy or data left in TX buffer).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if idle, 1 if busy </dd></dl> + +</div> +</div> +<a id="a27971954262a2fd1f21d3bf1ba27e87c" name="a27971954262a2fd1f21d3bf1ba27e87c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a27971954262a2fd1f21d3bf1ba27e87c">&#9670;&#160;</a></span>neorv32_uart_tx_clear()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_tx_clear </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear TX FIFO.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a8714cdb1c04d94bec322c6215ea10238" name="a8714cdb1c04d94bec322c6215ea10238"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8714cdb1c04d94bec322c6215ea10238">&#9670;&#160;</a></span>neorv32_uart_vprintf()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_vprintf </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char *</td> <td class="paramname"><span class="paramname"><em>format</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">va_list</td> <td class="paramname"><span class="paramname"><em>args</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Custom version of 'vprintf' printing to UART.</p> +<dl class="section warning"><dt>Warning</dt><dd>: This functions only provides a minimal subset of the 'vprintf' formating features! </dd></dl> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">format</td><td>Pointer to format string. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">args</td><td>A value identifying a variable arguments list. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__uart_8h.html b/sw/neorv32__uart_8h.html new file mode 100644 index 0000000000..e4938ebd70 --- /dev/null +++ b/sw/neorv32__uart_8h.html @@ -0,0 +1,1670 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_uart.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_uart.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Universal asynchronous receiver/transmitter (UART0/UART1) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +<code>#include &lt;stdarg.h&gt;</code><br /> +</div> +<p><a href="neorv32__uart_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">UART wrappers for easy access</div></td></tr> +<tr class="memitem:a652d93c0e3c6d7e5dc7c25c2465070e5" id="r_a652d93c0e3c6d7e5dc7c25c2465070e5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a652d93c0e3c6d7e5dc7c25c2465070e5">neorv32_uart0_available</a>()</td></tr> +<tr class="separator:a652d93c0e3c6d7e5dc7c25c2465070e5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa5c803f757ecc14cdfdad521d4bf7c18" id="r_aa5c803f757ecc14cdfdad521d4bf7c18"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa5c803f757ecc14cdfdad521d4bf7c18">neorv32_uart0_get_rx_fifo_depth</a>()</td></tr> +<tr class="separator:aa5c803f757ecc14cdfdad521d4bf7c18"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af6068949ae9ed923eac69350347273dc" id="r_af6068949ae9ed923eac69350347273dc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af6068949ae9ed923eac69350347273dc">neorv32_uart0_get_tx_fifo_depth</a>()</td></tr> +<tr class="separator:af6068949ae9ed923eac69350347273dc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a27e92f501ceda8e34652781901e6db33" id="r_a27e92f501ceda8e34652781901e6db33"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a27e92f501ceda8e34652781901e6db33">neorv32_uart0_setup</a>(baudrate, irq_mask)</td></tr> +<tr class="separator:a27e92f501ceda8e34652781901e6db33"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af99ce6ccc40fec039264da66e8f67ba7" id="r_af99ce6ccc40fec039264da66e8f67ba7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af99ce6ccc40fec039264da66e8f67ba7">neorv32_uart0_disable</a>()</td></tr> +<tr class="separator:af99ce6ccc40fec039264da66e8f67ba7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4cc0ea2ee22b379fc9a7f45e30bc118f" id="r_a4cc0ea2ee22b379fc9a7f45e30bc118f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4cc0ea2ee22b379fc9a7f45e30bc118f">neorv32_uart0_enable</a>()</td></tr> +<tr class="separator:a4cc0ea2ee22b379fc9a7f45e30bc118f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3cdd0db72d7cffe25c9f2f90a39fc2f7" id="r_a3cdd0db72d7cffe25c9f2f90a39fc2f7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3cdd0db72d7cffe25c9f2f90a39fc2f7">neorv32_uart0_rtscts_disable</a>()</td></tr> +<tr class="separator:a3cdd0db72d7cffe25c9f2f90a39fc2f7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a53734cc693bdfa11458a62df5b609264" id="r_a53734cc693bdfa11458a62df5b609264"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a53734cc693bdfa11458a62df5b609264">neorv32_uart0_rtscts_enable</a>()</td></tr> +<tr class="separator:a53734cc693bdfa11458a62df5b609264"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2dc207fedc80aa9021a4e5b7abd667a7" id="r_a2dc207fedc80aa9021a4e5b7abd667a7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2dc207fedc80aa9021a4e5b7abd667a7">neorv32_uart0_putc</a>(c)</td></tr> +<tr class="separator:a2dc207fedc80aa9021a4e5b7abd667a7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab576f613cf952dadb8c1a352d8bdf4b5" id="r_ab576f613cf952dadb8c1a352d8bdf4b5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab576f613cf952dadb8c1a352d8bdf4b5">neorv32_uart0_rx_clear</a>()</td></tr> +<tr class="separator:ab576f613cf952dadb8c1a352d8bdf4b5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af4fd1601d10c6eeca0f4e8b6fe076a7f" id="r_af4fd1601d10c6eeca0f4e8b6fe076a7f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af4fd1601d10c6eeca0f4e8b6fe076a7f">neorv32_uart0_tx_clear</a>()</td></tr> +<tr class="separator:af4fd1601d10c6eeca0f4e8b6fe076a7f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a80c68d3af417085da2d18a82081124ba" id="r_a80c68d3af417085da2d18a82081124ba"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a80c68d3af417085da2d18a82081124ba">neorv32_uart0_tx_busy</a>()</td></tr> +<tr class="separator:a80c68d3af417085da2d18a82081124ba"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a248d40034ce64ca3325c00b9ae0c5208" id="r_a248d40034ce64ca3325c00b9ae0c5208"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a248d40034ce64ca3325c00b9ae0c5208">neorv32_uart0_getc</a>()</td></tr> +<tr class="separator:a248d40034ce64ca3325c00b9ae0c5208"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa29a2aeeee4faeb35b19165a9af31ac7" id="r_aa29a2aeeee4faeb35b19165a9af31ac7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa29a2aeeee4faeb35b19165a9af31ac7">neorv32_uart0_char_received</a>()</td></tr> +<tr class="separator:aa29a2aeeee4faeb35b19165a9af31ac7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a68aee77039a3c7450ec78e0f868889f1" id="r_a68aee77039a3c7450ec78e0f868889f1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a68aee77039a3c7450ec78e0f868889f1">neorv32_uart0_char_received_get</a>()</td></tr> +<tr class="separator:a68aee77039a3c7450ec78e0f868889f1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adc688c900d03a0538dbd6461c56f00cd" id="r_adc688c900d03a0538dbd6461c56f00cd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adc688c900d03a0538dbd6461c56f00cd">neorv32_uart0_puts</a>(s)</td></tr> +<tr class="separator:adc688c900d03a0538dbd6461c56f00cd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6927bfe22016655a19b906d867006896" id="r_a6927bfe22016655a19b906d867006896"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6927bfe22016655a19b906d867006896">neorv32_uart0_printf</a>(...)</td></tr> +<tr class="separator:a6927bfe22016655a19b906d867006896"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa8cd95c962154cf55fb4b9d5008c858f" id="r_aa8cd95c962154cf55fb4b9d5008c858f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa8cd95c962154cf55fb4b9d5008c858f">neorv32_uart0_scan</a>(buffer, max_size, echo)</td></tr> +<tr class="separator:aa8cd95c962154cf55fb4b9d5008c858f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a969f991e166e72a32aaee174ddef5962" id="r_a969f991e166e72a32aaee174ddef5962"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a969f991e166e72a32aaee174ddef5962">neorv32_uart1_available</a>()</td></tr> +<tr class="separator:a969f991e166e72a32aaee174ddef5962"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8a00c086c47e0cffbc586155228060df" id="r_a8a00c086c47e0cffbc586155228060df"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8a00c086c47e0cffbc586155228060df">neorv32_uart1_get_rx_fifo_depth</a>()</td></tr> +<tr class="separator:a8a00c086c47e0cffbc586155228060df"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a27f16aaf0b15f5417c335804cfebbe54" id="r_a27f16aaf0b15f5417c335804cfebbe54"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a27f16aaf0b15f5417c335804cfebbe54">neorv32_uart1_get_tx_fifo_depth</a>()</td></tr> +<tr class="separator:a27f16aaf0b15f5417c335804cfebbe54"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5d94cc37807bdac20fcd782df138d480" id="r_a5d94cc37807bdac20fcd782df138d480"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5d94cc37807bdac20fcd782df138d480">neorv32_uart1_setup</a>(baudrate, irq_mask)</td></tr> +<tr class="separator:a5d94cc37807bdac20fcd782df138d480"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a244073e58d04a364446f50e4708f3b36" id="r_a244073e58d04a364446f50e4708f3b36"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a244073e58d04a364446f50e4708f3b36">neorv32_uart1_disable</a>()</td></tr> +<tr class="separator:a244073e58d04a364446f50e4708f3b36"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad36be396ae9e9ea21cf4a5f3247d7a8d" id="r_ad36be396ae9e9ea21cf4a5f3247d7a8d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad36be396ae9e9ea21cf4a5f3247d7a8d">neorv32_uart1_enable</a>()</td></tr> +<tr class="separator:ad36be396ae9e9ea21cf4a5f3247d7a8d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a49c5158b6fa31f1c59660ed8744f2a3a" id="r_a49c5158b6fa31f1c59660ed8744f2a3a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a49c5158b6fa31f1c59660ed8744f2a3a">neorv32_uart1_rtscts_disable</a>()</td></tr> +<tr class="separator:a49c5158b6fa31f1c59660ed8744f2a3a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a64979d4d47678ca3e81a3b1d2eab52e7" id="r_a64979d4d47678ca3e81a3b1d2eab52e7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a64979d4d47678ca3e81a3b1d2eab52e7">neorv32_uart1_rtscts_enable</a>()</td></tr> +<tr class="separator:a64979d4d47678ca3e81a3b1d2eab52e7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acb41a23b9a1cbc4032d89455461c32be" id="r_acb41a23b9a1cbc4032d89455461c32be"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acb41a23b9a1cbc4032d89455461c32be">neorv32_uart1_putc</a>(c)</td></tr> +<tr class="separator:acb41a23b9a1cbc4032d89455461c32be"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a43be76025c2b90c3868315eacb0ee865" id="r_a43be76025c2b90c3868315eacb0ee865"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a43be76025c2b90c3868315eacb0ee865">neorv32_uart1_rx_clear</a>()</td></tr> +<tr class="separator:a43be76025c2b90c3868315eacb0ee865"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4705c6caea4b5064f51d37b40a156080" id="r_a4705c6caea4b5064f51d37b40a156080"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4705c6caea4b5064f51d37b40a156080">neorv32_uart1_tx_clear</a>()</td></tr> +<tr class="separator:a4705c6caea4b5064f51d37b40a156080"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4fbbc6737f0d5e44eb775f5f6d724b02" id="r_a4fbbc6737f0d5e44eb775f5f6d724b02"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4fbbc6737f0d5e44eb775f5f6d724b02">neorv32_uart1_tx_busy</a>()</td></tr> +<tr class="separator:a4fbbc6737f0d5e44eb775f5f6d724b02"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1d8a289bcd2d4c33769dcc670678a573" id="r_a1d8a289bcd2d4c33769dcc670678a573"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1d8a289bcd2d4c33769dcc670678a573">neorv32_uart1_getc</a>()</td></tr> +<tr class="separator:a1d8a289bcd2d4c33769dcc670678a573"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8b862c864010a574b856a7f5d3f6020b" id="r_a8b862c864010a574b856a7f5d3f6020b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8b862c864010a574b856a7f5d3f6020b">neorv32_uart1_char_received</a>()</td></tr> +<tr class="separator:a8b862c864010a574b856a7f5d3f6020b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a25006186655175f0bbfe739750ebcec6" id="r_a25006186655175f0bbfe739750ebcec6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a25006186655175f0bbfe739750ebcec6">neorv32_uart1_char_received_get</a>()</td></tr> +<tr class="separator:a25006186655175f0bbfe739750ebcec6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa44dc625701ebbffe94508aa2e23dedf" id="r_aa44dc625701ebbffe94508aa2e23dedf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa44dc625701ebbffe94508aa2e23dedf">neorv32_uart1_puts</a>(s)</td></tr> +<tr class="separator:aa44dc625701ebbffe94508aa2e23dedf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5992006547f020a7ba5ab914266358c6" id="r_a5992006547f020a7ba5ab914266358c6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5992006547f020a7ba5ab914266358c6">neorv32_uart1_printf</a>(...)</td></tr> +<tr class="separator:a5992006547f020a7ba5ab914266358c6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a22a000e915c62c5d7da0af8ca4922710" id="r_a22a000e915c62c5d7da0af8ca4922710"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a22a000e915c62c5d7da0af8ca4922710">neorv32_uart1_scan</a>(buffer, max_size, echo)</td></tr> +<tr class="separator:a22a000e915c62c5d7da0af8ca4922710"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:abef6415b0391dc055713404312196682" id="r_abef6415b0391dc055713404312196682"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abef6415b0391dc055713404312196682">neorv32_uart_available</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:abef6415b0391dc055713404312196682"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af85fb929c912d3edef3d86ffa833982a" id="r_af85fb929c912d3edef3d86ffa833982a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af85fb929c912d3edef3d86ffa833982a">neorv32_uart_get_rx_fifo_depth</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:af85fb929c912d3edef3d86ffa833982a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a031e3e27c8783c299623468020a22b0e" id="r_a031e3e27c8783c299623468020a22b0e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a031e3e27c8783c299623468020a22b0e">neorv32_uart_get_tx_fifo_depth</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:a031e3e27c8783c299623468020a22b0e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9cdec36f2723c5373664022d1b68b841" id="r_a9cdec36f2723c5373664022d1b68b841"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9cdec36f2723c5373664022d1b68b841">neorv32_uart_setup</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, uint32_t baudrate, uint32_t irq_mask)</td></tr> +<tr class="separator:a9cdec36f2723c5373664022d1b68b841"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afa0533e81d53057c36f4997a2dbbe2bc" id="r_afa0533e81d53057c36f4997a2dbbe2bc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afa0533e81d53057c36f4997a2dbbe2bc">neorv32_uart_enable</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:afa0533e81d53057c36f4997a2dbbe2bc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae18804ccd29ec2fd1cc06e9ce985b704" id="r_ae18804ccd29ec2fd1cc06e9ce985b704"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae18804ccd29ec2fd1cc06e9ce985b704">neorv32_uart_disable</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:ae18804ccd29ec2fd1cc06e9ce985b704"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a734b610f4cd1b474d7763f9700a715ec" id="r_a734b610f4cd1b474d7763f9700a715ec"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a734b610f4cd1b474d7763f9700a715ec">neorv32_uart_rtscts_enable</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:a734b610f4cd1b474d7763f9700a715ec"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7b2f924ef4554b1fa90433c38d97558d" id="r_a7b2f924ef4554b1fa90433c38d97558d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7b2f924ef4554b1fa90433c38d97558d">neorv32_uart_rtscts_disable</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:a7b2f924ef4554b1fa90433c38d97558d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9bc7bb94a50b74e1145b78eec6094129" id="r_a9bc7bb94a50b74e1145b78eec6094129"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9bc7bb94a50b74e1145b78eec6094129">neorv32_uart_putc</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, char c)</td></tr> +<tr class="separator:a9bc7bb94a50b74e1145b78eec6094129"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afe0de59c14faff1e0c890d5465be25f0" id="r_afe0de59c14faff1e0c890d5465be25f0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afe0de59c14faff1e0c890d5465be25f0">neorv32_uart_rx_clear</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:afe0de59c14faff1e0c890d5465be25f0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a27971954262a2fd1f21d3bf1ba27e87c" id="r_a27971954262a2fd1f21d3bf1ba27e87c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a27971954262a2fd1f21d3bf1ba27e87c">neorv32_uart_tx_clear</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:a27971954262a2fd1f21d3bf1ba27e87c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa7bef48a58e044c246b8c4ad32864502" id="r_aa7bef48a58e044c246b8c4ad32864502"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa7bef48a58e044c246b8c4ad32864502">neorv32_uart_tx_busy</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:aa7bef48a58e044c246b8c4ad32864502"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2efd432f63b8d36d44263d0b1f39a6dc" id="r_a2efd432f63b8d36d44263d0b1f39a6dc"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2efd432f63b8d36d44263d0b1f39a6dc">neorv32_uart_getc</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:a2efd432f63b8d36d44263d0b1f39a6dc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adedb0e07efb232717534017167a5be98" id="r_adedb0e07efb232717534017167a5be98"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adedb0e07efb232717534017167a5be98">neorv32_uart_char_received</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:adedb0e07efb232717534017167a5be98"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa490df3a9bb2aa3215fa6fad34ffe7d1" id="r_aa490df3a9bb2aa3215fa6fad34ffe7d1"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa490df3a9bb2aa3215fa6fad34ffe7d1">neorv32_uart_char_received_get</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx)</td></tr> +<tr class="separator:aa490df3a9bb2aa3215fa6fad34ffe7d1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a45a07d5e71677162baaa1025759c67a2" id="r_a45a07d5e71677162baaa1025759c67a2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a45a07d5e71677162baaa1025759c67a2">neorv32_uart_puts</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, const char *s)</td></tr> +<tr class="separator:a45a07d5e71677162baaa1025759c67a2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8714cdb1c04d94bec322c6215ea10238" id="r_a8714cdb1c04d94bec322c6215ea10238"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8714cdb1c04d94bec322c6215ea10238">neorv32_uart_vprintf</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, const char *format, va_list args)</td></tr> +<tr class="separator:a8714cdb1c04d94bec322c6215ea10238"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab8c1f9f451def9126ab2749d7bbe50d9" id="r_ab8c1f9f451def9126ab2749d7bbe50d9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab8c1f9f451def9126ab2749d7bbe50d9">neorv32_uart_printf</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, const char *format,...)</td></tr> +<tr class="separator:ab8c1f9f451def9126ab2749d7bbe50d9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac429964878bd6deab61d9ed8659bca75" id="r_ac429964878bd6deab61d9ed8659bca75"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac429964878bd6deab61d9ed8659bca75">neorv32_uart_scan</a> (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, char *buffer, int max_size, int echo)</td></tr> +<tr class="separator:ac429964878bd6deab61d9ed8659bca75"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: Primary/Secondary Universal Asynchronous Receiver and Transmitter (UART0 / UART1)</h2></td></tr> +<tr class="memitem:a4c880a6b27e46f459e750425258b1bdb" id="r_a4c880a6b27e46f459e750425258b1bdb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>*) (<a class="el" href="neorv32_8h.html#a000b37f710043fe21e49b2fdbc039d94">NEORV32_UART0_BASE</a>))</td></tr> +<tr class="separator:a4c880a6b27e46f459e750425258b1bdb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa2a9ded4523f001bf69935c80247fa2d" id="r_aa2a9ded4523f001bf69935c80247fa2d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>*) (<a class="el" href="neorv32_8h.html#a26a1defe18ce222b8b4ed1c760344700">NEORV32_UART1_BASE</a>))</td></tr> +<tr class="separator:aa2a9ded4523f001bf69935c80247fa2d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad9f75f453beca1619344bb4213352afc" id="r_ad9f75f453beca1619344bb4213352afc"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad9f75f453beca1619344bb4213352afc">NEORV32_UART_CTRL_enum</a> { <br /> +&#160;&#160;<a class="el" href="#ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2">UART_CTRL_EN</a> = 0 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1">UART_CTRL_SIM_MODE</a> = 1 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c">UART_CTRL_HWFC_EN</a> = 2 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183">UART_CTRL_PRSC0</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2">UART_CTRL_PRSC1</a> = 4 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70">UART_CTRL_PRSC2</a> = 5 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5">UART_CTRL_BAUD0</a> = 6 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439">UART_CTRL_BAUD1</a> = 7 +, <br /> +&#160;&#160;<a class="el" href="#ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6">UART_CTRL_BAUD2</a> = 8 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276">UART_CTRL_BAUD3</a> = 9 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424">UART_CTRL_BAUD4</a> = 10 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833">UART_CTRL_BAUD5</a> = 11 +, <br /> +&#160;&#160;<a class="el" href="#ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63">UART_CTRL_BAUD6</a> = 12 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e">UART_CTRL_BAUD7</a> = 13 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff">UART_CTRL_BAUD8</a> = 14 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e">UART_CTRL_BAUD9</a> = 15 +, <br /> +&#160;&#160;<a class="el" href="#ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff">UART_CTRL_RX_NEMPTY</a> = 16 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247">UART_CTRL_RX_HALF</a> = 17 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166">UART_CTRL_RX_FULL</a> = 18 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46">UART_CTRL_TX_EMPTY</a> = 19 +, <br /> +&#160;&#160;<a class="el" href="#ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9">UART_CTRL_TX_NHALF</a> = 20 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411">UART_CTRL_TX_FULL</a> = 21 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851">UART_CTRL_IRQ_RX_NEMPTY</a> = 22 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175">UART_CTRL_IRQ_RX_HALF</a> = 23 +, <br /> +&#160;&#160;<a class="el" href="#ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a">UART_CTRL_IRQ_RX_FULL</a> = 24 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c">UART_CTRL_IRQ_TX_EMPTY</a> = 25 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1">UART_CTRL_IRQ_TX_NHALF</a> = 26 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33">UART_CTRL_RX_CLR</a> = 28 +, <br /> +&#160;&#160;<a class="el" href="#ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431">UART_CTRL_TX_CLR</a> = 29 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632">UART_CTRL_RX_OVER</a> = 30 +, <a class="el" href="#ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25">UART_CTRL_TX_BUSY</a> = 31 +<br /> + }</td></tr> +<tr class="separator:ad9f75f453beca1619344bb4213352afc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:adcf35350a9ea18a59c32c35f528643f2" id="r_adcf35350a9ea18a59c32c35f528643f2"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adcf35350a9ea18a59c32c35f528643f2">NEORV32_UART_DATA_enum</a> { <br /> +&#160;&#160;<a class="el" href="#adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195">UART_DATA_RTX_LSB</a> = 0 +, <a class="el" href="#adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb">UART_DATA_RTX_MSB</a> = 7 +, <a class="el" href="#adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef">UART_DATA_RX_FIFO_SIZE_LSB</a> = 8 +, <a class="el" href="#adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225">UART_DATA_RX_FIFO_SIZE_MSB</a> = 11 +, <br /> +&#160;&#160;<a class="el" href="#adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e">UART_DATA_TX_FIFO_SIZE_LSB</a> = 12 +, <a class="el" href="#adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529">UART_DATA_TX_FIFO_SIZE_MSB</a> = 15 +<br /> + }</td></tr> +<tr class="separator:adcf35350a9ea18a59c32c35f528643f2"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Universal asynchronous receiver/transmitter (UART0/UART1) HW driver header file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a4c880a6b27e46f459e750425258b1bdb" name="a4c880a6b27e46f459e750425258b1bdb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4c880a6b27e46f459e750425258b1bdb">&#9670;&#160;</a></span>NEORV32_UART0</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_UART0&#160;&#160;&#160;((<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>*) (<a class="el" href="neorv32_8h.html#a000b37f710043fe21e49b2fdbc039d94">NEORV32_UART0_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART0 module hardware access (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>) </p> + +</div> +</div> +<a id="a652d93c0e3c6d7e5dc7c25c2465070e5" name="a652d93c0e3c6d7e5dc7c25c2465070e5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a652d93c0e3c6d7e5dc7c25c2465070e5">&#9670;&#160;</a></span>neorv32_uart0_available</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_available</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#abef6415b0391dc055713404312196682">neorv32_uart_available</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_a4c880a6b27e46f459e750425258b1bdb"><div class="ttname"><a href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a></div><div class="ttdeci">#define NEORV32_UART0</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:34</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_abef6415b0391dc055713404312196682"><div class="ttname"><a href="#abef6415b0391dc055713404312196682">neorv32_uart_available</a></div><div class="ttdeci">int neorv32_uart_available(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:53</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="aa29a2aeeee4faeb35b19165a9af31ac7" name="aa29a2aeeee4faeb35b19165a9af31ac7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa29a2aeeee4faeb35b19165a9af31ac7">&#9670;&#160;</a></span>neorv32_uart0_char_received</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_char_received</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#adedb0e07efb232717534017167a5be98">neorv32_uart_char_received</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_adedb0e07efb232717534017167a5be98"><div class="ttname"><a href="#adedb0e07efb232717534017167a5be98">neorv32_uart_char_received</a></div><div class="ttdeci">int neorv32_uart_char_received(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:278</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="a68aee77039a3c7450ec78e0f868889f1" name="a68aee77039a3c7450ec78e0f868889f1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a68aee77039a3c7450ec78e0f868889f1">&#9670;&#160;</a></span>neorv32_uart0_char_received_get</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_char_received_get</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#aa490df3a9bb2aa3215fa6fad34ffe7d1">neorv32_uart_char_received_get</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_aa490df3a9bb2aa3215fa6fad34ffe7d1"><div class="ttname"><a href="#aa490df3a9bb2aa3215fa6fad34ffe7d1">neorv32_uart_char_received_get</a></div><div class="ttdeci">char neorv32_uart_char_received_get(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:298</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="af99ce6ccc40fec039264da66e8f67ba7" name="af99ce6ccc40fec039264da66e8f67ba7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af99ce6ccc40fec039264da66e8f67ba7">&#9670;&#160;</a></span>neorv32_uart0_disable</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_disable</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#ae18804ccd29ec2fd1cc06e9ce985b704">neorv32_uart_disable</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_ae18804ccd29ec2fd1cc06e9ce985b704"><div class="ttname"><a href="#ae18804ccd29ec2fd1cc06e9ce985b704">neorv32_uart_disable</a></div><div class="ttdeci">void neorv32_uart_disable(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:170</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="a4cc0ea2ee22b379fc9a7f45e30bc118f" name="a4cc0ea2ee22b379fc9a7f45e30bc118f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4cc0ea2ee22b379fc9a7f45e30bc118f">&#9670;&#160;</a></span>neorv32_uart0_enable</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_enable</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#afa0533e81d53057c36f4997a2dbbe2bc">neorv32_uart_enable</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_afa0533e81d53057c36f4997a2dbbe2bc"><div class="ttname"><a href="#afa0533e81d53057c36f4997a2dbbe2bc">neorv32_uart_enable</a></div><div class="ttdeci">void neorv32_uart_enable(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:159</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="aa5c803f757ecc14cdfdad521d4bf7c18" name="aa5c803f757ecc14cdfdad521d4bf7c18"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa5c803f757ecc14cdfdad521d4bf7c18">&#9670;&#160;</a></span>neorv32_uart0_get_rx_fifo_depth</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_get_rx_fifo_depth</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#af85fb929c912d3edef3d86ffa833982a">neorv32_uart_get_rx_fifo_depth</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_af85fb929c912d3edef3d86ffa833982a"><div class="ttname"><a href="#af85fb929c912d3edef3d86ffa833982a">neorv32_uart_get_rx_fifo_depth</a></div><div class="ttdeci">int neorv32_uart_get_rx_fifo_depth(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:133</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="af6068949ae9ed923eac69350347273dc" name="af6068949ae9ed923eac69350347273dc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af6068949ae9ed923eac69350347273dc">&#9670;&#160;</a></span>neorv32_uart0_get_tx_fifo_depth</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_get_tx_fifo_depth</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a031e3e27c8783c299623468020a22b0e">neorv32_uart_get_tx_fifo_depth</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_a031e3e27c8783c299623468020a22b0e"><div class="ttname"><a href="#a031e3e27c8783c299623468020a22b0e">neorv32_uart_get_tx_fifo_depth</a></div><div class="ttdeci">int neorv32_uart_get_tx_fifo_depth(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:147</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="a248d40034ce64ca3325c00b9ae0c5208" name="a248d40034ce64ca3325c00b9ae0c5208"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a248d40034ce64ca3325c00b9ae0c5208">&#9670;&#160;</a></span>neorv32_uart0_getc</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_getc</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a2efd432f63b8d36d44263d0b1f39a6dc">neorv32_uart_getc</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_a2efd432f63b8d36d44263d0b1f39a6dc"><div class="ttname"><a href="#a2efd432f63b8d36d44263d0b1f39a6dc">neorv32_uart_getc</a></div><div class="ttdeci">char neorv32_uart_getc(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:259</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="a6927bfe22016655a19b906d867006896" name="a6927bfe22016655a19b906d867006896"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6927bfe22016655a19b906d867006896">&#9670;&#160;</a></span>neorv32_uart0_printf</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_printf</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em></em></span>...</td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#ab8c1f9f451def9126ab2749d7bbe50d9">neorv32_uart_printf</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>, __VA_ARGS__)</div> +<div class="ttc" id="aneorv32__uart_8h_html_ab8c1f9f451def9126ab2749d7bbe50d9"><div class="ttname"><a href="#ab8c1f9f451def9126ab2749d7bbe50d9">neorv32_uart_printf</a></div><div class="ttdeci">void neorv32_uart_printf(neorv32_uart_t *UARTx, const char *format,...)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:409</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="a2dc207fedc80aa9021a4e5b7abd667a7" name="a2dc207fedc80aa9021a4e5b7abd667a7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2dc207fedc80aa9021a4e5b7abd667a7">&#9670;&#160;</a></span>neorv32_uart0_putc</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_putc</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>c</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a9bc7bb94a50b74e1145b78eec6094129">neorv32_uart_putc</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>, c)</div> +<div class="ttc" id="aneorv32__uart_8h_html_a9bc7bb94a50b74e1145b78eec6094129"><div class="ttname"><a href="#a9bc7bb94a50b74e1145b78eec6094129">neorv32_uart_putc</a></div><div class="ttdeci">void neorv32_uart_putc(neorv32_uart_t *UARTx, char c)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:204</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="adc688c900d03a0538dbd6461c56f00cd" name="adc688c900d03a0538dbd6461c56f00cd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adc688c900d03a0538dbd6461c56f00cd">&#9670;&#160;</a></span>neorv32_uart0_puts</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_puts</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>s</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a45a07d5e71677162baaa1025759c67a2">neorv32_uart_puts</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>, s)</div> +<div class="ttc" id="aneorv32__uart_8h_html_a45a07d5e71677162baaa1025759c67a2"><div class="ttname"><a href="#a45a07d5e71677162baaa1025759c67a2">neorv32_uart_puts</a></div><div class="ttdeci">void neorv32_uart_puts(neorv32_uart_t *UARTx, const char *s)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:312</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="a3cdd0db72d7cffe25c9f2f90a39fc2f7" name="a3cdd0db72d7cffe25c9f2f90a39fc2f7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3cdd0db72d7cffe25c9f2f90a39fc2f7">&#9670;&#160;</a></span>neorv32_uart0_rtscts_disable</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_rtscts_disable</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a7b2f924ef4554b1fa90433c38d97558d">neorv32_uart_rtscts_disable</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_a7b2f924ef4554b1fa90433c38d97558d"><div class="ttname"><a href="#a7b2f924ef4554b1fa90433c38d97558d">neorv32_uart_rtscts_disable</a></div><div class="ttdeci">void neorv32_uart_rtscts_disable(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:192</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="a53734cc693bdfa11458a62df5b609264" name="a53734cc693bdfa11458a62df5b609264"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a53734cc693bdfa11458a62df5b609264">&#9670;&#160;</a></span>neorv32_uart0_rtscts_enable</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_rtscts_enable</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a734b610f4cd1b474d7763f9700a715ec">neorv32_uart_rtscts_enable</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_a734b610f4cd1b474d7763f9700a715ec"><div class="ttname"><a href="#a734b610f4cd1b474d7763f9700a715ec">neorv32_uart_rtscts_enable</a></div><div class="ttdeci">void neorv32_uart_rtscts_enable(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:181</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="ab576f613cf952dadb8c1a352d8bdf4b5" name="ab576f613cf952dadb8c1a352d8bdf4b5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab576f613cf952dadb8c1a352d8bdf4b5">&#9670;&#160;</a></span>neorv32_uart0_rx_clear</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_rx_clear</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#afe0de59c14faff1e0c890d5465be25f0">neorv32_uart_rx_clear</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_afe0de59c14faff1e0c890d5465be25f0"><div class="ttname"><a href="#afe0de59c14faff1e0c890d5465be25f0">neorv32_uart_rx_clear</a></div><div class="ttdeci">void neorv32_uart_rx_clear(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:217</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="aa8cd95c962154cf55fb4b9d5008c858f" name="aa8cd95c962154cf55fb4b9d5008c858f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa8cd95c962154cf55fb4b9d5008c858f">&#9670;&#160;</a></span>neorv32_uart0_scan</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_scan</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>buffer</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>max_size</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>echo</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#ac429964878bd6deab61d9ed8659bca75">neorv32_uart_scan</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>, buffer, max_size, echo)</div> +<div class="ttc" id="aneorv32__uart_8h_html_ac429964878bd6deab61d9ed8659bca75"><div class="ttname"><a href="#ac429964878bd6deab61d9ed8659bca75">neorv32_uart_scan</a></div><div class="ttdeci">int neorv32_uart_scan(neorv32_uart_t *UARTx, char *buffer, int max_size, int echo)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:429</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="a27e92f501ceda8e34652781901e6db33" name="a27e92f501ceda8e34652781901e6db33"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a27e92f501ceda8e34652781901e6db33">&#9670;&#160;</a></span>neorv32_uart0_setup</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_setup</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>baudrate</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>irq_mask</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a9cdec36f2723c5373664022d1b68b841">neorv32_uart_setup</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>, baudrate, irq_mask)</div> +<div class="ttc" id="aneorv32__uart_8h_html_a9cdec36f2723c5373664022d1b68b841"><div class="ttname"><a href="#a9cdec36f2723c5373664022d1b68b841">neorv32_uart_setup</a></div><div class="ttdeci">void neorv32_uart_setup(neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:74</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="a80c68d3af417085da2d18a82081124ba" name="a80c68d3af417085da2d18a82081124ba"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a80c68d3af417085da2d18a82081124ba">&#9670;&#160;</a></span>neorv32_uart0_tx_busy</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_tx_busy</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#aa7bef48a58e044c246b8c4ad32864502">neorv32_uart_tx_busy</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_aa7bef48a58e044c246b8c4ad32864502"><div class="ttname"><a href="#aa7bef48a58e044c246b8c4ad32864502">neorv32_uart_tx_busy</a></div><div class="ttdeci">int neorv32_uart_tx_busy(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:240</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="af4fd1601d10c6eeca0f4e8b6fe076a7f" name="af4fd1601d10c6eeca0f4e8b6fe076a7f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af4fd1601d10c6eeca0f4e8b6fe076a7f">&#9670;&#160;</a></span>neorv32_uart0_tx_clear</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart0_tx_clear</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a27971954262a2fd1f21d3bf1ba27e87c">neorv32_uart_tx_clear</a>(<a class="code hl_define" href="#a4c880a6b27e46f459e750425258b1bdb">NEORV32_UART0</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_a27971954262a2fd1f21d3bf1ba27e87c"><div class="ttname"><a href="#a27971954262a2fd1f21d3bf1ba27e87c">neorv32_uart_tx_clear</a></div><div class="ttdeci">void neorv32_uart_tx_clear(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:228</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="aa2a9ded4523f001bf69935c80247fa2d" name="aa2a9ded4523f001bf69935c80247fa2d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa2a9ded4523f001bf69935c80247fa2d">&#9670;&#160;</a></span>NEORV32_UART1</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_UART1&#160;&#160;&#160;((<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>*) (<a class="el" href="neorv32_8h.html#a26a1defe18ce222b8b4ed1c760344700">NEORV32_UART1_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART1 module hardware access (<a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>) </p> + +</div> +</div> +<a id="a969f991e166e72a32aaee174ddef5962" name="a969f991e166e72a32aaee174ddef5962"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a969f991e166e72a32aaee174ddef5962">&#9670;&#160;</a></span>neorv32_uart1_available</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_available</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#abef6415b0391dc055713404312196682">neorv32_uart_available</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>)</div> +<div class="ttc" id="aneorv32__uart_8h_html_aa2a9ded4523f001bf69935c80247fa2d"><div class="ttname"><a href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a></div><div class="ttdeci">#define NEORV32_UART1</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:37</div></div> +</div><!-- fragment --> +</div> +</div> +<a id="a8b862c864010a574b856a7f5d3f6020b" name="a8b862c864010a574b856a7f5d3f6020b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8b862c864010a574b856a7f5d3f6020b">&#9670;&#160;</a></span>neorv32_uart1_char_received</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_char_received</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#adedb0e07efb232717534017167a5be98">neorv32_uart_char_received</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a25006186655175f0bbfe739750ebcec6" name="a25006186655175f0bbfe739750ebcec6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a25006186655175f0bbfe739750ebcec6">&#9670;&#160;</a></span>neorv32_uart1_char_received_get</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_char_received_get</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#aa490df3a9bb2aa3215fa6fad34ffe7d1">neorv32_uart_char_received_get</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a244073e58d04a364446f50e4708f3b36" name="a244073e58d04a364446f50e4708f3b36"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a244073e58d04a364446f50e4708f3b36">&#9670;&#160;</a></span>neorv32_uart1_disable</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_disable</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#ae18804ccd29ec2fd1cc06e9ce985b704">neorv32_uart_disable</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>)</div> +</div><!-- fragment --> +</div> +</div> +<a id="ad36be396ae9e9ea21cf4a5f3247d7a8d" name="ad36be396ae9e9ea21cf4a5f3247d7a8d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad36be396ae9e9ea21cf4a5f3247d7a8d">&#9670;&#160;</a></span>neorv32_uart1_enable</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_enable</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#afa0533e81d53057c36f4997a2dbbe2bc">neorv32_uart_enable</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a8a00c086c47e0cffbc586155228060df" name="a8a00c086c47e0cffbc586155228060df"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8a00c086c47e0cffbc586155228060df">&#9670;&#160;</a></span>neorv32_uart1_get_rx_fifo_depth</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_get_rx_fifo_depth</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#af85fb929c912d3edef3d86ffa833982a">neorv32_uart_get_rx_fifo_depth</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a27f16aaf0b15f5417c335804cfebbe54" name="a27f16aaf0b15f5417c335804cfebbe54"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a27f16aaf0b15f5417c335804cfebbe54">&#9670;&#160;</a></span>neorv32_uart1_get_tx_fifo_depth</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_get_tx_fifo_depth</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a031e3e27c8783c299623468020a22b0e">neorv32_uart_get_tx_fifo_depth</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a1d8a289bcd2d4c33769dcc670678a573" name="a1d8a289bcd2d4c33769dcc670678a573"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1d8a289bcd2d4c33769dcc670678a573">&#9670;&#160;</a></span>neorv32_uart1_getc</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_getc</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a2efd432f63b8d36d44263d0b1f39a6dc">neorv32_uart_getc</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a5992006547f020a7ba5ab914266358c6" name="a5992006547f020a7ba5ab914266358c6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5992006547f020a7ba5ab914266358c6">&#9670;&#160;</a></span>neorv32_uart1_printf</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_printf</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em></em></span>...</td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#ab8c1f9f451def9126ab2749d7bbe50d9">neorv32_uart_printf</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>, __VA_ARGS__)</div> +</div><!-- fragment --> +</div> +</div> +<a id="acb41a23b9a1cbc4032d89455461c32be" name="acb41a23b9a1cbc4032d89455461c32be"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acb41a23b9a1cbc4032d89455461c32be">&#9670;&#160;</a></span>neorv32_uart1_putc</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_putc</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>c</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a9bc7bb94a50b74e1145b78eec6094129">neorv32_uart_putc</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>, c)</div> +</div><!-- fragment --> +</div> +</div> +<a id="aa44dc625701ebbffe94508aa2e23dedf" name="aa44dc625701ebbffe94508aa2e23dedf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa44dc625701ebbffe94508aa2e23dedf">&#9670;&#160;</a></span>neorv32_uart1_puts</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_puts</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>s</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a45a07d5e71677162baaa1025759c67a2">neorv32_uart_puts</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>, s)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a49c5158b6fa31f1c59660ed8744f2a3a" name="a49c5158b6fa31f1c59660ed8744f2a3a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a49c5158b6fa31f1c59660ed8744f2a3a">&#9670;&#160;</a></span>neorv32_uart1_rtscts_disable</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_rtscts_disable</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a7b2f924ef4554b1fa90433c38d97558d">neorv32_uart_rtscts_disable</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a64979d4d47678ca3e81a3b1d2eab52e7" name="a64979d4d47678ca3e81a3b1d2eab52e7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a64979d4d47678ca3e81a3b1d2eab52e7">&#9670;&#160;</a></span>neorv32_uart1_rtscts_enable</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_rtscts_enable</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a734b610f4cd1b474d7763f9700a715ec">neorv32_uart_rtscts_enable</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a43be76025c2b90c3868315eacb0ee865" name="a43be76025c2b90c3868315eacb0ee865"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a43be76025c2b90c3868315eacb0ee865">&#9670;&#160;</a></span>neorv32_uart1_rx_clear</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_rx_clear</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#afe0de59c14faff1e0c890d5465be25f0">neorv32_uart_rx_clear</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a22a000e915c62c5d7da0af8ca4922710" name="a22a000e915c62c5d7da0af8ca4922710"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a22a000e915c62c5d7da0af8ca4922710">&#9670;&#160;</a></span>neorv32_uart1_scan</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_scan</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>buffer</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>max_size</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>echo</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#ac429964878bd6deab61d9ed8659bca75">neorv32_uart_scan</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>, buffer, max_size, echo)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a5d94cc37807bdac20fcd782df138d480" name="a5d94cc37807bdac20fcd782df138d480"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5d94cc37807bdac20fcd782df138d480">&#9670;&#160;</a></span>neorv32_uart1_setup</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_setup</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>baudrate</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>irq_mask</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a9cdec36f2723c5373664022d1b68b841">neorv32_uart_setup</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>, baudrate, irq_mask)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a4fbbc6737f0d5e44eb775f5f6d724b02" name="a4fbbc6737f0d5e44eb775f5f6d724b02"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4fbbc6737f0d5e44eb775f5f6d724b02">&#9670;&#160;</a></span>neorv32_uart1_tx_busy</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_tx_busy</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#aa7bef48a58e044c246b8c4ad32864502">neorv32_uart_tx_busy</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>)</div> +</div><!-- fragment --> +</div> +</div> +<a id="a4705c6caea4b5064f51d37b40a156080" name="a4705c6caea4b5064f51d37b40a156080"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4705c6caea4b5064f51d37b40a156080">&#9670;&#160;</a></span>neorv32_uart1_tx_clear</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define neorv32_uart1_tx_clear</td> + <td>(</td> + <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line"><a class="code hl_function" href="#a27971954262a2fd1f21d3bf1ba27e87c">neorv32_uart_tx_clear</a>(<a class="code hl_define" href="#aa2a9ded4523f001bf69935c80247fa2d">NEORV32_UART1</a>)</div> +</div><!-- fragment --> +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="ad9f75f453beca1619344bb4213352afc" name="ad9f75f453beca1619344bb4213352afc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad9f75f453beca1619344bb4213352afc">&#9670;&#160;</a></span>NEORV32_UART_CTRL_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#ad9f75f453beca1619344bb4213352afc">NEORV32_UART_CTRL_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART control register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2" name="ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2"></a>UART_CTRL_EN&#160;</td><td class="fielddoc"><p>UART control register(0) (r/w): UART global enable </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1" name="ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1"></a>UART_CTRL_SIM_MODE&#160;</td><td class="fielddoc"><p>UART control register(1) (r/w): Simulation output override enable </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c" name="ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c"></a>UART_CTRL_HWFC_EN&#160;</td><td class="fielddoc"><p>UART control register(2) (r/w): Enable RTS/CTS hardware flow-control </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183" name="ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183"></a>UART_CTRL_PRSC0&#160;</td><td class="fielddoc"><p>UART control register(3) (r/w): clock prescaler select bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2" name="ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2"></a>UART_CTRL_PRSC1&#160;</td><td class="fielddoc"><p>UART control register(4) (r/w): clock prescaler select bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70" name="ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70"></a>UART_CTRL_PRSC2&#160;</td><td class="fielddoc"><p>UART control register(5) (r/w): clock prescaler select bit 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5" name="ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5"></a>UART_CTRL_BAUD0&#160;</td><td class="fielddoc"><p>UART control register(6) (r/w): BAUD rate divisor, bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439" name="ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439"></a>UART_CTRL_BAUD1&#160;</td><td class="fielddoc"><p>UART control register(7) (r/w): BAUD rate divisor, bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6" name="ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6"></a>UART_CTRL_BAUD2&#160;</td><td class="fielddoc"><p>UART control register(8) (r/w): BAUD rate divisor, bit 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276" name="ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276"></a>UART_CTRL_BAUD3&#160;</td><td class="fielddoc"><p>UART control register(9) (r/w): BAUD rate divisor, bit 3 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424" name="ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424"></a>UART_CTRL_BAUD4&#160;</td><td class="fielddoc"><p>UART control register(10) (r/w): BAUD rate divisor, bit 4 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833" name="ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833"></a>UART_CTRL_BAUD5&#160;</td><td class="fielddoc"><p>UART control register(11) (r/w): BAUD rate divisor, bit 5 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63" name="ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63"></a>UART_CTRL_BAUD6&#160;</td><td class="fielddoc"><p>UART control register(12) (r/w): BAUD rate divisor, bit 6 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e" name="ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e"></a>UART_CTRL_BAUD7&#160;</td><td class="fielddoc"><p>UART control register(13) (r/w): BAUD rate divisor, bit 7 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff" name="ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff"></a>UART_CTRL_BAUD8&#160;</td><td class="fielddoc"><p>UART control register(14) (r/w): BAUD rate divisor, bit 8 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e" name="ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e"></a>UART_CTRL_BAUD9&#160;</td><td class="fielddoc"><p>UART control register(15) (r/w): BAUD rate divisor, bit 9 </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff" name="ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff"></a>UART_CTRL_RX_NEMPTY&#160;</td><td class="fielddoc"><p>UART control register(16) (r/-): RX FIFO not empty </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247" name="ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247"></a>UART_CTRL_RX_HALF&#160;</td><td class="fielddoc"><p>UART control register(17) (r/-): RX FIFO at least half-full </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166" name="ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166"></a>UART_CTRL_RX_FULL&#160;</td><td class="fielddoc"><p>UART control register(18) (r/-): RX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46" name="ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46"></a>UART_CTRL_TX_EMPTY&#160;</td><td class="fielddoc"><p>UART control register(19) (r/-): TX FIFO empty </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9" name="ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9"></a>UART_CTRL_TX_NHALF&#160;</td><td class="fielddoc"><p>UART control register(20) (r/-): TX FIFO not at least half-full </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411" name="ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411"></a>UART_CTRL_TX_FULL&#160;</td><td class="fielddoc"><p>UART control register(21) (r/-): TX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851" name="ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851"></a>UART_CTRL_IRQ_RX_NEMPTY&#160;</td><td class="fielddoc"><p>UART control register(22) (r/w): Fire IRQ if RX FIFO not empty </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175" name="ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175"></a>UART_CTRL_IRQ_RX_HALF&#160;</td><td class="fielddoc"><p>UART control register(23) (r/w): Fire IRQ if RX FIFO at least half-full </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a" name="ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a"></a>UART_CTRL_IRQ_RX_FULL&#160;</td><td class="fielddoc"><p>UART control register(24) (r/w): Fire IRQ if RX FIFO full </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c" name="ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c"></a>UART_CTRL_IRQ_TX_EMPTY&#160;</td><td class="fielddoc"><p>UART control register(25) (r/w): Fire IRQ if TX FIFO empty </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1" name="ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1"></a>UART_CTRL_IRQ_TX_NHALF&#160;</td><td class="fielddoc"><p>UART control register(26) (r/w): Fire IRQ if TX FIFO not at least half-full </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33" name="ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33"></a>UART_CTRL_RX_CLR&#160;</td><td class="fielddoc"><p>UART control register(28) (r/w): Clear RX FIFO, flag auto-clears </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431" name="ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431"></a>UART_CTRL_TX_CLR&#160;</td><td class="fielddoc"><p>UART control register(29) (r/w): Clear TX FIFO, flag auto-clears </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632" name="ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632"></a>UART_CTRL_RX_OVER&#160;</td><td class="fielddoc"><p>UART control register(30) (r/-): RX FIFO overflow </p> +</td></tr> +<tr><td class="fieldname"><a id="ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25" name="ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25"></a>UART_CTRL_TX_BUSY&#160;</td><td class="fielddoc"><p>UART control register(31) (r/-): Transmitter busy or TX FIFO not empty </p> +</td></tr> +</table> + +</div> +</div> +<a id="adcf35350a9ea18a59c32c35f528643f2" name="adcf35350a9ea18a59c32c35f528643f2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adcf35350a9ea18a59c32c35f528643f2">&#9670;&#160;</a></span>NEORV32_UART_DATA_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#adcf35350a9ea18a59c32c35f528643f2">NEORV32_UART_DATA_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>UART data register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195" name="adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195"></a>UART_DATA_RTX_LSB&#160;</td><td class="fielddoc"><p>UART data register(0) (r/w): UART receive/transmit data, LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb" name="adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb"></a>UART_DATA_RTX_MSB&#160;</td><td class="fielddoc"><p>UART data register(7) (r/w): UART receive/transmit data, MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef" name="adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef"></a>UART_DATA_RX_FIFO_SIZE_LSB&#160;</td><td class="fielddoc"><p>UART data register(8) (r/-): log2(RX FIFO size), LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225" name="adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225"></a>UART_DATA_RX_FIFO_SIZE_MSB&#160;</td><td class="fielddoc"><p>UART data register(11) (r/-): log2(RX FIFO size), MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e" name="adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e"></a>UART_DATA_TX_FIFO_SIZE_LSB&#160;</td><td class="fielddoc"><p>UART data register(12) (r/-): log2(RX FIFO size), LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529" name="adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529"></a>UART_DATA_TX_FIFO_SIZE_MSB&#160;</td><td class="fielddoc"><p>UART data register(15) (r/-): log2(RX FIFO size), MSB </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="abef6415b0391dc055713404312196682" name="abef6415b0391dc055713404312196682"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abef6415b0391dc055713404312196682">&#9670;&#160;</a></span>neorv32_uart_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_uart_available </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if UART unit was synthesized.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">Hardware</td><td>handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if UART0/1 was not synthesized, 1 if UART0/1 is available. </dd></dl> + +</div> +</div> +<a id="adedb0e07efb232717534017167a5be98" name="adedb0e07efb232717534017167a5be98"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adedb0e07efb232717534017167a5be98">&#9670;&#160;</a></span>neorv32_uart_char_received()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_uart_char_received </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if UART has received a char.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking. </dd> +<dd> +Use neorv32_uart_char_received_get(void) to get the char.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>1 when a char has been received, 0 otherwise. </dd></dl> + +</div> +</div> +<a id="aa490df3a9bb2aa3215fa6fad34ffe7d1" name="aa490df3a9bb2aa3215fa6fad34ffe7d1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa490df3a9bb2aa3215fa6fad34ffe7d1">&#9670;&#160;</a></span>neorv32_uart_char_received_get()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char neorv32_uart_char_received_get </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get a received char from UART.</p> +<dl class="section note"><dt>Note</dt><dd>This function is non-blocking. </dd> +<dd> +Should only be used in combination with neorv32_uart_char_received(void).</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Received char. </dd></dl> + +</div> +</div> +<a id="ae18804ccd29ec2fd1cc06e9ce985b704" name="ae18804ccd29ec2fd1cc06e9ce985b704"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae18804ccd29ec2fd1cc06e9ce985b704">&#9670;&#160;</a></span>neorv32_uart_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_disable </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable UART.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="afa0533e81d53057c36f4997a2dbbe2bc" name="afa0533e81d53057c36f4997a2dbbe2bc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afa0533e81d53057c36f4997a2dbbe2bc">&#9670;&#160;</a></span>neorv32_uart_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_enable </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable UART.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="af85fb929c912d3edef3d86ffa833982a" name="af85fb929c912d3edef3d86ffa833982a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af85fb929c912d3edef3d86ffa833982a">&#9670;&#160;</a></span>neorv32_uart_get_rx_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_uart_get_rx_fifo_depth </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get UART RX FIFO depth.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>.</td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries) </dd></dl> + +</div> +</div> +<a id="a031e3e27c8783c299623468020a22b0e" name="a031e3e27c8783c299623468020a22b0e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a031e3e27c8783c299623468020a22b0e">&#9670;&#160;</a></span>neorv32_uart_get_tx_fifo_depth()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_uart_get_tx_fifo_depth </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get UART TX FIFO depth.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>.</td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>FIFO depth (number of entries) </dd></dl> + +</div> +</div> +<a id="a2efd432f63b8d36d44263d0b1f39a6dc" name="a2efd432f63b8d36d44263d0b1f39a6dc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2efd432f63b8d36d44263d0b1f39a6dc">&#9670;&#160;</a></span>neorv32_uart_getc()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char neorv32_uart_getc </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get char from UART.</p> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Received char. </dd></dl> + +</div> +</div> +<a id="ab8c1f9f451def9126ab2749d7bbe50d9" name="ab8c1f9f451def9126ab2749d7bbe50d9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab8c1f9f451def9126ab2749d7bbe50d9">&#9670;&#160;</a></span>neorv32_uart_printf()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_printf </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char *</td> <td class="paramname"><span class="paramname"><em>format</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>...</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Custom version of 'printf' printing to UART.</p> +<dl class="section warning"><dt>Warning</dt><dd>: This functions only provides a minimal subset of the 'printf' formatting features! </dd></dl> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">format</td><td>Pointer to format string. See neorv32_uart_vprintf. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a9bc7bb94a50b74e1145b78eec6094129" name="a9bc7bb94a50b74e1145b78eec6094129"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9bc7bb94a50b74e1145b78eec6094129">&#9670;&#160;</a></span>neorv32_uart_putc()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_putc </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char</td> <td class="paramname"><span class="paramname"><em>c</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Send single char via UART.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">c</td><td>Char to be send. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a45a07d5e71677162baaa1025759c67a2" name="a45a07d5e71677162baaa1025759c67a2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a45a07d5e71677162baaa1025759c67a2">&#9670;&#160;</a></span>neorv32_uart_puts()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_puts </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char *</td> <td class="paramname"><span class="paramname"><em>s</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Print string (zero-terminated) via UART. Print full line break "\r\n" for every '<br /> +'.</p> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">s</td><td>Pointer to string. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a7b2f924ef4554b1fa90433c38d97558d" name="a7b2f924ef4554b1fa90433c38d97558d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7b2f924ef4554b1fa90433c38d97558d">&#9670;&#160;</a></span>neorv32_uart_rtscts_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_rtscts_disable </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable RTS/CTS hardware flow-control.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a734b610f4cd1b474d7763f9700a715ec" name="a734b610f4cd1b474d7763f9700a715ec"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a734b610f4cd1b474d7763f9700a715ec">&#9670;&#160;</a></span>neorv32_uart_rtscts_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_rtscts_enable </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable RTS/CTS hardware flow-control.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="afe0de59c14faff1e0c890d5465be25f0" name="afe0de59c14faff1e0c890d5465be25f0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afe0de59c14faff1e0c890d5465be25f0">&#9670;&#160;</a></span>neorv32_uart_rx_clear()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_rx_clear </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear RX FIFO.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="ac429964878bd6deab61d9ed8659bca75" name="ac429964878bd6deab61d9ed8659bca75"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac429964878bd6deab61d9ed8659bca75">&#9670;&#160;</a></span>neorv32_uart_scan()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_uart_scan </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char *</td> <td class="paramname"><span class="paramname"><em>buffer</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>max_size</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>echo</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Simplified custom version of 'scanf' reading from UART.</p> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + <tr><td class="paramdir">[in,out]</td><td class="paramname">buffer</td><td>Pointer to array of chars to store string. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">max_size</td><td>Maximum number of chars to sample (including zero-termination). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">echo</td><td>Echo UART input when 1. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Number of chars read. </dd></dl> + +</div> +</div> +<a id="a9cdec36f2723c5373664022d1b68b841" name="a9cdec36f2723c5373664022d1b68b841"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9cdec36f2723c5373664022d1b68b841">&#9670;&#160;</a></span>neorv32_uart_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_setup </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>baudrate</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>irq_mask</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset, configure and enable UART.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">baudrate</td><td>Targeted BAUD rate (e.g. 19200). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">irq_mask</td><td>Interrupt configuration mask (CTRL's irq_* bits). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="aa7bef48a58e044c246b8c4ad32864502" name="aa7bef48a58e044c246b8c4ad32864502"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa7bef48a58e044c246b8c4ad32864502">&#9670;&#160;</a></span>neorv32_uart_tx_busy()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_uart_tx_busy </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if UART TX is busy (transmitter busy or data left in TX buffer).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if idle, 1 if busy </dd></dl> + +</div> +</div> +<a id="a27971954262a2fd1f21d3bf1ba27e87c" name="a27971954262a2fd1f21d3bf1ba27e87c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a27971954262a2fd1f21d3bf1ba27e87c">&#9670;&#160;</a></span>neorv32_uart_tx_clear()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_tx_clear </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Clear TX FIFO.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a8714cdb1c04d94bec322c6215ea10238" name="a8714cdb1c04d94bec322c6215ea10238"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8714cdb1c04d94bec322c6215ea10238">&#9670;&#160;</a></span>neorv32_uart_vprintf()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_uart_vprintf </td> + <td>(</td> + <td class="paramtype"><a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a> *</td> <td class="paramname"><span class="paramname"><em>UARTx</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char *</td> <td class="paramname"><span class="paramname"><em>format</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">va_list</td> <td class="paramname"><span class="paramname"><em>args</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Custom version of 'vprintf' printing to UART.</p> +<dl class="section warning"><dt>Warning</dt><dd>: This functions only provides a minimal subset of the 'vprintf' formating features! </dd></dl> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in,out]</td><td class="paramname">UARTx</td><td>Hardware handle to UART register struct, <a class="el" href="structneorv32__uart__t.html">neorv32_uart_t</a>. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">format</td><td>Pointer to format string. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">args</td><td>A value identifying a variable arguments list. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__uart_8h_source.html b/sw/neorv32__uart_8h_source.html new file mode 100644 index 0000000000..cb9532ad65 --- /dev/null +++ b/sw/neorv32__uart_8h_source.html @@ -0,0 +1,296 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_uart.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_uart.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__uart_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef neorv32_uart_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define neorv32_uart_h</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &lt;stdarg.h&gt;</span></div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00028" data-start="{" data-end="};"> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="structneorv32__uart__t.html"> 28</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__uart__t.html#a0a6227aeea38335d2b9a9da46b35451b"> 29</a></span> uint32_t <a class="code hl_variable" href="structneorv32__uart__t.html#a0a6227aeea38335d2b9a9da46b35451b">CTRL</a>; </div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__uart__t.html#a38eec82aae9ed522a0d2afb9a9560036"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__uart__t.html#a38eec82aae9ed522a0d2afb9a9560036">DATA</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span>} <a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a>;</div> +</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#a4c880a6b27e46f459e750425258b1bdb"> 34</a></span><span class="preprocessor">#define NEORV32_UART0 ((neorv32_uart_t*) (NEORV32_UART0_BASE))</span></div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#aa2a9ded4523f001bf69935c80247fa2d"> 37</a></span><span class="preprocessor">#define NEORV32_UART1 ((neorv32_uart_t*) (NEORV32_UART1_BASE))</span></div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="foldopen" id="foldopen00040" data-start="{" data-end="};"> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afc"> 40</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afc">NEORV32_UART_CTRL_enum</a> {</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2">UART_CTRL_EN</a> = 0, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1">UART_CTRL_SIM_MODE</a> = 1, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c">UART_CTRL_HWFC_EN</a> = 2, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183"> 44</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183">UART_CTRL_PRSC0</a> = 3, </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2"> 45</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2">UART_CTRL_PRSC1</a> = 4, </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70"> 46</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70">UART_CTRL_PRSC2</a> = 5, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5">UART_CTRL_BAUD0</a> = 6, </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439"> 48</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439">UART_CTRL_BAUD1</a> = 7, </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6"> 49</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6">UART_CTRL_BAUD2</a> = 8, </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276"> 50</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276">UART_CTRL_BAUD3</a> = 9, </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424"> 51</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424">UART_CTRL_BAUD4</a> = 10, </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833"> 52</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833">UART_CTRL_BAUD5</a> = 11, </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63"> 53</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63">UART_CTRL_BAUD6</a> = 12, </div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e"> 54</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e">UART_CTRL_BAUD7</a> = 13, </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff"> 55</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff">UART_CTRL_BAUD8</a> = 14, </div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e"> 56</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e">UART_CTRL_BAUD9</a> = 15, </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff"> 58</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff">UART_CTRL_RX_NEMPTY</a> = 16, </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247"> 59</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247">UART_CTRL_RX_HALF</a> = 17, </div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166"> 60</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166">UART_CTRL_RX_FULL</a> = 18, </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46"> 61</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46">UART_CTRL_TX_EMPTY</a> = 19, </div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9"> 62</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9">UART_CTRL_TX_NHALF</a> = 20, </div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411"> 63</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411">UART_CTRL_TX_FULL</a> = 21, </div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851"> 65</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851">UART_CTRL_IRQ_RX_NEMPTY</a> = 22, </div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175"> 66</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175">UART_CTRL_IRQ_RX_HALF</a> = 23, </div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a"> 67</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a">UART_CTRL_IRQ_RX_FULL</a> = 24, </div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c"> 68</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c">UART_CTRL_IRQ_TX_EMPTY</a> = 25, </div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1"> 69</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1">UART_CTRL_IRQ_TX_NHALF</a> = 26, </div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33"> 71</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33">UART_CTRL_RX_CLR</a> = 28, </div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431"> 72</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431">UART_CTRL_TX_CLR</a> = 29, </div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632"> 73</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632">UART_CTRL_RX_OVER</a> = 30, </div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25">UART_CTRL_TX_BUSY</a> = 31 </div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25"> 75</a></span>};</div> +</div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div> +<div class="foldopen" id="foldopen00078" data-start="{" data-end="};"> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2"> 78</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2">NEORV32_UART_DATA_enum</a> {</div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195"> 79</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195">UART_DATA_RTX_LSB</a> = 0, </div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb"> 80</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb">UART_DATA_RTX_MSB</a> = 7, </div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef"> 82</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef">UART_DATA_RX_FIFO_SIZE_LSB</a> = 8, </div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225"> 83</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225">UART_DATA_RX_FIFO_SIZE_MSB</a> = 11, </div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e"> 85</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e">UART_DATA_TX_FIFO_SIZE_LSB</a> = 12, </div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529"> 86</a></span> <a class="code hl_enumvalue" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529">UART_DATA_TX_FIFO_SIZE_MSB</a> = 15, </div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span>};</div> +</div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__uart_8h.html#abef6415b0391dc055713404312196682">neorv32_uart_available</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx);</div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__uart_8h.html#af85fb929c912d3edef3d86ffa833982a">neorv32_uart_get_rx_fifo_depth</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx);</div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__uart_8h.html#a031e3e27c8783c299623468020a22b0e">neorv32_uart_get_tx_fifo_depth</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx);</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__uart_8h.html#a9cdec36f2723c5373664022d1b68b841">neorv32_uart_setup</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, uint32_t baudrate, uint32_t irq_mask);</div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__uart_8h.html#afa0533e81d53057c36f4997a2dbbe2bc">neorv32_uart_enable</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx);</div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__uart_8h.html#ae18804ccd29ec2fd1cc06e9ce985b704">neorv32_uart_disable</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx);</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__uart_8h.html#a734b610f4cd1b474d7763f9700a715ec">neorv32_uart_rtscts_enable</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx);</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__uart_8h.html#a7b2f924ef4554b1fa90433c38d97558d">neorv32_uart_rtscts_disable</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx);</div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__uart_8h.html#a9bc7bb94a50b74e1145b78eec6094129">neorv32_uart_putc</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, <span class="keywordtype">char</span> c);</div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__uart_8h.html#afe0de59c14faff1e0c890d5465be25f0">neorv32_uart_rx_clear</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx);</div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__uart_8h.html#a27971954262a2fd1f21d3bf1ba27e87c">neorv32_uart_tx_clear</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx);</div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__uart_8h.html#aa7bef48a58e044c246b8c4ad32864502">neorv32_uart_tx_busy</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx);</div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="keywordtype">char</span> <a class="code hl_function" href="neorv32__uart_8h.html#a2efd432f63b8d36d44263d0b1f39a6dc">neorv32_uart_getc</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx);</div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__uart_8h.html#adedb0e07efb232717534017167a5be98">neorv32_uart_char_received</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx);</div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="keywordtype">char</span> <a class="code hl_function" href="neorv32__uart_8h.html#aa490df3a9bb2aa3215fa6fad34ffe7d1">neorv32_uart_char_received_get</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx);</div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__uart_8h.html#a45a07d5e71677162baaa1025759c67a2">neorv32_uart_puts</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, <span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__uart_8h.html#a8714cdb1c04d94bec322c6215ea10238">neorv32_uart_vprintf</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, va_list args);</div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__uart_8h.html#ab8c1f9f451def9126ab2749d7bbe50d9">neorv32_uart_printf</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);</div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__uart_8h.html#ac429964878bd6deab61d9ed8659bca75">neorv32_uart_scan</a>(<a class="code hl_struct" href="structneorv32__uart__t.html">neorv32_uart_t</a> *UARTx, <span class="keywordtype">char</span> *buffer, <span class="keywordtype">int</span> max_size, <span class="keywordtype">int</span> echo);</div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="preprocessor">#define neorv32_uart0_available() neorv32_uart_available(NEORV32_UART0)</span></div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="preprocessor">#define neorv32_uart0_get_rx_fifo_depth() neorv32_uart_get_rx_fifo_depth(NEORV32_UART0)</span></div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="preprocessor">#define neorv32_uart0_get_tx_fifo_depth() neorv32_uart_get_tx_fifo_depth(NEORV32_UART0)</span></div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="preprocessor">#define neorv32_uart0_setup(baudrate, irq_mask) neorv32_uart_setup(NEORV32_UART0, baudrate, irq_mask)</span></div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="preprocessor">#define neorv32_uart0_disable() neorv32_uart_disable(NEORV32_UART0)</span></div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="preprocessor">#define neorv32_uart0_enable() neorv32_uart_enable(NEORV32_UART0)</span></div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="preprocessor">#define neorv32_uart0_rtscts_disable() neorv32_uart_rtscts_disable(NEORV32_UART0)</span></div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="preprocessor">#define neorv32_uart0_rtscts_enable() neorv32_uart_rtscts_enable(NEORV32_UART0)</span></div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span><span class="preprocessor">#define neorv32_uart0_putc(c) neorv32_uart_putc(NEORV32_UART0, c)</span></div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span><span class="preprocessor">#define neorv32_uart0_rx_clear() neorv32_uart_rx_clear(NEORV32_UART0)</span></div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="preprocessor">#define neorv32_uart0_tx_clear() neorv32_uart_tx_clear(NEORV32_UART0)</span></div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="preprocessor">#define neorv32_uart0_tx_busy() neorv32_uart_tx_busy(NEORV32_UART0)</span></div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="preprocessor">#define neorv32_uart0_getc() neorv32_uart_getc(NEORV32_UART0)</span></div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="preprocessor">#define neorv32_uart0_char_received() neorv32_uart_char_received(NEORV32_UART0)</span></div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="preprocessor">#define neorv32_uart0_char_received_get() neorv32_uart_char_received_get(NEORV32_UART0)</span></div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="preprocessor">#define neorv32_uart0_puts(s) neorv32_uart_puts(NEORV32_UART0, s)</span></div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span><span class="preprocessor">#define neorv32_uart0_printf(...) neorv32_uart_printf(NEORV32_UART0, __VA_ARGS__)</span></div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="preprocessor">#define neorv32_uart0_scan(buffer, max_size, echo) neorv32_uart_scan(NEORV32_UART0, buffer, max_size, echo)</span></div> +<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div> +<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="preprocessor">#define neorv32_uart1_available() neorv32_uart_available(NEORV32_UART1)</span></div> +<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="preprocessor">#define neorv32_uart1_get_rx_fifo_depth() neorv32_uart_get_rx_fifo_depth(NEORV32_UART1)</span></div> +<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="preprocessor">#define neorv32_uart1_get_tx_fifo_depth() neorv32_uart_get_tx_fifo_depth(NEORV32_UART1)</span></div> +<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="preprocessor">#define neorv32_uart1_setup(baudrate, irq_mask) neorv32_uart_setup(NEORV32_UART1, baudrate, irq_mask)</span></div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="preprocessor">#define neorv32_uart1_disable() neorv32_uart_disable(NEORV32_UART1)</span></div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="preprocessor">#define neorv32_uart1_enable() neorv32_uart_enable(NEORV32_UART1)</span></div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="preprocessor">#define neorv32_uart1_rtscts_disable() neorv32_uart_rtscts_disable(NEORV32_UART1)</span></div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="preprocessor">#define neorv32_uart1_rtscts_enable() neorv32_uart_rtscts_enable(NEORV32_UART1)</span></div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="preprocessor">#define neorv32_uart1_putc(c) neorv32_uart_putc(NEORV32_UART1, c)</span></div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="preprocessor">#define neorv32_uart1_rx_clear() neorv32_uart_rx_clear(NEORV32_UART1)</span></div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="preprocessor">#define neorv32_uart1_tx_clear() neorv32_uart_tx_clear(NEORV32_UART1)</span></div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="preprocessor">#define neorv32_uart1_tx_busy() neorv32_uart_tx_busy(NEORV32_UART1)</span></div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="preprocessor">#define neorv32_uart1_getc() neorv32_uart_getc(NEORV32_UART1)</span></div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="preprocessor">#define neorv32_uart1_char_received() neorv32_uart_char_received(NEORV32_UART1)</span></div> +<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="preprocessor">#define neorv32_uart1_char_received_get() neorv32_uart_char_received_get(NEORV32_UART1)</span></div> +<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="preprocessor">#define neorv32_uart1_puts(s) neorv32_uart_puts(NEORV32_UART1, s)</span></div> +<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="preprocessor">#define neorv32_uart1_printf(...) neorv32_uart_printf(NEORV32_UART1, __VA_ARGS__)</span></div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="preprocessor">#define neorv32_uart1_scan(buffer, max_size, echo) neorv32_uart_scan(NEORV32_UART1, buffer, max_size, echo)</span></div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_uart_h</span></div> +<div class="ttc" id="aneorv32__uart_8h_html_a031e3e27c8783c299623468020a22b0e"><div class="ttname"><a href="neorv32__uart_8h.html#a031e3e27c8783c299623468020a22b0e">neorv32_uart_get_tx_fifo_depth</a></div><div class="ttdeci">int neorv32_uart_get_tx_fifo_depth(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:147</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_a27971954262a2fd1f21d3bf1ba27e87c"><div class="ttname"><a href="neorv32__uart_8h.html#a27971954262a2fd1f21d3bf1ba27e87c">neorv32_uart_tx_clear</a></div><div class="ttdeci">void neorv32_uart_tx_clear(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:228</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_a2efd432f63b8d36d44263d0b1f39a6dc"><div class="ttname"><a href="neorv32__uart_8h.html#a2efd432f63b8d36d44263d0b1f39a6dc">neorv32_uart_getc</a></div><div class="ttdeci">char neorv32_uart_getc(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:259</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_a45a07d5e71677162baaa1025759c67a2"><div class="ttname"><a href="neorv32__uart_8h.html#a45a07d5e71677162baaa1025759c67a2">neorv32_uart_puts</a></div><div class="ttdeci">void neorv32_uart_puts(neorv32_uart_t *UARTx, const char *s)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:312</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_a734b610f4cd1b474d7763f9700a715ec"><div class="ttname"><a href="neorv32__uart_8h.html#a734b610f4cd1b474d7763f9700a715ec">neorv32_uart_rtscts_enable</a></div><div class="ttdeci">void neorv32_uart_rtscts_enable(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:181</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_a7b2f924ef4554b1fa90433c38d97558d"><div class="ttname"><a href="neorv32__uart_8h.html#a7b2f924ef4554b1fa90433c38d97558d">neorv32_uart_rtscts_disable</a></div><div class="ttdeci">void neorv32_uart_rtscts_disable(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:192</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_a8714cdb1c04d94bec322c6215ea10238"><div class="ttname"><a href="neorv32__uart_8h.html#a8714cdb1c04d94bec322c6215ea10238">neorv32_uart_vprintf</a></div><div class="ttdeci">void neorv32_uart_vprintf(neorv32_uart_t *UARTx, const char *format, va_list args)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:334</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_a9bc7bb94a50b74e1145b78eec6094129"><div class="ttname"><a href="neorv32__uart_8h.html#a9bc7bb94a50b74e1145b78eec6094129">neorv32_uart_putc</a></div><div class="ttdeci">void neorv32_uart_putc(neorv32_uart_t *UARTx, char c)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:204</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_a9cdec36f2723c5373664022d1b68b841"><div class="ttname"><a href="neorv32__uart_8h.html#a9cdec36f2723c5373664022d1b68b841">neorv32_uart_setup</a></div><div class="ttdeci">void neorv32_uart_setup(neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:74</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_aa490df3a9bb2aa3215fa6fad34ffe7d1"><div class="ttname"><a href="neorv32__uart_8h.html#aa490df3a9bb2aa3215fa6fad34ffe7d1">neorv32_uart_char_received_get</a></div><div class="ttdeci">char neorv32_uart_char_received_get(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:298</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_aa7bef48a58e044c246b8c4ad32864502"><div class="ttname"><a href="neorv32__uart_8h.html#aa7bef48a58e044c246b8c4ad32864502">neorv32_uart_tx_busy</a></div><div class="ttdeci">int neorv32_uart_tx_busy(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:240</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ab8c1f9f451def9126ab2749d7bbe50d9"><div class="ttname"><a href="neorv32__uart_8h.html#ab8c1f9f451def9126ab2749d7bbe50d9">neorv32_uart_printf</a></div><div class="ttdeci">void neorv32_uart_printf(neorv32_uart_t *UARTx, const char *format,...)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:409</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_abef6415b0391dc055713404312196682"><div class="ttname"><a href="neorv32__uart_8h.html#abef6415b0391dc055713404312196682">neorv32_uart_available</a></div><div class="ttdeci">int neorv32_uart_available(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:53</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ac429964878bd6deab61d9ed8659bca75"><div class="ttname"><a href="neorv32__uart_8h.html#ac429964878bd6deab61d9ed8659bca75">neorv32_uart_scan</a></div><div class="ttdeci">int neorv32_uart_scan(neorv32_uart_t *UARTx, char *buffer, int max_size, int echo)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:429</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afc"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afc">NEORV32_UART_CTRL_enum</a></div><div class="ttdeci">NEORV32_UART_CTRL_enum</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:40</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff">UART_CTRL_BAUD8</a></div><div class="ttdeci">@ UART_CTRL_BAUD8</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:55</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25">UART_CTRL_TX_BUSY</a></div><div class="ttdeci">@ UART_CTRL_TX_BUSY</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:74</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c">UART_CTRL_IRQ_TX_EMPTY</a></div><div class="ttdeci">@ UART_CTRL_IRQ_TX_EMPTY</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:68</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183">UART_CTRL_PRSC0</a></div><div class="ttdeci">@ UART_CTRL_PRSC0</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:44</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439">UART_CTRL_BAUD1</a></div><div class="ttdeci">@ UART_CTRL_BAUD1</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:48</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff">UART_CTRL_RX_NEMPTY</a></div><div class="ttdeci">@ UART_CTRL_RX_NEMPTY</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:58</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6">UART_CTRL_BAUD2</a></div><div class="ttdeci">@ UART_CTRL_BAUD2</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:49</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411">UART_CTRL_TX_FULL</a></div><div class="ttdeci">@ UART_CTRL_TX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:63</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2">UART_CTRL_EN</a></div><div class="ttdeci">@ UART_CTRL_EN</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:41</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247">UART_CTRL_RX_HALF</a></div><div class="ttdeci">@ UART_CTRL_RX_HALF</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:59</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431">UART_CTRL_TX_CLR</a></div><div class="ttdeci">@ UART_CTRL_TX_CLR</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:72</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1">UART_CTRL_SIM_MODE</a></div><div class="ttdeci">@ UART_CTRL_SIM_MODE</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:42</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166">UART_CTRL_RX_FULL</a></div><div class="ttdeci">@ UART_CTRL_RX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:60</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851">UART_CTRL_IRQ_RX_NEMPTY</a></div><div class="ttdeci">@ UART_CTRL_IRQ_RX_NEMPTY</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:65</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276">UART_CTRL_BAUD3</a></div><div class="ttdeci">@ UART_CTRL_BAUD3</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:50</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9">UART_CTRL_TX_NHALF</a></div><div class="ttdeci">@ UART_CTRL_TX_NHALF</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:62</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833">UART_CTRL_BAUD5</a></div><div class="ttdeci">@ UART_CTRL_BAUD5</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:52</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e">UART_CTRL_BAUD9</a></div><div class="ttdeci">@ UART_CTRL_BAUD9</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:56</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1">UART_CTRL_IRQ_TX_NHALF</a></div><div class="ttdeci">@ UART_CTRL_IRQ_TX_NHALF</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:69</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632">UART_CTRL_RX_OVER</a></div><div class="ttdeci">@ UART_CTRL_RX_OVER</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:73</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424">UART_CTRL_BAUD4</a></div><div class="ttdeci">@ UART_CTRL_BAUD4</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:51</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70">UART_CTRL_PRSC2</a></div><div class="ttdeci">@ UART_CTRL_PRSC2</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:46</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63">UART_CTRL_BAUD6</a></div><div class="ttdeci">@ UART_CTRL_BAUD6</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:53</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e">UART_CTRL_BAUD7</a></div><div class="ttdeci">@ UART_CTRL_BAUD7</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:54</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2">UART_CTRL_PRSC1</a></div><div class="ttdeci">@ UART_CTRL_PRSC1</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:45</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175">UART_CTRL_IRQ_RX_HALF</a></div><div class="ttdeci">@ UART_CTRL_IRQ_RX_HALF</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:66</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46">UART_CTRL_TX_EMPTY</a></div><div class="ttdeci">@ UART_CTRL_TX_EMPTY</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:61</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c">UART_CTRL_HWFC_EN</a></div><div class="ttdeci">@ UART_CTRL_HWFC_EN</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:43</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5">UART_CTRL_BAUD0</a></div><div class="ttdeci">@ UART_CTRL_BAUD0</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:47</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a">UART_CTRL_IRQ_RX_FULL</a></div><div class="ttdeci">@ UART_CTRL_IRQ_RX_FULL</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:67</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33"><div class="ttname"><a href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33">UART_CTRL_RX_CLR</a></div><div class="ttdeci">@ UART_CTRL_RX_CLR</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:71</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_adcf35350a9ea18a59c32c35f528643f2"><div class="ttname"><a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2">NEORV32_UART_DATA_enum</a></div><div class="ttdeci">NEORV32_UART_DATA_enum</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:78</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb"><div class="ttname"><a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb">UART_DATA_RTX_MSB</a></div><div class="ttdeci">@ UART_DATA_RTX_MSB</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:80</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef"><div class="ttname"><a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef">UART_DATA_RX_FIFO_SIZE_LSB</a></div><div class="ttdeci">@ UART_DATA_RX_FIFO_SIZE_LSB</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:82</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e"><div class="ttname"><a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e">UART_DATA_TX_FIFO_SIZE_LSB</a></div><div class="ttdeci">@ UART_DATA_TX_FIFO_SIZE_LSB</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:85</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225"><div class="ttname"><a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225">UART_DATA_RX_FIFO_SIZE_MSB</a></div><div class="ttdeci">@ UART_DATA_RX_FIFO_SIZE_MSB</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:83</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529"><div class="ttname"><a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529">UART_DATA_TX_FIFO_SIZE_MSB</a></div><div class="ttdeci">@ UART_DATA_TX_FIFO_SIZE_MSB</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:86</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195"><div class="ttname"><a href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195">UART_DATA_RTX_LSB</a></div><div class="ttdeci">@ UART_DATA_RTX_LSB</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:79</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_adedb0e07efb232717534017167a5be98"><div class="ttname"><a href="neorv32__uart_8h.html#adedb0e07efb232717534017167a5be98">neorv32_uart_char_received</a></div><div class="ttdeci">int neorv32_uart_char_received(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:278</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_ae18804ccd29ec2fd1cc06e9ce985b704"><div class="ttname"><a href="neorv32__uart_8h.html#ae18804ccd29ec2fd1cc06e9ce985b704">neorv32_uart_disable</a></div><div class="ttdeci">void neorv32_uart_disable(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:170</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_af85fb929c912d3edef3d86ffa833982a"><div class="ttname"><a href="neorv32__uart_8h.html#af85fb929c912d3edef3d86ffa833982a">neorv32_uart_get_rx_fifo_depth</a></div><div class="ttdeci">int neorv32_uart_get_rx_fifo_depth(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:133</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_afa0533e81d53057c36f4997a2dbbe2bc"><div class="ttname"><a href="neorv32__uart_8h.html#afa0533e81d53057c36f4997a2dbbe2bc">neorv32_uart_enable</a></div><div class="ttdeci">void neorv32_uart_enable(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:159</div></div> +<div class="ttc" id="aneorv32__uart_8h_html_afe0de59c14faff1e0c890d5465be25f0"><div class="ttname"><a href="neorv32__uart_8h.html#afe0de59c14faff1e0c890d5465be25f0">neorv32_uart_rx_clear</a></div><div class="ttdeci">void neorv32_uart_rx_clear(neorv32_uart_t *UARTx)</div><div class="ttdef"><b>Definition</b> neorv32_uart.c:217</div></div> +<div class="ttc" id="astructneorv32__uart__t_html"><div class="ttname"><a href="structneorv32__uart__t.html">neorv32_uart_t</a></div><div class="ttdef"><b>Definition</b> neorv32_uart.h:28</div></div> +<div class="ttc" id="astructneorv32__uart__t_html_a0a6227aeea38335d2b9a9da46b35451b"><div class="ttname"><a href="structneorv32__uart__t.html#a0a6227aeea38335d2b9a9da46b35451b">neorv32_uart_t::CTRL</a></div><div class="ttdeci">uint32_t CTRL</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:29</div></div> +<div class="ttc" id="astructneorv32__uart__t_html_a38eec82aae9ed522a0d2afb9a9560036"><div class="ttname"><a href="structneorv32__uart__t.html#a38eec82aae9ed522a0d2afb9a9560036">neorv32_uart_t::DATA</a></div><div class="ttdeci">uint32_t DATA</div><div class="ttdef"><b>Definition</b> neorv32_uart.h:30</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__wdt_8c.html b/sw/neorv32__wdt_8c.html new file mode 100644 index 0000000000..d9e315cb57 --- /dev/null +++ b/sw/neorv32__wdt_8c.html @@ -0,0 +1,260 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_wdt.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_wdt.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Direct Memory Access Controller (DMA) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a459a918c5a86c0167e8c748352d39827" id="r_a459a918c5a86c0167e8c748352d39827"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a459a918c5a86c0167e8c748352d39827">neorv32_wdt_available</a> (void)</td></tr> +<tr class="separator:a459a918c5a86c0167e8c748352d39827"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2aa72608191d34ef41c5f545988ff400" id="r_a2aa72608191d34ef41c5f545988ff400"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2aa72608191d34ef41c5f545988ff400">neorv32_wdt_setup</a> (uint32_t timeout, int lock, int debug_en, int sleep_en, int strict)</td></tr> +<tr class="separator:a2aa72608191d34ef41c5f545988ff400"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aba52520582392a671e2b717715a330b2" id="r_aba52520582392a671e2b717715a330b2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aba52520582392a671e2b717715a330b2">neorv32_wdt_disable</a> (void)</td></tr> +<tr class="separator:aba52520582392a671e2b717715a330b2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae4e86c42ed45eefdec43d9ece08b98a4" id="r_ae4e86c42ed45eefdec43d9ece08b98a4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae4e86c42ed45eefdec43d9ece08b98a4">neorv32_wdt_feed</a> (uint32_t password)</td></tr> +<tr class="separator:ae4e86c42ed45eefdec43d9ece08b98a4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a80fa8d178d18c9b02d32d93e815b532e" id="r_a80fa8d178d18c9b02d32d93e815b532e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a80fa8d178d18c9b02d32d93e815b532e">neorv32_wdt_get_cause</a> (void)</td></tr> +<tr class="separator:a80fa8d178d18c9b02d32d93e815b532e"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Direct Memory Access Controller (DMA) HW driver source file. </p> +<p>Watchdog Timer (WDT) HW driver source file.</p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the DMA controller was synthesized (IO_DMA_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a></dd></dl> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the WDT unit was synthesized (IO_WDT_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a459a918c5a86c0167e8c748352d39827" name="a459a918c5a86c0167e8c748352d39827"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a459a918c5a86c0167e8c748352d39827">&#9670;&#160;</a></span>neorv32_wdt_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_wdt_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if WDT unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if WDT was not synthesized, 1 if WDT is available. </dd></dl> + +</div> +</div> +<a id="aba52520582392a671e2b717715a330b2" name="aba52520582392a671e2b717715a330b2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aba52520582392a671e2b717715a330b2">&#9670;&#160;</a></span>neorv32_wdt_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_wdt_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable watchdog timer.</p> +<dl class="section return"><dt>Returns</dt><dd>Returns 0 if WDT is really deactivated, -1 otherwise. </dd></dl> + +</div> +</div> +<a id="ae4e86c42ed45eefdec43d9ece08b98a4" name="ae4e86c42ed45eefdec43d9ece08b98a4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae4e86c42ed45eefdec43d9ece08b98a4">&#9670;&#160;</a></span>neorv32_wdt_feed()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_wdt_feed </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>password</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Feed watchdog (reset timeout counter).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">password</td><td>Password for WDT reset. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a80fa8d178d18c9b02d32d93e815b532e" name="a80fa8d178d18c9b02d32d93e815b532e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a80fa8d178d18c9b02d32d93e815b532e">&#9670;&#160;</a></span>neorv32_wdt_get_cause()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_wdt_get_cause </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get cause of last system reset.</p> +<dl class="section return"><dt>Returns</dt><dd>Cause of last reset (<a class="el" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049">NEORV32_WDT_RCAUSE_enum</a>). </dd></dl> + +</div> +</div> +<a id="a2aa72608191d34ef41c5f545988ff400" name="a2aa72608191d34ef41c5f545988ff400"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2aa72608191d34ef41c5f545988ff400">&#9670;&#160;</a></span>neorv32_wdt_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_wdt_setup </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>timeout</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>lock</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>debug_en</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>sleep_en</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>strict</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Configure and enable watchdog timer. The WDT control register bits are listed in <a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23e">NEORV32_WDT_CTRL_enum</a>.</p> +<dl class="section warning"><dt>Warning</dt><dd>Once the lock bit is set it can only be removed by a hardware reset!</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>24-bit timeout value. A WDT IRQ is triggered when the internal counter reaches 'timeout/2'. A system hardware reset is triggered when the internal counter reaches 'timeout'. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">lock</td><td>Control register will be locked when 1 (until next reset). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">debug_en</td><td>Allow watchdog to continue operation even when CPU is in debug mode. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">sleep_en</td><td>Allow watchdog to continue operation even when CPU is in sleep mode. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">strict</td><td>Force hardware reset if reset password is incorrect or if trying to alter a locked configuration. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__wdt_8h.html b/sw/neorv32__wdt_8h.html new file mode 100644 index 0000000000..7c905d17f5 --- /dev/null +++ b/sw/neorv32__wdt_8h.html @@ -0,0 +1,392 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_wdt.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> &#124; +<a href="#define-members">Macros</a> &#124; +<a href="#enum-members">Enumerations</a> </div> + <div class="headertitle"><div class="title">neorv32_wdt.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Watchdog Timer (WDT) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__wdt_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__wdt__t.html">neorv32_wdt_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr class="memitem:af2a2bd9c74bdba1b46bd92025bd00ab6" id="r_af2a2bd9c74bdba1b46bd92025bd00ab6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af2a2bd9c74bdba1b46bd92025bd00ab6">WDT_PASSWORD</a>&#160;&#160;&#160;(0x709D1AB3)</td></tr> +<tr class="separator:af2a2bd9c74bdba1b46bd92025bd00ab6"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a> +Enumerations</h2></td></tr> +<tr class="memitem:a70098b4ee893774864536fb4100ff049" id="r_a70098b4ee893774864536fb4100ff049"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a70098b4ee893774864536fb4100ff049">NEORV32_WDT_RCAUSE_enum</a> { <a class="el" href="#a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0">WDT_RCAUSE_EXT</a> = 0b00 +, <a class="el" href="#a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e">WDT_RCAUSE_OCD</a> = 0b01 +, <a class="el" href="#a70098b4ee893774864536fb4100ff049a7273d24bb65d3f40c1d289ce5cbc1a40">WDT_RCAUSE_TMO</a> = 0b10 +, <a class="el" href="#a70098b4ee893774864536fb4100ff049a10999a782ffc2c26f601615f76121376">WDT_RCAUSE_ACC</a> = 0b11 + }</td></tr> +<tr class="separator:a70098b4ee893774864536fb4100ff049"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:a459a918c5a86c0167e8c748352d39827" id="r_a459a918c5a86c0167e8c748352d39827"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a459a918c5a86c0167e8c748352d39827">neorv32_wdt_available</a> (void)</td></tr> +<tr class="separator:a459a918c5a86c0167e8c748352d39827"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2aa72608191d34ef41c5f545988ff400" id="r_a2aa72608191d34ef41c5f545988ff400"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2aa72608191d34ef41c5f545988ff400">neorv32_wdt_setup</a> (uint32_t timeout, int lock, int debug_en, int sleep_en, int strict)</td></tr> +<tr class="separator:a2aa72608191d34ef41c5f545988ff400"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aba52520582392a671e2b717715a330b2" id="r_aba52520582392a671e2b717715a330b2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aba52520582392a671e2b717715a330b2">neorv32_wdt_disable</a> (void)</td></tr> +<tr class="separator:aba52520582392a671e2b717715a330b2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae4e86c42ed45eefdec43d9ece08b98a4" id="r_ae4e86c42ed45eefdec43d9ece08b98a4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae4e86c42ed45eefdec43d9ece08b98a4">neorv32_wdt_feed</a> (uint32_t password)</td></tr> +<tr class="separator:ae4e86c42ed45eefdec43d9ece08b98a4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a80fa8d178d18c9b02d32d93e815b532e" id="r_a80fa8d178d18c9b02d32d93e815b532e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a80fa8d178d18c9b02d32d93e815b532e">neorv32_wdt_get_cause</a> (void)</td></tr> +<tr class="separator:a80fa8d178d18c9b02d32d93e815b532e"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: Watchdog Timer (WDT)</h2></td></tr> +<tr class="memitem:a78615b08cd799063011606d084fef46c" id="r_a78615b08cd799063011606d084fef46c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a78615b08cd799063011606d084fef46c">NEORV32_WDT</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__wdt__t.html">neorv32_wdt_t</a>*) (<a class="el" href="neorv32_8h.html#a3012986cdd5748ee96bcc74cd7108dea">NEORV32_WDT_BASE</a>))</td></tr> +<tr class="separator:a78615b08cd799063011606d084fef46c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0a4cb24fd818277c5bb9b10ff519f23e" id="r_a0a4cb24fd818277c5bb9b10ff519f23e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0a4cb24fd818277c5bb9b10ff519f23e">NEORV32_WDT_CTRL_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f">WDT_CTRL_EN</a> = 0 +, <a class="el" href="#a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3">WDT_CTRL_LOCK</a> = 1 +, <a class="el" href="#a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9">WDT_CTRL_DBEN</a> = 2 +, <a class="el" href="#a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148">WDT_CTRL_SEN</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac">WDT_CTRL_STRICT</a> = 4 +, <a class="el" href="#a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779">WDT_CTRL_RCAUSE_LO</a> = 5 +, <a class="el" href="#a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd">WDT_CTRL_RCAUSE_HI</a> = 6 +, <a class="el" href="#a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609">WDT_CTRL_TIMEOUT_LSB</a> = 8 +, <br /> +&#160;&#160;<a class="el" href="#a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7">WDT_CTRL_TIMEOUT_MSB</a> = 31 +<br /> + }</td></tr> +<tr class="separator:a0a4cb24fd818277c5bb9b10ff519f23e"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Watchdog Timer (WDT) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the WDT unit was synthesized (IO_WDT_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a78615b08cd799063011606d084fef46c" name="a78615b08cd799063011606d084fef46c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a78615b08cd799063011606d084fef46c">&#9670;&#160;</a></span>NEORV32_WDT</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_WDT&#160;&#160;&#160;((<a class="el" href="structneorv32__wdt__t.html">neorv32_wdt_t</a>*) (<a class="el" href="neorv32_8h.html#a3012986cdd5748ee96bcc74cd7108dea">NEORV32_WDT_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>WDT module hardware access (<a class="el" href="structneorv32__wdt__t.html">neorv32_wdt_t</a>) </p> + +</div> +</div> +<a id="af2a2bd9c74bdba1b46bd92025bd00ab6" name="af2a2bd9c74bdba1b46bd92025bd00ab6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af2a2bd9c74bdba1b46bd92025bd00ab6">&#9670;&#160;</a></span>WDT_PASSWORD</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define WDT_PASSWORD&#160;&#160;&#160;(0x709D1AB3)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset Password </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="a0a4cb24fd818277c5bb9b10ff519f23e" name="a0a4cb24fd818277c5bb9b10ff519f23e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0a4cb24fd818277c5bb9b10ff519f23e">&#9670;&#160;</a></span>NEORV32_WDT_CTRL_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a0a4cb24fd818277c5bb9b10ff519f23e">NEORV32_WDT_CTRL_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>WDT control register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f" name="a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f"></a>WDT_CTRL_EN&#160;</td><td class="fielddoc"><p>WDT control register(0) (r/w): Watchdog enable </p> +</td></tr> +<tr><td class="fieldname"><a id="a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3" name="a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3"></a>WDT_CTRL_LOCK&#160;</td><td class="fielddoc"><p>WDT control register(1) (r/w): Lock write access to control register, clears on reset only </p> +</td></tr> +<tr><td class="fieldname"><a id="a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9" name="a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9"></a>WDT_CTRL_DBEN&#160;</td><td class="fielddoc"><p>WDT control register(2) (r/w): Allow WDT to continue operation even when CPU is in debug mode </p> +</td></tr> +<tr><td class="fieldname"><a id="a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148" name="a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148"></a>WDT_CTRL_SEN&#160;</td><td class="fielddoc"><p>WDT control register(3) (r/w): Allow WDT to continue operation even when CPU is in sleep mode </p> +</td></tr> +<tr><td class="fieldname"><a id="a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac" name="a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac"></a>WDT_CTRL_STRICT&#160;</td><td class="fielddoc"><p>WDT control register(4) (r/w): Force hardware reset if reset password is incorrect or if write attempt to locked CTRL register </p> +</td></tr> +<tr><td class="fieldname"><a id="a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779" name="a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779"></a>WDT_CTRL_RCAUSE_LO&#160;</td><td class="fielddoc"><p>WDT control register(5) (r/-): Cause of last system reset - low </p> +</td></tr> +<tr><td class="fieldname"><a id="a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd" name="a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd"></a>WDT_CTRL_RCAUSE_HI&#160;</td><td class="fielddoc"><p>WDT control register(5) (r/-): Cause of last system reset - high </p> +</td></tr> +<tr><td class="fieldname"><a id="a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609" name="a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609"></a>WDT_CTRL_TIMEOUT_LSB&#160;</td><td class="fielddoc"><p>WDT control register(8) (r/w): Timeout value, LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7" name="a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7"></a>WDT_CTRL_TIMEOUT_MSB&#160;</td><td class="fielddoc"><p>WDT control register(31) (r/w): Timeout value, MSB </p> +</td></tr> +</table> + +</div> +</div> +<a id="a70098b4ee893774864536fb4100ff049" name="a70098b4ee893774864536fb4100ff049"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a70098b4ee893774864536fb4100ff049">&#9670;&#160;</a></span>NEORV32_WDT_RCAUSE_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a70098b4ee893774864536fb4100ff049">NEORV32_WDT_RCAUSE_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Reset Cause </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0" name="a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0"></a>WDT_RCAUSE_EXT&#160;</td><td class="fielddoc"><p>Reset caused by external signal/pin </p> +</td></tr> +<tr><td class="fieldname"><a id="a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e" name="a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e"></a>WDT_RCAUSE_OCD&#160;</td><td class="fielddoc"><p>Reset caused by on-chip debugger </p> +</td></tr> +<tr><td class="fieldname"><a id="a70098b4ee893774864536fb4100ff049a7273d24bb65d3f40c1d289ce5cbc1a40" name="a70098b4ee893774864536fb4100ff049a7273d24bb65d3f40c1d289ce5cbc1a40"></a>WDT_RCAUSE_TMO&#160;</td><td class="fielddoc"><p>Reset caused by watchdog timer timeout </p> +</td></tr> +<tr><td class="fieldname"><a id="a70098b4ee893774864536fb4100ff049a10999a782ffc2c26f601615f76121376" name="a70098b4ee893774864536fb4100ff049a10999a782ffc2c26f601615f76121376"></a>WDT_RCAUSE_ACC&#160;</td><td class="fielddoc"><p>Reset caused by watchdog timer invalid access </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a459a918c5a86c0167e8c748352d39827" name="a459a918c5a86c0167e8c748352d39827"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a459a918c5a86c0167e8c748352d39827">&#9670;&#160;</a></span>neorv32_wdt_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_wdt_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if WDT unit was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if WDT was not synthesized, 1 if WDT is available. </dd></dl> + +</div> +</div> +<a id="aba52520582392a671e2b717715a330b2" name="aba52520582392a671e2b717715a330b2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aba52520582392a671e2b717715a330b2">&#9670;&#160;</a></span>neorv32_wdt_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_wdt_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable watchdog timer.</p> +<dl class="section return"><dt>Returns</dt><dd>Returns 0 if WDT is really deactivated, -1 otherwise. </dd></dl> + +</div> +</div> +<a id="ae4e86c42ed45eefdec43d9ece08b98a4" name="ae4e86c42ed45eefdec43d9ece08b98a4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae4e86c42ed45eefdec43d9ece08b98a4">&#9670;&#160;</a></span>neorv32_wdt_feed()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_wdt_feed </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>password</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Feed watchdog (reset timeout counter).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">password</td><td>Password for WDT reset. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a80fa8d178d18c9b02d32d93e815b532e" name="a80fa8d178d18c9b02d32d93e815b532e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a80fa8d178d18c9b02d32d93e815b532e">&#9670;&#160;</a></span>neorv32_wdt_get_cause()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_wdt_get_cause </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get cause of last system reset.</p> +<dl class="section return"><dt>Returns</dt><dd>Cause of last reset (<a class="el" href="#a70098b4ee893774864536fb4100ff049">NEORV32_WDT_RCAUSE_enum</a>). </dd></dl> + +</div> +</div> +<a id="a2aa72608191d34ef41c5f545988ff400" name="a2aa72608191d34ef41c5f545988ff400"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2aa72608191d34ef41c5f545988ff400">&#9670;&#160;</a></span>neorv32_wdt_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_wdt_setup </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>timeout</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>lock</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>debug_en</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>sleep_en</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>strict</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Configure and enable watchdog timer. The WDT control register bits are listed in <a class="el" href="#a0a4cb24fd818277c5bb9b10ff519f23e">NEORV32_WDT_CTRL_enum</a>.</p> +<dl class="section warning"><dt>Warning</dt><dd>Once the lock bit is set it can only be removed by a hardware reset!</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>24-bit timeout value. A WDT IRQ is triggered when the internal counter reaches 'timeout/2'. A system hardware reset is triggered when the internal counter reaches 'timeout'. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">lock</td><td>Control register will be locked when 1 (until next reset). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">debug_en</td><td>Allow watchdog to continue operation even when CPU is in debug mode. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">sleep_en</td><td>Allow watchdog to continue operation even when CPU is in sleep mode. </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">strict</td><td>Force hardware reset if reset password is incorrect or if trying to alter a locked configuration. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__wdt_8h_source.html b/sw/neorv32__wdt_8h_source.html new file mode 100644 index 0000000000..a3f4268dfb --- /dev/null +++ b/sw/neorv32__wdt_8h_source.html @@ -0,0 +1,185 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_wdt.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_wdt.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__wdt_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_wdt_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_wdt_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__wdt__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__wdt__t.html#a6ae41e28d08b0f06118c499f52b56f41"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__wdt__t.html#a6ae41e28d08b0f06118c499f52b56f41">CTRL</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__wdt__t.html#a0a273e8ca2bd92547bf7727ec65a9449"> 31</a></span> uint32_t <a class="code hl_variable" href="structneorv32__wdt__t.html#a0a273e8ca2bd92547bf7727ec65a9449">RESET</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>} <a class="code hl_struct" href="structneorv32__wdt__t.html">neorv32_wdt_t</a>;</div> +</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a78615b08cd799063011606d084fef46c"> 35</a></span><span class="preprocessor">#define NEORV32_WDT ((neorv32_wdt_t*) (NEORV32_WDT_BASE))</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="foldopen" id="foldopen00038" data-start="{" data-end="};"> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23e"> 38</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23e">NEORV32_WDT_CTRL_enum</a> {</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f"> 39</a></span> <a class="code hl_enumvalue" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f">WDT_CTRL_EN</a> = 0, </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3"> 40</a></span> <a class="code hl_enumvalue" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3">WDT_CTRL_LOCK</a> = 1, </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9">WDT_CTRL_DBEN</a> = 2, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148">WDT_CTRL_SEN</a> = 3, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac">WDT_CTRL_STRICT</a> = 4, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779"> 44</a></span> <a class="code hl_enumvalue" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779">WDT_CTRL_RCAUSE_LO</a> = 5, </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd"> 45</a></span> <a class="code hl_enumvalue" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd">WDT_CTRL_RCAUSE_HI</a> = 6, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609">WDT_CTRL_TIMEOUT_LSB</a> = 8, </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <a class="code hl_enumvalue" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7">WDT_CTRL_TIMEOUT_MSB</a> = 31 </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7"> 49</a></span>};</div> +</div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#af2a2bd9c74bdba1b46bd92025bd00ab6"> 56</a></span><span class="preprocessor">#define WDT_PASSWORD (0x709D1AB3)</span></div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00062" data-start="{" data-end="};"> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049"> 62</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049">NEORV32_WDT_RCAUSE_enum</a> {</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0"> 63</a></span> <a class="code hl_enumvalue" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0">WDT_RCAUSE_EXT</a> = 0b00, </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e"> 64</a></span> <a class="code hl_enumvalue" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e">WDT_RCAUSE_OCD</a> = 0b01, </div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a7273d24bb65d3f40c1d289ce5cbc1a40"> 65</a></span> <a class="code hl_enumvalue" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a7273d24bb65d3f40c1d289ce5cbc1a40">WDT_RCAUSE_TMO</a> = 0b10, </div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_enumvalue" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a10999a782ffc2c26f601615f76121376">WDT_RCAUSE_ACC</a> = 0b11 </div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a10999a782ffc2c26f601615f76121376"> 67</a></span>};</div> +</div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__wdt_8h.html#a459a918c5a86c0167e8c748352d39827">neorv32_wdt_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__wdt_8h.html#a2aa72608191d34ef41c5f545988ff400">neorv32_wdt_setup</a>(uint32_t timeout, <span class="keywordtype">int</span> lock, <span class="keywordtype">int</span> debug_en, <span class="keywordtype">int</span> sleep_en, <span class="keywordtype">int</span> strict);</div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__wdt_8h.html#aba52520582392a671e2b717715a330b2">neorv32_wdt_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__wdt_8h.html#ae4e86c42ed45eefdec43d9ece08b98a4">neorv32_wdt_feed</a>(uint32_t password);</div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__wdt_8h.html#a80fa8d178d18c9b02d32d93e815b532e">neorv32_wdt_get_cause</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_wdt_h</span></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a0a4cb24fd818277c5bb9b10ff519f23e"><div class="ttname"><a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23e">NEORV32_WDT_CTRL_enum</a></div><div class="ttdeci">NEORV32_WDT_CTRL_enum</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:38</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f"><div class="ttname"><a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f">WDT_CTRL_EN</a></div><div class="ttdeci">@ WDT_CTRL_EN</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:39</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779"><div class="ttname"><a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779">WDT_CTRL_RCAUSE_LO</a></div><div class="ttdeci">@ WDT_CTRL_RCAUSE_LO</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:44</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7"><div class="ttname"><a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7">WDT_CTRL_TIMEOUT_MSB</a></div><div class="ttdeci">@ WDT_CTRL_TIMEOUT_MSB</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:48</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac"><div class="ttname"><a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac">WDT_CTRL_STRICT</a></div><div class="ttdeci">@ WDT_CTRL_STRICT</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:43</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609"><div class="ttname"><a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609">WDT_CTRL_TIMEOUT_LSB</a></div><div class="ttdeci">@ WDT_CTRL_TIMEOUT_LSB</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:47</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9"><div class="ttname"><a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9">WDT_CTRL_DBEN</a></div><div class="ttdeci">@ WDT_CTRL_DBEN</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:41</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd"><div class="ttname"><a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd">WDT_CTRL_RCAUSE_HI</a></div><div class="ttdeci">@ WDT_CTRL_RCAUSE_HI</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:45</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148"><div class="ttname"><a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148">WDT_CTRL_SEN</a></div><div class="ttdeci">@ WDT_CTRL_SEN</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:42</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3"><div class="ttname"><a href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3">WDT_CTRL_LOCK</a></div><div class="ttdeci">@ WDT_CTRL_LOCK</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:40</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a2aa72608191d34ef41c5f545988ff400"><div class="ttname"><a href="neorv32__wdt_8h.html#a2aa72608191d34ef41c5f545988ff400">neorv32_wdt_setup</a></div><div class="ttdeci">void neorv32_wdt_setup(uint32_t timeout, int lock, int debug_en, int sleep_en, int strict)</div><div class="ttdef"><b>Definition</b> neorv32_wdt.c:49</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a459a918c5a86c0167e8c748352d39827"><div class="ttname"><a href="neorv32__wdt_8h.html#a459a918c5a86c0167e8c748352d39827">neorv32_wdt_available</a></div><div class="ttdeci">int neorv32_wdt_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_wdt.c:26</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a70098b4ee893774864536fb4100ff049"><div class="ttname"><a href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049">NEORV32_WDT_RCAUSE_enum</a></div><div class="ttdeci">NEORV32_WDT_RCAUSE_enum</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:62</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a70098b4ee893774864536fb4100ff049a10999a782ffc2c26f601615f76121376"><div class="ttname"><a href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a10999a782ffc2c26f601615f76121376">WDT_RCAUSE_ACC</a></div><div class="ttdeci">@ WDT_RCAUSE_ACC</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:66</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a70098b4ee893774864536fb4100ff049a7273d24bb65d3f40c1d289ce5cbc1a40"><div class="ttname"><a href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a7273d24bb65d3f40c1d289ce5cbc1a40">WDT_RCAUSE_TMO</a></div><div class="ttdeci">@ WDT_RCAUSE_TMO</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:65</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e"><div class="ttname"><a href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e">WDT_RCAUSE_OCD</a></div><div class="ttdeci">@ WDT_RCAUSE_OCD</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:64</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0"><div class="ttname"><a href="neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0">WDT_RCAUSE_EXT</a></div><div class="ttdeci">@ WDT_RCAUSE_EXT</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:63</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_a80fa8d178d18c9b02d32d93e815b532e"><div class="ttname"><a href="neorv32__wdt_8h.html#a80fa8d178d18c9b02d32d93e815b532e">neorv32_wdt_get_cause</a></div><div class="ttdeci">int neorv32_wdt_get_cause(void)</div><div class="ttdef"><b>Definition</b> neorv32_wdt.c:106</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_aba52520582392a671e2b717715a330b2"><div class="ttname"><a href="neorv32__wdt_8h.html#aba52520582392a671e2b717715a330b2">neorv32_wdt_disable</a></div><div class="ttdeci">int neorv32_wdt_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_wdt.c:74</div></div> +<div class="ttc" id="aneorv32__wdt_8h_html_ae4e86c42ed45eefdec43d9ece08b98a4"><div class="ttname"><a href="neorv32__wdt_8h.html#ae4e86c42ed45eefdec43d9ece08b98a4">neorv32_wdt_feed</a></div><div class="ttdeci">void neorv32_wdt_feed(uint32_t password)</div><div class="ttdef"><b>Definition</b> neorv32_wdt.c:95</div></div> +<div class="ttc" id="astructneorv32__wdt__t_html"><div class="ttname"><a href="structneorv32__wdt__t.html">neorv32_wdt_t</a></div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:29</div></div> +<div class="ttc" id="astructneorv32__wdt__t_html_a0a273e8ca2bd92547bf7727ec65a9449"><div class="ttname"><a href="structneorv32__wdt__t.html#a0a273e8ca2bd92547bf7727ec65a9449">neorv32_wdt_t::RESET</a></div><div class="ttdeci">uint32_t RESET</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:31</div></div> +<div class="ttc" id="astructneorv32__wdt__t_html_a6ae41e28d08b0f06118c499f52b56f41"><div class="ttname"><a href="structneorv32__wdt__t.html#a6ae41e28d08b0f06118c499f52b56f41">neorv32_wdt_t::CTRL</a></div><div class="ttdeci">uint32_t CTRL</div><div class="ttdef"><b>Definition</b> neorv32_wdt.h:30</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__xip_8c.html b/sw/neorv32__xip_8c.html new file mode 100644 index 0000000000..31d895c98d --- /dev/null +++ b/sw/neorv32__xip_8c.html @@ -0,0 +1,312 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_xip.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> </div> + <div class="headertitle"><div class="title">neorv32_xip.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Execute in place module (XIP) HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:afe2e5682a26cafdb0585d2233bccc7c6" id="r_afe2e5682a26cafdb0585d2233bccc7c6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afe2e5682a26cafdb0585d2233bccc7c6">neorv32_xip_available</a> (void)</td></tr> +<tr class="separator:afe2e5682a26cafdb0585d2233bccc7c6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a549d68abdf5a3d7484abe6d5370bb999" id="r_a549d68abdf5a3d7484abe6d5370bb999"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a549d68abdf5a3d7484abe6d5370bb999">neorv32_xip_setup</a> (int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd)</td></tr> +<tr class="separator:a549d68abdf5a3d7484abe6d5370bb999"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0ab2c36c973030a811e6d7abe0afc393" id="r_a0ab2c36c973030a811e6d7abe0afc393"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0ab2c36c973030a811e6d7abe0afc393">neorv32_xip_start</a> (int abytes)</td></tr> +<tr class="separator:a0ab2c36c973030a811e6d7abe0afc393"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6aef2ea29451ba2aa55160da777a5115" id="r_a6aef2ea29451ba2aa55160da777a5115"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6aef2ea29451ba2aa55160da777a5115">neorv32_xip_highspeed_enable</a> (void)</td></tr> +<tr class="separator:a6aef2ea29451ba2aa55160da777a5115"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad74f2842ed2251e3ae5c19e06dced0c3" id="r_ad74f2842ed2251e3ae5c19e06dced0c3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad74f2842ed2251e3ae5c19e06dced0c3">neorv32_xip_highspeed_disable</a> (void)</td></tr> +<tr class="separator:ad74f2842ed2251e3ae5c19e06dced0c3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a88f728101e82939bf7f8b9ab5a904706" id="r_a88f728101e82939bf7f8b9ab5a904706"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a88f728101e82939bf7f8b9ab5a904706">neorv32_xip_get_clock_speed</a> (void)</td></tr> +<tr class="separator:a88f728101e82939bf7f8b9ab5a904706"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a92f1446a3bb7fe6dee5dbed33882b223" id="r_a92f1446a3bb7fe6dee5dbed33882b223"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a92f1446a3bb7fe6dee5dbed33882b223">neorv32_xip_spi_trans</a> (int nbytes, uint64_t *rtx_data)</td></tr> +<tr class="separator:a92f1446a3bb7fe6dee5dbed33882b223"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Execute in place module (XIP) HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the XIP module was synthesized (IO_XIP_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="afe2e5682a26cafdb0585d2233bccc7c6" name="afe2e5682a26cafdb0585d2233bccc7c6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afe2e5682a26cafdb0585d2233bccc7c6">&#9670;&#160;</a></span>neorv32_xip_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xip_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if XIP module was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if XIP was not synthesized, 1 if XIP is available. </dd></dl> + +</div> +</div> +<a id="a88f728101e82939bf7f8b9ab5a904706" name="a88f728101e82939bf7f8b9ab5a904706"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a88f728101e82939bf7f8b9ab5a904706">&#9670;&#160;</a></span>neorv32_xip_get_clock_speed()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_xip_get_clock_speed </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get configured clock speed in Hz.</p> +<dl class="section return"><dt>Returns</dt><dd>Actual configured XIP clock speed in Hz. </dd></dl> + +</div> +</div> +<a id="ad74f2842ed2251e3ae5c19e06dced0c3" name="ad74f2842ed2251e3ae5c19e06dced0c3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad74f2842ed2251e3ae5c19e06dced0c3">&#9670;&#160;</a></span>neorv32_xip_highspeed_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xip_highspeed_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable high-speed SPI mode. </p> + +</div> +</div> +<a id="a6aef2ea29451ba2aa55160da777a5115" name="a6aef2ea29451ba2aa55160da777a5115"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6aef2ea29451ba2aa55160da777a5115">&#9670;&#160;</a></span>neorv32_xip_highspeed_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xip_highspeed_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable high-speed SPI mode (running at half of the processor clock).</p> +<dl class="section note"><dt>Note</dt><dd>High-speed SPI mode ignores the programmed clock prescaler configuration. </dd></dl> + +</div> +</div> +<a id="a549d68abdf5a3d7484abe6d5370bb999" name="a549d68abdf5a3d7484abe6d5370bb999"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a549d68abdf5a3d7484abe6d5370bb999">&#9670;&#160;</a></span>neorv32_xip_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xip_setup </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>prsc</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cdiv</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cpol</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cpha</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>rd_cmd</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Configure XIP module: configure SPI/flash properties.</p> +<dl class="section warning"><dt>Warning</dt><dd>This will reset the XIP module overriding the CTRL register. </dd></dl> +<dl class="section note"><dt>Note</dt><dd>This function will also send 64 dummy clocks via the SPI port (with chip-select disabled).</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>SPI clock prescaler select (0..7). @prama[in] cdiv Clock divider (0..15). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">cpol</td><td>SPI clock polarity (0/1). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">cpha</td><td>SPI clock phase(0/1). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rd_cmd</td><td>SPI flash read byte command. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a92f1446a3bb7fe6dee5dbed33882b223" name="a92f1446a3bb7fe6dee5dbed33882b223"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a92f1446a3bb7fe6dee5dbed33882b223">&#9670;&#160;</a></span>neorv32_xip_spi_trans()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xip_spi_trans </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>nbytes</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint64_t *</td> <td class="paramname"><span class="paramname"><em>rtx_data</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Direct SPI access to the XIP flash.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function can only be used BEFORE the XIP-mode is activated! </dd></dl> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">nbytes</td><td>Number of bytes to transfer (1..8). </td></tr> + <tr><td class="paramdir">[in,out]</td><td class="paramname">rtx_data</td><td>Pointer to 64-bit TX/RX data (MSB-aligned for sending, LSB-aligned for receiving (only 32-bit)). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if valid transfer, 1 if transfer configuration error. </dd></dl> + +</div> +</div> +<a id="a0ab2c36c973030a811e6d7abe0afc393" name="a0ab2c36c973030a811e6d7abe0afc393"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0ab2c36c973030a811e6d7abe0afc393">&#9670;&#160;</a></span>neorv32_xip_start()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xip_start </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>abytes</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable XIP mode (to allow CPU to <em>transparently</em> fetch data &amp; instructions).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">abytes</td><td>Number of address bytes used to access the SPI flash (1,2,3,4). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if XIP configuration is OK, -1 if configuration error. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__xip_8h.html b/sw/neorv32__xip_8h.html new file mode 100644 index 0000000000..a035a3d67a --- /dev/null +++ b/sw/neorv32__xip_8h.html @@ -0,0 +1,433 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_xip.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> </div> + <div class="headertitle"><div class="title">neorv32_xip.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>Execute in place module (XIP) HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__xip_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__xip__t.html">neorv32_xip_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:afe2e5682a26cafdb0585d2233bccc7c6" id="r_afe2e5682a26cafdb0585d2233bccc7c6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afe2e5682a26cafdb0585d2233bccc7c6">neorv32_xip_available</a> (void)</td></tr> +<tr class="separator:afe2e5682a26cafdb0585d2233bccc7c6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a549d68abdf5a3d7484abe6d5370bb999" id="r_a549d68abdf5a3d7484abe6d5370bb999"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a549d68abdf5a3d7484abe6d5370bb999">neorv32_xip_setup</a> (int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd)</td></tr> +<tr class="separator:a549d68abdf5a3d7484abe6d5370bb999"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0ab2c36c973030a811e6d7abe0afc393" id="r_a0ab2c36c973030a811e6d7abe0afc393"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0ab2c36c973030a811e6d7abe0afc393">neorv32_xip_start</a> (int abytes)</td></tr> +<tr class="separator:a0ab2c36c973030a811e6d7abe0afc393"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a6aef2ea29451ba2aa55160da777a5115" id="r_a6aef2ea29451ba2aa55160da777a5115"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6aef2ea29451ba2aa55160da777a5115">neorv32_xip_highspeed_enable</a> (void)</td></tr> +<tr class="separator:a6aef2ea29451ba2aa55160da777a5115"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad74f2842ed2251e3ae5c19e06dced0c3" id="r_ad74f2842ed2251e3ae5c19e06dced0c3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad74f2842ed2251e3ae5c19e06dced0c3">neorv32_xip_highspeed_disable</a> (void)</td></tr> +<tr class="separator:ad74f2842ed2251e3ae5c19e06dced0c3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a88f728101e82939bf7f8b9ab5a904706" id="r_a88f728101e82939bf7f8b9ab5a904706"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a88f728101e82939bf7f8b9ab5a904706">neorv32_xip_get_clock_speed</a> (void)</td></tr> +<tr class="separator:a88f728101e82939bf7f8b9ab5a904706"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a92f1446a3bb7fe6dee5dbed33882b223" id="r_a92f1446a3bb7fe6dee5dbed33882b223"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a92f1446a3bb7fe6dee5dbed33882b223">neorv32_xip_spi_trans</a> (int nbytes, uint64_t *rtx_data)</td></tr> +<tr class="separator:a92f1446a3bb7fe6dee5dbed33882b223"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader">IO Device: Execute In Place Module (XIP)</h2></td></tr> +<tr class="memitem:a3d6f138a347c16883b51069428eb7c1e" id="r_a3d6f138a347c16883b51069428eb7c1e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3d6f138a347c16883b51069428eb7c1e">NEORV32_XIP</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__xip__t.html">neorv32_xip_t</a>*) (<a class="el" href="neorv32_8h.html#ae0978315beac8399f96f520bda81c7fe">NEORV32_XIP_BASE</a>))</td></tr> +<tr class="separator:a3d6f138a347c16883b51069428eb7c1e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a72ed1ff87de1222cc3a13177c7483ceb" id="r_a72ed1ff87de1222cc3a13177c7483ceb"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceb">NEORV32_XIP_CTRL_enum</a> { <br /> +&#160;&#160;<a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045">XIP_CTRL_EN</a> = 0 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d">XIP_CTRL_PRSC0</a> = 1 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af">XIP_CTRL_PRSC1</a> = 2 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086">XIP_CTRL_PRSC2</a> = 3 +, <br /> +&#160;&#160;<a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f">XIP_CTRL_CPOL</a> = 4 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d">XIP_CTRL_CPHA</a> = 5 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a">XIP_CTRL_SPI_NBYTES_LSB</a> = 6 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c">XIP_CTRL_SPI_NBYTES_MSB</a> = 9 +, <br /> +&#160;&#160;<a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937">XIP_CTRL_XIP_EN</a> = 10 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df">XIP_CTRL_XIP_ABYTES_LSB</a> = 11 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc">XIP_CTRL_XIP_ABYTES_MSB</a> = 12 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b">XIP_CTRL_RD_CMD_LSB</a> = 13 +, <br /> +&#160;&#160;<a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7">XIP_CTRL_RD_CMD_MSB</a> = 20 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080">XIP_CTRL_SPI_CSEN</a> = 21 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781">XIP_CTRL_HIGHSPEED</a> = 22 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3">XIP_CTRL_CDIV0</a> = 23 +, <br /> +&#160;&#160;<a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073">XIP_CTRL_CDIV1</a> = 24 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445">XIP_CTRL_CDIV2</a> = 25 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef">XIP_CTRL_CDIV3</a> = 26 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c">XIP_CTRL_BURST_EN</a> = 29 +, <br /> +&#160;&#160;<a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5">XIP_CTRL_PHY_BUSY</a> = 30 +, <a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a">XIP_CTRL_XIP_BUSY</a> = 31 +<br /> + }</td></tr> +<tr class="separator:a72ed1ff87de1222cc3a13177c7483ceb"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Execute in place module (XIP) HW driver header file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the XIP module was synthesized (IO_XIP_EN = true).</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a3d6f138a347c16883b51069428eb7c1e" name="a3d6f138a347c16883b51069428eb7c1e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3d6f138a347c16883b51069428eb7c1e">&#9670;&#160;</a></span>NEORV32_XIP</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_XIP&#160;&#160;&#160;((<a class="el" href="structneorv32__xip__t.html">neorv32_xip_t</a>*) (<a class="el" href="neorv32_8h.html#ae0978315beac8399f96f520bda81c7fe">NEORV32_XIP_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>XIP module hardware access (<a class="el" href="structneorv32__xip__t.html">neorv32_xip_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="a72ed1ff87de1222cc3a13177c7483ceb" name="a72ed1ff87de1222cc3a13177c7483ceb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a72ed1ff87de1222cc3a13177c7483ceb">&#9670;&#160;</a></span>NEORV32_XIP_CTRL_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a72ed1ff87de1222cc3a13177c7483ceb">NEORV32_XIP_CTRL_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>XIP control/data register bits </p> +<table class="fieldtable"> +<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045" name="a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045"></a>XIP_CTRL_EN&#160;</td><td class="fielddoc"><p>XIP control register( 0) (r/w): XIP module enable </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d" name="a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d"></a>XIP_CTRL_PRSC0&#160;</td><td class="fielddoc"><p>XIP control register( 1) (r/w): Clock prescaler select bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af" name="a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af"></a>XIP_CTRL_PRSC1&#160;</td><td class="fielddoc"><p>XIP control register( 2) (r/w): Clock prescaler select bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086" name="a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086"></a>XIP_CTRL_PRSC2&#160;</td><td class="fielddoc"><p>XIP control register( 3) (r/w): Clock prescaler select bit 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f" name="a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f"></a>XIP_CTRL_CPOL&#160;</td><td class="fielddoc"><p>XIP control register( 4) (r/w): SPI (idle) clock polarity </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d" name="a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d"></a>XIP_CTRL_CPHA&#160;</td><td class="fielddoc"><p>XIP control register( 5) (r/w): SPI clock phase </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a" name="a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a"></a>XIP_CTRL_SPI_NBYTES_LSB&#160;</td><td class="fielddoc"><p>XIP control register( 6) (r/w): Number of bytes in SPI transmission, LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c" name="a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c"></a>XIP_CTRL_SPI_NBYTES_MSB&#160;</td><td class="fielddoc"><p>XIP control register( 9) (r/w): Number of bytes in SPI transmission, MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937" name="a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937"></a>XIP_CTRL_XIP_EN&#160;</td><td class="fielddoc"><p>XIP control register(10) (r/w): XIP access enable </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df" name="a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df"></a>XIP_CTRL_XIP_ABYTES_LSB&#160;</td><td class="fielddoc"><p>XIP control register(11) (r/w): Number XIP address bytes (minus 1), LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc" name="a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc"></a>XIP_CTRL_XIP_ABYTES_MSB&#160;</td><td class="fielddoc"><p>XIP control register(12) (r/w): Number XIP address bytes (minus 1), MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b" name="a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b"></a>XIP_CTRL_RD_CMD_LSB&#160;</td><td class="fielddoc"><p>XIP control register(13) (r/w): SPI flash read command, LSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7" name="a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7"></a>XIP_CTRL_RD_CMD_MSB&#160;</td><td class="fielddoc"><p>XIP control register(20) (r/w): SPI flash read command, MSB </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080" name="a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080"></a>XIP_CTRL_SPI_CSEN&#160;</td><td class="fielddoc"><p>XIP control register(21) (r/w): SPI chip-select enable </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781" name="a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781"></a>XIP_CTRL_HIGHSPEED&#160;</td><td class="fielddoc"><p>XIP control register(22) (r/w): SPI high-speed mode enable (ignoring XIP_CTRL_PRSC) </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3" name="a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3"></a>XIP_CTRL_CDIV0&#160;</td><td class="fielddoc"><p>XIP control register(23) (r/w): Clock divider bit 0 </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073" name="a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073"></a>XIP_CTRL_CDIV1&#160;</td><td class="fielddoc"><p>XIP control register(24) (r/w): Clock divider bit 1 </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445" name="a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445"></a>XIP_CTRL_CDIV2&#160;</td><td class="fielddoc"><p>XIP control register(25) (r/w): Clock divider bit 2 </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef" name="a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef"></a>XIP_CTRL_CDIV3&#160;</td><td class="fielddoc"><p>XIP control register(26) (r/w): Clock divider bit 3 </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c" name="a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c"></a>XIP_CTRL_BURST_EN&#160;</td><td class="fielddoc"><p>XIP control register(29) (r/-): Burst mode enabled (set if XIP cache is implemented) </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5" name="a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5"></a>XIP_CTRL_PHY_BUSY&#160;</td><td class="fielddoc"><p>XIP control register(30) (r/-): SPI PHY is busy </p> +</td></tr> +<tr><td class="fieldname"><a id="a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a" name="a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a"></a>XIP_CTRL_XIP_BUSY&#160;</td><td class="fielddoc"><p>XIP control register(31) (r/-): XIP access in progress </p> +</td></tr> +</table> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="afe2e5682a26cafdb0585d2233bccc7c6" name="afe2e5682a26cafdb0585d2233bccc7c6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afe2e5682a26cafdb0585d2233bccc7c6">&#9670;&#160;</a></span>neorv32_xip_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xip_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if XIP module was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if XIP was not synthesized, 1 if XIP is available. </dd></dl> + +</div> +</div> +<a id="a88f728101e82939bf7f8b9ab5a904706" name="a88f728101e82939bf7f8b9ab5a904706"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a88f728101e82939bf7f8b9ab5a904706">&#9670;&#160;</a></span>neorv32_xip_get_clock_speed()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_xip_get_clock_speed </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get configured clock speed in Hz.</p> +<dl class="section return"><dt>Returns</dt><dd>Actual configured XIP clock speed in Hz. </dd></dl> + +</div> +</div> +<a id="ad74f2842ed2251e3ae5c19e06dced0c3" name="ad74f2842ed2251e3ae5c19e06dced0c3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad74f2842ed2251e3ae5c19e06dced0c3">&#9670;&#160;</a></span>neorv32_xip_highspeed_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xip_highspeed_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable high-speed SPI mode. </p> + +</div> +</div> +<a id="a6aef2ea29451ba2aa55160da777a5115" name="a6aef2ea29451ba2aa55160da777a5115"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6aef2ea29451ba2aa55160da777a5115">&#9670;&#160;</a></span>neorv32_xip_highspeed_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xip_highspeed_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable high-speed SPI mode (running at half of the processor clock).</p> +<dl class="section note"><dt>Note</dt><dd>High-speed SPI mode ignores the programmed clock prescaler configuration. </dd></dl> + +</div> +</div> +<a id="a549d68abdf5a3d7484abe6d5370bb999" name="a549d68abdf5a3d7484abe6d5370bb999"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a549d68abdf5a3d7484abe6d5370bb999">&#9670;&#160;</a></span>neorv32_xip_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xip_setup </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>prsc</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cdiv</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cpol</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>cpha</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>rd_cmd</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Configure XIP module: configure SPI/flash properties.</p> +<dl class="section warning"><dt>Warning</dt><dd>This will reset the XIP module overriding the CTRL register. </dd></dl> +<dl class="section note"><dt>Note</dt><dd>This function will also send 64 dummy clocks via the SPI port (with chip-select disabled).</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">prsc</td><td>SPI clock prescaler select (0..7). @prama[in] cdiv Clock divider (0..15). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">cpol</td><td>SPI clock polarity (0/1). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">cpha</td><td>SPI clock phase(0/1). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">rd_cmd</td><td>SPI flash read byte command. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a92f1446a3bb7fe6dee5dbed33882b223" name="a92f1446a3bb7fe6dee5dbed33882b223"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a92f1446a3bb7fe6dee5dbed33882b223">&#9670;&#160;</a></span>neorv32_xip_spi_trans()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xip_spi_trans </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>nbytes</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">uint64_t *</td> <td class="paramname"><span class="paramname"><em>rtx_data</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Direct SPI access to the XIP flash.</p> +<dl class="section warning"><dt>Warning</dt><dd>This function can only be used BEFORE the XIP-mode is activated! </dd></dl> +<dl class="section note"><dt>Note</dt><dd>This function is blocking.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">nbytes</td><td>Number of bytes to transfer (1..8). </td></tr> + <tr><td class="paramdir">[in,out]</td><td class="paramname">rtx_data</td><td>Pointer to 64-bit TX/RX data (MSB-aligned for sending, LSB-aligned for receiving (only 32-bit)). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if valid transfer, 1 if transfer configuration error. </dd></dl> + +</div> +</div> +<a id="a0ab2c36c973030a811e6d7abe0afc393" name="a0ab2c36c973030a811e6d7abe0afc393"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0ab2c36c973030a811e6d7abe0afc393">&#9670;&#160;</a></span>neorv32_xip_start()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xip_start </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>abytes</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable XIP mode (to allow CPU to <em>transparently</em> fetch data &amp; instructions).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">abytes</td><td>Number of address bytes used to access the SPI flash (1,2,3,4). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if XIP configuration is OK, -1 if configuration error. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__xip_8h_source.html b/sw/neorv32__xip_8h_source.html new file mode 100644 index 0000000000..d9423486a6 --- /dev/null +++ b/sw/neorv32__xip_8h_source.html @@ -0,0 +1,199 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_xip.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_xip.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__xip_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifndef neorv32_xip_h</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define neorv32_xip_h</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00029" data-start="{" data-end="};"> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__xip__t.html"> 29</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__xip__t.html#a7ead9d6a4f784d766a6b2755c6d35235"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__xip__t.html#a7ead9d6a4f784d766a6b2755c6d35235">CTRL</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__xip__t.html#aacb77d586c3caec518e8e0024cfe745c"> 31</a></span> <span class="keyword">const</span> uint32_t <a class="code hl_variable" href="structneorv32__xip__t.html#aacb77d586c3caec518e8e0024cfe745c">reserved</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="structneorv32__xip__t.html#ad64048bb3544e712b1c668c2ef343ccb"> 32</a></span> uint32_t <a class="code hl_variable" href="structneorv32__xip__t.html#ad64048bb3544e712b1c668c2ef343ccb">DATA_LO</a>; </div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="structneorv32__xip__t.html#a516ab9c075ef6d1fb741e243db7703b2"> 33</a></span> uint32_t <a class="code hl_variable" href="structneorv32__xip__t.html#a516ab9c075ef6d1fb741e243db7703b2">DATA_HI</a>; </div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span>} <a class="code hl_struct" href="structneorv32__xip__t.html">neorv32_xip_t</a>;</div> +</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a3d6f138a347c16883b51069428eb7c1e"> 37</a></span><span class="preprocessor">#define NEORV32_XIP ((neorv32_xip_t*) (NEORV32_XIP_BASE))</span></div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="foldopen" id="foldopen00040" data-start="{" data-end="};"> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceb"> 40</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceb">NEORV32_XIP_CTRL_enum</a> {</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045"> 41</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045">XIP_CTRL_EN</a> = 0, </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d"> 42</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d">XIP_CTRL_PRSC0</a> = 1, </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af"> 43</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af">XIP_CTRL_PRSC1</a> = 2, </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086"> 44</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086">XIP_CTRL_PRSC2</a> = 3, </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f"> 45</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f">XIP_CTRL_CPOL</a> = 4, </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d"> 46</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d">XIP_CTRL_CPHA</a> = 5, </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a"> 47</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a">XIP_CTRL_SPI_NBYTES_LSB</a> = 6, </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c"> 48</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c">XIP_CTRL_SPI_NBYTES_MSB</a> = 9, </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937"> 49</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937">XIP_CTRL_XIP_EN</a> = 10, </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df"> 50</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df">XIP_CTRL_XIP_ABYTES_LSB</a> = 11, </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc"> 51</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc">XIP_CTRL_XIP_ABYTES_MSB</a> = 12, </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b"> 52</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b">XIP_CTRL_RD_CMD_LSB</a> = 13, </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7"> 53</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7">XIP_CTRL_RD_CMD_MSB</a> = 20, </div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080"> 54</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080">XIP_CTRL_SPI_CSEN</a> = 21, </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781"> 55</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781">XIP_CTRL_HIGHSPEED</a> = 22, </div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3"> 56</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3">XIP_CTRL_CDIV0</a> = 23, </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073"> 57</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073">XIP_CTRL_CDIV1</a> = 24, </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445"> 58</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445">XIP_CTRL_CDIV2</a> = 25, </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef"> 59</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef">XIP_CTRL_CDIV3</a> = 26, </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c"> 61</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c">XIP_CTRL_BURST_EN</a> = 29, </div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5"> 62</a></span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5">XIP_CTRL_PHY_BUSY</a> = 30, </div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <a class="code hl_enumvalue" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a">XIP_CTRL_XIP_BUSY</a> = 31 </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a"> 64</a></span>};</div> +</div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__xip_8h.html#afe2e5682a26cafdb0585d2233bccc7c6">neorv32_xip_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__xip_8h.html#a549d68abdf5a3d7484abe6d5370bb999">neorv32_xip_setup</a>(<span class="keywordtype">int</span> prsc, <span class="keywordtype">int</span> cdiv, <span class="keywordtype">int</span> cpol, <span class="keywordtype">int</span> cpha, uint8_t rd_cmd);</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__xip_8h.html#a0ab2c36c973030a811e6d7abe0afc393">neorv32_xip_start</a>(<span class="keywordtype">int</span> abytes);</div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__xip_8h.html#a6aef2ea29451ba2aa55160da777a5115">neorv32_xip_highspeed_enable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__xip_8h.html#ad74f2842ed2251e3ae5c19e06dced0c3">neorv32_xip_highspeed_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span>uint32_t <a class="code hl_function" href="neorv32__xip_8h.html#a88f728101e82939bf7f8b9ab5a904706">neorv32_xip_get_clock_speed</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__xip_8h.html#a92f1446a3bb7fe6dee5dbed33882b223">neorv32_xip_spi_trans</a>(<span class="keywordtype">int</span> nbytes, uint64_t *rtx_data);</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_xip_h</span></div> +<div class="ttc" id="aneorv32__xip_8h_html_a0ab2c36c973030a811e6d7abe0afc393"><div class="ttname"><a href="neorv32__xip_8h.html#a0ab2c36c973030a811e6d7abe0afc393">neorv32_xip_start</a></div><div class="ttdeci">int neorv32_xip_start(int abytes)</div><div class="ttdef"><b>Definition</b> neorv32_xip.c:86</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a549d68abdf5a3d7484abe6d5370bb999"><div class="ttname"><a href="neorv32__xip_8h.html#a549d68abdf5a3d7484abe6d5370bb999">neorv32_xip_setup</a></div><div class="ttdeci">void neorv32_xip_setup(int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd)</div><div class="ttdef"><b>Definition</b> neorv32_xip.c:49</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a6aef2ea29451ba2aa55160da777a5115"><div class="ttname"><a href="neorv32__xip_8h.html#a6aef2ea29451ba2aa55160da777a5115">neorv32_xip_highspeed_enable</a></div><div class="ttdeci">void neorv32_xip_highspeed_enable(void)</div><div class="ttdef"><b>Definition</b> neorv32_xip.c:116</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceb"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceb">NEORV32_XIP_CTRL_enum</a></div><div class="ttdeci">NEORV32_XIP_CTRL_enum</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:40</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a">XIP_CTRL_SPI_NBYTES_LSB</a></div><div class="ttdeci">@ XIP_CTRL_SPI_NBYTES_LSB</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:47</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045">XIP_CTRL_EN</a></div><div class="ttdeci">@ XIP_CTRL_EN</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:41</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a">XIP_CTRL_XIP_BUSY</a></div><div class="ttdeci">@ XIP_CTRL_XIP_BUSY</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:63</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7">XIP_CTRL_RD_CMD_MSB</a></div><div class="ttdeci">@ XIP_CTRL_RD_CMD_MSB</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:53</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937">XIP_CTRL_XIP_EN</a></div><div class="ttdeci">@ XIP_CTRL_XIP_EN</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:49</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445">XIP_CTRL_CDIV2</a></div><div class="ttdeci">@ XIP_CTRL_CDIV2</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:58</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc">XIP_CTRL_XIP_ABYTES_MSB</a></div><div class="ttdeci">@ XIP_CTRL_XIP_ABYTES_MSB</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:51</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080">XIP_CTRL_SPI_CSEN</a></div><div class="ttdeci">@ XIP_CTRL_SPI_CSEN</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:54</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c">XIP_CTRL_SPI_NBYTES_MSB</a></div><div class="ttdeci">@ XIP_CTRL_SPI_NBYTES_MSB</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:48</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df">XIP_CTRL_XIP_ABYTES_LSB</a></div><div class="ttdeci">@ XIP_CTRL_XIP_ABYTES_LSB</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:50</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef">XIP_CTRL_CDIV3</a></div><div class="ttdeci">@ XIP_CTRL_CDIV3</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:59</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d">XIP_CTRL_PRSC0</a></div><div class="ttdeci">@ XIP_CTRL_PRSC0</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:42</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073">XIP_CTRL_CDIV1</a></div><div class="ttdeci">@ XIP_CTRL_CDIV1</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:57</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5">XIP_CTRL_PHY_BUSY</a></div><div class="ttdeci">@ XIP_CTRL_PHY_BUSY</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:62</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c">XIP_CTRL_BURST_EN</a></div><div class="ttdeci">@ XIP_CTRL_BURST_EN</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:61</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b">XIP_CTRL_RD_CMD_LSB</a></div><div class="ttdeci">@ XIP_CTRL_RD_CMD_LSB</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:52</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086">XIP_CTRL_PRSC2</a></div><div class="ttdeci">@ XIP_CTRL_PRSC2</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:44</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f">XIP_CTRL_CPOL</a></div><div class="ttdeci">@ XIP_CTRL_CPOL</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:45</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781">XIP_CTRL_HIGHSPEED</a></div><div class="ttdeci">@ XIP_CTRL_HIGHSPEED</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:55</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d">XIP_CTRL_CPHA</a></div><div class="ttdeci">@ XIP_CTRL_CPHA</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:46</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af">XIP_CTRL_PRSC1</a></div><div class="ttdeci">@ XIP_CTRL_PRSC1</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:43</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3"><div class="ttname"><a href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3">XIP_CTRL_CDIV0</a></div><div class="ttdeci">@ XIP_CTRL_CDIV0</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:56</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a88f728101e82939bf7f8b9ab5a904706"><div class="ttname"><a href="neorv32__xip_8h.html#a88f728101e82939bf7f8b9ab5a904706">neorv32_xip_get_clock_speed</a></div><div class="ttdeci">uint32_t neorv32_xip_get_clock_speed(void)</div><div class="ttdef"><b>Definition</b> neorv32_xip.c:136</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_a92f1446a3bb7fe6dee5dbed33882b223"><div class="ttname"><a href="neorv32__xip_8h.html#a92f1446a3bb7fe6dee5dbed33882b223">neorv32_xip_spi_trans</a></div><div class="ttdeci">void neorv32_xip_spi_trans(int nbytes, uint64_t *rtx_data)</div><div class="ttdef"><b>Definition</b> neorv32_xip.c:167</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_ad74f2842ed2251e3ae5c19e06dced0c3"><div class="ttname"><a href="neorv32__xip_8h.html#ad74f2842ed2251e3ae5c19e06dced0c3">neorv32_xip_highspeed_disable</a></div><div class="ttdeci">void neorv32_xip_highspeed_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_xip.c:125</div></div> +<div class="ttc" id="aneorv32__xip_8h_html_afe2e5682a26cafdb0585d2233bccc7c6"><div class="ttname"><a href="neorv32__xip_8h.html#afe2e5682a26cafdb0585d2233bccc7c6">neorv32_xip_available</a></div><div class="ttdeci">int neorv32_xip_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_xip.c:26</div></div> +<div class="ttc" id="astructneorv32__xip__t_html"><div class="ttname"><a href="structneorv32__xip__t.html">neorv32_xip_t</a></div><div class="ttdef"><b>Definition</b> neorv32_xip.h:29</div></div> +<div class="ttc" id="astructneorv32__xip__t_html_a516ab9c075ef6d1fb741e243db7703b2"><div class="ttname"><a href="structneorv32__xip__t.html#a516ab9c075ef6d1fb741e243db7703b2">neorv32_xip_t::DATA_HI</a></div><div class="ttdeci">uint32_t DATA_HI</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:33</div></div> +<div class="ttc" id="astructneorv32__xip__t_html_a7ead9d6a4f784d766a6b2755c6d35235"><div class="ttname"><a href="structneorv32__xip__t.html#a7ead9d6a4f784d766a6b2755c6d35235">neorv32_xip_t::CTRL</a></div><div class="ttdeci">uint32_t CTRL</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:30</div></div> +<div class="ttc" id="astructneorv32__xip__t_html_aacb77d586c3caec518e8e0024cfe745c"><div class="ttname"><a href="structneorv32__xip__t.html#aacb77d586c3caec518e8e0024cfe745c">neorv32_xip_t::reserved</a></div><div class="ttdeci">const uint32_t reserved</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:31</div></div> +<div class="ttc" id="astructneorv32__xip__t_html_ad64048bb3544e712b1c668c2ef343ccb"><div class="ttname"><a href="structneorv32__xip__t.html#ad64048bb3544e712b1c668c2ef343ccb">neorv32_xip_t::DATA_LO</a></div><div class="ttdeci">uint32_t DATA_LO</div><div class="ttdef"><b>Definition</b> neorv32_xip.h:32</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__xirq_8c.html b/sw/neorv32__xirq_8c.html new file mode 100644 index 0000000000..36780c79bc --- /dev/null +++ b/sw/neorv32__xirq_8c.html @@ -0,0 +1,431 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/source/neorv32_xirq.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_0c6ac14e2254a316d41123f98feeb67b.html">source</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">neorv32_xirq.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>External Interrupt controller HW driver source file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:a14661d628dd31e6bfce89376c6614627" id="r_a14661d628dd31e6bfce89376c6614627"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a14661d628dd31e6bfce89376c6614627">__neorv32_xirq_core</a> (void)</td></tr> +<tr class="separator:a14661d628dd31e6bfce89376c6614627"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae4d9362b23a1341c595a4cd239a87091" id="r_ae4d9362b23a1341c595a4cd239a87091"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae4d9362b23a1341c595a4cd239a87091">__neorv32_xirq_dummy_handler</a> (void)</td></tr> +<tr class="separator:ae4d9362b23a1341c595a4cd239a87091"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aaf30757d526030a8d81081915ab29a76" id="r_aaf30757d526030a8d81081915ab29a76"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aaf30757d526030a8d81081915ab29a76">neorv32_xirq_available</a> (void)</td></tr> +<tr class="separator:aaf30757d526030a8d81081915ab29a76"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9295997fce7114a8205325c4d75dd200" id="r_a9295997fce7114a8205325c4d75dd200"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9295997fce7114a8205325c4d75dd200">neorv32_xirq_setup</a> (void)</td></tr> +<tr class="separator:a9295997fce7114a8205325c4d75dd200"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a76468156ef52b371e06bc2ca8eddcd27" id="r_a76468156ef52b371e06bc2ca8eddcd27"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a76468156ef52b371e06bc2ca8eddcd27">neorv32_xirq_global_enable</a> (void)</td></tr> +<tr class="separator:a76468156ef52b371e06bc2ca8eddcd27"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac64d3ff5619968499bccebebe6a6cab3" id="r_ac64d3ff5619968499bccebebe6a6cab3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac64d3ff5619968499bccebebe6a6cab3">neorv32_xirq_global_disable</a> (void)</td></tr> +<tr class="separator:ac64d3ff5619968499bccebebe6a6cab3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a717a8e34908cc01345e68920e76f229c" id="r_a717a8e34908cc01345e68920e76f229c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a717a8e34908cc01345e68920e76f229c">neorv32_xirq_get_num</a> (void)</td></tr> +<tr class="separator:a717a8e34908cc01345e68920e76f229c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0d137f09d1e7dcd31c157b856033ac42" id="r_a0d137f09d1e7dcd31c157b856033ac42"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0d137f09d1e7dcd31c157b856033ac42">neorv32_xirq_setup_trigger</a> (int channel, int config)</td></tr> +<tr class="separator:a0d137f09d1e7dcd31c157b856033ac42"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abe63c0968c94b472082c8156a1a7db5c" id="r_abe63c0968c94b472082c8156a1a7db5c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abe63c0968c94b472082c8156a1a7db5c">neorv32_xirq_channel_enable</a> (int channel)</td></tr> +<tr class="separator:abe63c0968c94b472082c8156a1a7db5c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae17509ad0c828aa9b36747b253cdbf0a" id="r_ae17509ad0c828aa9b36747b253cdbf0a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae17509ad0c828aa9b36747b253cdbf0a">neorv32_xirq_channel_disable</a> (int channel)</td></tr> +<tr class="separator:ae17509ad0c828aa9b36747b253cdbf0a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9129984f91c02afafaa072a5d86f9876" id="r_a9129984f91c02afafaa072a5d86f9876"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9129984f91c02afafaa072a5d86f9876">neorv32_xirq_install</a> (int channel, void(*handler)(void))</td></tr> +<tr class="separator:a9129984f91c02afafaa072a5d86f9876"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a49ae67d1d5066cd795149e96b81127f7" id="r_a49ae67d1d5066cd795149e96b81127f7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a49ae67d1d5066cd795149e96b81127f7">neorv32_xirq_uninstall</a> (int channel)</td></tr> +<tr class="separator:a49ae67d1d5066cd795149e96b81127f7"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:a76d73c3bf372989703c685a9e8d229ac" id="r_a76d73c3bf372989703c685a9e8d229ac"><td class="memItemLeft" align="right" valign="top"><a id="a76d73c3bf372989703c685a9e8d229ac" name="a76d73c3bf372989703c685a9e8d229ac"></a> +static uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>__neorv32_xirq_vector_lut</b> [32]</td></tr> +<tr class="separator:a76d73c3bf372989703c685a9e8d229ac"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>External Interrupt controller HW driver source file. </p> +<dl class="section note"><dt>Note</dt><dd>These functions should only be used if the XIRQ controller was synthesized.</dd></dl> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Function Documentation</h2> +<a id="a14661d628dd31e6bfce89376c6614627" name="a14661d628dd31e6bfce89376c6614627"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a14661d628dd31e6bfce89376c6614627">&#9670;&#160;</a></span>__neorv32_xirq_core()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">static void __neorv32_xirq_core </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">static</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>This is the actual second-level (F)IRQ handler for the XIRQ. It will call the previously installed handler if an XIRQ fires.</p> +<dl class="section note"><dt>Note</dt><dd>The XIRQ's channel interrupt is acknowledge AFTER the handler has been executed. </dd></dl> + +</div> +</div> +<a id="ae4d9362b23a1341c595a4cd239a87091" name="ae4d9362b23a1341c595a4cd239a87091"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae4d9362b23a1341c595a4cd239a87091">&#9670;&#160;</a></span>__neorv32_xirq_dummy_handler()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">static void __neorv32_xirq_dummy_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">static</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> +<p>XIRQ dummy handler. </p> + +</div> +</div> +<a id="aaf30757d526030a8d81081915ab29a76" name="aaf30757d526030a8d81081915ab29a76"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aaf30757d526030a8d81081915ab29a76">&#9670;&#160;</a></span>neorv32_xirq_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xirq_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if external interrupt controller was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if XIRQ was not synthesized, 1 if EXTIRQ is available. </dd></dl> + +</div> +</div> +<a id="ae17509ad0c828aa9b36747b253cdbf0a" name="ae17509ad0c828aa9b36747b253cdbf0a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae17509ad0c828aa9b36747b253cdbf0a">&#9670;&#160;</a></span>neorv32_xirq_channel_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xirq_channel_disable </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable IRQ channel.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>XIRQ interrupt channel (0..31). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="abe63c0968c94b472082c8156a1a7db5c" name="abe63c0968c94b472082c8156a1a7db5c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abe63c0968c94b472082c8156a1a7db5c">&#9670;&#160;</a></span>neorv32_xirq_channel_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xirq_channel_enable </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable IRQ channel.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>XIRQ interrupt channel (0..31). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a717a8e34908cc01345e68920e76f229c" name="a717a8e34908cc01345e68920e76f229c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a717a8e34908cc01345e68920e76f229c">&#9670;&#160;</a></span>neorv32_xirq_get_num()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xirq_get_num </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get number of implemented XIRQ channels</p> +<dl class="section return"><dt>Returns</dt><dd>Number of implemented channels (0..32). </dd></dl> + +</div> +</div> +<a id="ac64d3ff5619968499bccebebe6a6cab3" name="ac64d3ff5619968499bccebebe6a6cab3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac64d3ff5619968499bccebebe6a6cab3">&#9670;&#160;</a></span>neorv32_xirq_global_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xirq_global_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Globally disable XIRQ interrupts (via according FIRQ channel).</p> +<dl class="section note"><dt>Note</dt><dd>Triggered / triggering XIRQ will remain pending. </dd></dl> + +</div> +</div> +<a id="a76468156ef52b371e06bc2ca8eddcd27" name="a76468156ef52b371e06bc2ca8eddcd27"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a76468156ef52b371e06bc2ca8eddcd27">&#9670;&#160;</a></span>neorv32_xirq_global_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xirq_global_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Globally enable XIRQ interrupts (via according FIRQ channel).</p> +<dl class="section note"><dt>Note</dt><dd>Triggered / triggering XIRQ will remain pending. </dd></dl> + +</div> +</div> +<a id="a9129984f91c02afafaa072a5d86f9876" name="a9129984f91c02afafaa072a5d86f9876"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9129984f91c02afafaa072a5d86f9876">&#9670;&#160;</a></span>neorv32_xirq_install()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xirq_install </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">void(*</td> <td class="paramname"><span class="paramname"><em>handler&#160;</em></span>)(void)&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Install interrupt handler function for XIRQ channel.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>XIRQ interrupt channel (0..31). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">handler</td><td>The actual handler function for the specified interrupt (function MUST be of type "void function(void);"). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if success, -1 if invalid channel. </dd></dl> + +</div> +</div> +<a id="a9295997fce7114a8205325c4d75dd200" name="a9295997fce7114a8205325c4d75dd200"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9295997fce7114a8205325c4d75dd200">&#9670;&#160;</a></span>neorv32_xirq_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xirq_setup </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initialize XIRQ controller.</p> +<dl class="section note"><dt>Note</dt><dd>All interrupt channels will be deactivated and all installed handlers addresses will be deleted.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if success, != 0 if error. </dd></dl> + +</div> +</div> +<a id="a0d137f09d1e7dcd31c157b856033ac42" name="a0d137f09d1e7dcd31c157b856033ac42"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0d137f09d1e7dcd31c157b856033ac42">&#9670;&#160;</a></span>neorv32_xirq_setup_trigger()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xirq_setup_trigger </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>config</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Configure a channel's trigger type.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>XIRQ interrupt channel (0..31). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">config</td><td>Trigger type (<a class="el" href="neorv32__xirq_8h.html#a19aaba6e0cfedfee3cf96f3ea5323151">XIRQ_TRIGGER_enum</a>). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a49ae67d1d5066cd795149e96b81127f7" name="a49ae67d1d5066cd795149e96b81127f7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a49ae67d1d5066cd795149e96b81127f7">&#9670;&#160;</a></span>neorv32_xirq_uninstall()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xirq_uninstall </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Uninstall interrupt handler function for XIRQ channel.</p> +<dl class="section note"><dt>Note</dt><dd>This will also deactivate the according XIRQ channel.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>XIRQ interrupt channel (0..31). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if success, -1 if invalid channel. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__xirq_8h.html b/sw/neorv32__xirq_8h.html new file mode 100644 index 0000000000..84a816e3e6 --- /dev/null +++ b/sw/neorv32__xirq_8h.html @@ -0,0 +1,422 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_xirq.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Data Structures</a> &#124; +<a href="#enum-members">Enumerations</a> </div> + <div class="headertitle"><div class="title">neorv32_xirq.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>External Interrupt controller HW driver header file. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br /> +</div> +<p><a href="neorv32__xirq_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Data Structures</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structneorv32__xirq__t.html">neorv32_xirq_t</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">IO Device: External Interrupt Controller (XIRQ)</div></td></tr> +<tr class="memitem:a0c0886139e9837867202e5f6a83307c4" id="r_a0c0886139e9837867202e5f6a83307c4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0c0886139e9837867202e5f6a83307c4">NEORV32_XIRQ</a>&#160;&#160;&#160;((<a class="el" href="structneorv32__xirq__t.html">neorv32_xirq_t</a>*) (<a class="el" href="neorv32_8h.html#a942a897be2d4ae6820bee0f7bb3a0ff1">NEORV32_XIRQ_BASE</a>))</td></tr> +<tr class="separator:a0c0886139e9837867202e5f6a83307c4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a> +Enumerations</h2></td></tr> +<tr class="memitem:a19aaba6e0cfedfee3cf96f3ea5323151" id="r_a19aaba6e0cfedfee3cf96f3ea5323151"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a19aaba6e0cfedfee3cf96f3ea5323151">XIRQ_TRIGGER_enum</a> { <b>XIRQ_TRIGGER_LEVEL_LOW</b> = 0b00 +, <b>XIRQ_TRIGGER_LEVEL_HIGH</b> = 0b01 +, <b>XIRQ_TRIGGER_EDGE_FALLING</b> = 0b10 +, <b>XIRQ_TRIGGER_EDGE_RISING</b> = 0b11 + }</td></tr> +<tr class="separator:a19aaba6e0cfedfee3cf96f3ea5323151"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Prototypes</div></td></tr> +<tr class="memitem:aaf30757d526030a8d81081915ab29a76" id="r_aaf30757d526030a8d81081915ab29a76"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aaf30757d526030a8d81081915ab29a76">neorv32_xirq_available</a> (void)</td></tr> +<tr class="separator:aaf30757d526030a8d81081915ab29a76"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9295997fce7114a8205325c4d75dd200" id="r_a9295997fce7114a8205325c4d75dd200"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9295997fce7114a8205325c4d75dd200">neorv32_xirq_setup</a> (void)</td></tr> +<tr class="separator:a9295997fce7114a8205325c4d75dd200"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a76468156ef52b371e06bc2ca8eddcd27" id="r_a76468156ef52b371e06bc2ca8eddcd27"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a76468156ef52b371e06bc2ca8eddcd27">neorv32_xirq_global_enable</a> (void)</td></tr> +<tr class="separator:a76468156ef52b371e06bc2ca8eddcd27"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac64d3ff5619968499bccebebe6a6cab3" id="r_ac64d3ff5619968499bccebebe6a6cab3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac64d3ff5619968499bccebebe6a6cab3">neorv32_xirq_global_disable</a> (void)</td></tr> +<tr class="separator:ac64d3ff5619968499bccebebe6a6cab3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a717a8e34908cc01345e68920e76f229c" id="r_a717a8e34908cc01345e68920e76f229c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a717a8e34908cc01345e68920e76f229c">neorv32_xirq_get_num</a> (void)</td></tr> +<tr class="separator:a717a8e34908cc01345e68920e76f229c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0d137f09d1e7dcd31c157b856033ac42" id="r_a0d137f09d1e7dcd31c157b856033ac42"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0d137f09d1e7dcd31c157b856033ac42">neorv32_xirq_setup_trigger</a> (int channel, int config)</td></tr> +<tr class="separator:a0d137f09d1e7dcd31c157b856033ac42"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abe63c0968c94b472082c8156a1a7db5c" id="r_abe63c0968c94b472082c8156a1a7db5c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abe63c0968c94b472082c8156a1a7db5c">neorv32_xirq_channel_enable</a> (int channel)</td></tr> +<tr class="separator:abe63c0968c94b472082c8156a1a7db5c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae17509ad0c828aa9b36747b253cdbf0a" id="r_ae17509ad0c828aa9b36747b253cdbf0a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae17509ad0c828aa9b36747b253cdbf0a">neorv32_xirq_channel_disable</a> (int channel)</td></tr> +<tr class="separator:ae17509ad0c828aa9b36747b253cdbf0a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9129984f91c02afafaa072a5d86f9876" id="r_a9129984f91c02afafaa072a5d86f9876"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9129984f91c02afafaa072a5d86f9876">neorv32_xirq_install</a> (int channel, void(*handler)(void))</td></tr> +<tr class="separator:a9129984f91c02afafaa072a5d86f9876"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a49ae67d1d5066cd795149e96b81127f7" id="r_a49ae67d1d5066cd795149e96b81127f7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a49ae67d1d5066cd795149e96b81127f7">neorv32_xirq_uninstall</a> (int channel)</td></tr> +<tr class="separator:a49ae67d1d5066cd795149e96b81127f7"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>External Interrupt controller HW driver header file. </p> +<dl class="section see"><dt>See also</dt><dd><a href="https://stnolting.github.io/neorv32/sw/files.html">https://stnolting.github.io/neorv32/sw/files.html</a> </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="a0c0886139e9837867202e5f6a83307c4" name="a0c0886139e9837867202e5f6a83307c4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0c0886139e9837867202e5f6a83307c4">&#9670;&#160;</a></span>NEORV32_XIRQ</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define NEORV32_XIRQ&#160;&#160;&#160;((<a class="el" href="structneorv32__xirq__t.html">neorv32_xirq_t</a>*) (<a class="el" href="neorv32_8h.html#a942a897be2d4ae6820bee0f7bb3a0ff1">NEORV32_XIRQ_BASE</a>))</td> + </tr> + </table> +</div><div class="memdoc"> +<p>XIRQ module hardware access (<a class="el" href="structneorv32__xirq__t.html">neorv32_xirq_t</a>) </p> + +</div> +</div> +<h2 class="groupheader">Enumeration Type Documentation</h2> +<a id="a19aaba6e0cfedfee3cf96f3ea5323151" name="a19aaba6e0cfedfee3cf96f3ea5323151"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a19aaba6e0cfedfee3cf96f3ea5323151">&#9670;&#160;</a></span>XIRQ_TRIGGER_enum</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">enum <a class="el" href="#a19aaba6e0cfedfee3cf96f3ea5323151">XIRQ_TRIGGER_enum</a></td> + </tr> + </table> +</div><div class="memdoc"> +<p>XIRQ trigger type configuration </p> + +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="aaf30757d526030a8d81081915ab29a76" name="aaf30757d526030a8d81081915ab29a76"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aaf30757d526030a8d81081915ab29a76">&#9670;&#160;</a></span>neorv32_xirq_available()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xirq_available </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Check if external interrupt controller was synthesized.</p> +<dl class="section return"><dt>Returns</dt><dd>0 if XIRQ was not synthesized, 1 if EXTIRQ is available. </dd></dl> + +</div> +</div> +<a id="ae17509ad0c828aa9b36747b253cdbf0a" name="ae17509ad0c828aa9b36747b253cdbf0a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae17509ad0c828aa9b36747b253cdbf0a">&#9670;&#160;</a></span>neorv32_xirq_channel_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xirq_channel_disable </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Disable IRQ channel.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>XIRQ interrupt channel (0..31). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="abe63c0968c94b472082c8156a1a7db5c" name="abe63c0968c94b472082c8156a1a7db5c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abe63c0968c94b472082c8156a1a7db5c">&#9670;&#160;</a></span>neorv32_xirq_channel_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xirq_channel_enable </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Enable IRQ channel.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>XIRQ interrupt channel (0..31). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a717a8e34908cc01345e68920e76f229c" name="a717a8e34908cc01345e68920e76f229c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a717a8e34908cc01345e68920e76f229c">&#9670;&#160;</a></span>neorv32_xirq_get_num()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xirq_get_num </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Get number of implemented XIRQ channels</p> +<dl class="section return"><dt>Returns</dt><dd>Number of implemented channels (0..32). </dd></dl> + +</div> +</div> +<a id="ac64d3ff5619968499bccebebe6a6cab3" name="ac64d3ff5619968499bccebebe6a6cab3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac64d3ff5619968499bccebebe6a6cab3">&#9670;&#160;</a></span>neorv32_xirq_global_disable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xirq_global_disable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Globally disable XIRQ interrupts (via according FIRQ channel).</p> +<dl class="section note"><dt>Note</dt><dd>Triggered / triggering XIRQ will remain pending. </dd></dl> + +</div> +</div> +<a id="a76468156ef52b371e06bc2ca8eddcd27" name="a76468156ef52b371e06bc2ca8eddcd27"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a76468156ef52b371e06bc2ca8eddcd27">&#9670;&#160;</a></span>neorv32_xirq_global_enable()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xirq_global_enable </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Globally enable XIRQ interrupts (via according FIRQ channel).</p> +<dl class="section note"><dt>Note</dt><dd>Triggered / triggering XIRQ will remain pending. </dd></dl> + +</div> +</div> +<a id="a9129984f91c02afafaa072a5d86f9876" name="a9129984f91c02afafaa072a5d86f9876"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9129984f91c02afafaa072a5d86f9876">&#9670;&#160;</a></span>neorv32_xirq_install()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xirq_install </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">void(*</td> <td class="paramname"><span class="paramname"><em>handler&#160;</em></span>)(void)&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Install interrupt handler function for XIRQ channel.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>XIRQ interrupt channel (0..31). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">handler</td><td>The actual handler function for the specified interrupt (function MUST be of type "void function(void);"). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if success, -1 if invalid channel. </dd></dl> + +</div> +</div> +<a id="a9295997fce7114a8205325c4d75dd200" name="a9295997fce7114a8205325c4d75dd200"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9295997fce7114a8205325c4d75dd200">&#9670;&#160;</a></span>neorv32_xirq_setup()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xirq_setup </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Initialize XIRQ controller.</p> +<dl class="section note"><dt>Note</dt><dd>All interrupt channels will be deactivated and all installed handlers addresses will be deleted.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if success, != 0 if error. </dd></dl> + +</div> +</div> +<a id="a0d137f09d1e7dcd31c157b856033ac42" name="a0d137f09d1e7dcd31c157b856033ac42"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0d137f09d1e7dcd31c157b856033ac42">&#9670;&#160;</a></span>neorv32_xirq_setup_trigger()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void neorv32_xirq_setup_trigger </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>config</em></span>&#160;)</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Configure a channel's trigger type.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>XIRQ interrupt channel (0..31). </td></tr> + <tr><td class="paramdir">[in]</td><td class="paramname">config</td><td>Trigger type (<a class="el" href="#a19aaba6e0cfedfee3cf96f3ea5323151">XIRQ_TRIGGER_enum</a>). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a49ae67d1d5066cd795149e96b81127f7" name="a49ae67d1d5066cd795149e96b81127f7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a49ae67d1d5066cd795149e96b81127f7">&#9670;&#160;</a></span>neorv32_xirq_uninstall()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int neorv32_xirq_uninstall </td> + <td>(</td> + <td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>channel</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Uninstall interrupt handler function for XIRQ channel.</p> +<dl class="section note"><dt>Note</dt><dd>This will also deactivate the according XIRQ channel.</dd></dl> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">channel</td><td>XIRQ interrupt channel (0..31). </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>0 if success, -1 if invalid channel. </dd></dl> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32__xirq_8h_source.html b/sw/neorv32__xirq_8h_source.html new file mode 100644 index 0000000000..56b04f89ab --- /dev/null +++ b/sw/neorv32__xirq_8h_source.html @@ -0,0 +1,167 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/lib/include/neorv32_xirq.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_7d04193005ada6f9450f847f4adb6b5b.html">lib</a></li><li class="navelem"><a class="el" href="dir_752b1e5d3973bf735fa78bf6b4727df9.html">include</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">neorv32_xirq.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="neorv32__xirq_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Copyright (c) NEORV32 contributors. //</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Licensed under the BSD-3-Clause license, see LICENSE for details. //</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// SPDX-License-Identifier: BSD-3-Clause //</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// ================================================================================ //</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef neorv32_xirq_h</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define neorv32_xirq_h</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00027" data-start="{" data-end="};"> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="structneorv32__xirq__t.html"> 27</a></span><span class="keyword">typedef</span> <span class="keyword">volatile</span> <span class="keyword">struct </span>__attribute__((packed,aligned(4))) {</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="structneorv32__xirq__t.html#aef3c2b491207abd68bf6392f97096a74"> 28</a></span> uint32_t <a class="code hl_variable" href="structneorv32__xirq__t.html#aef3c2b491207abd68bf6392f97096a74">EIE</a>; </div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structneorv32__xirq__t.html#ae4f7f3f41210ff329b6f82d5dfada88a"> 29</a></span> uint32_t <a class="code hl_variable" href="structneorv32__xirq__t.html#ae4f7f3f41210ff329b6f82d5dfada88a">ESC</a>; </div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structneorv32__xirq__t.html#ab7117c210b5f0a8ebc369eeba6a4a5bc"> 30</a></span> uint32_t <a class="code hl_variable" href="structneorv32__xirq__t.html#ab7117c210b5f0a8ebc369eeba6a4a5bc">TTYP</a>; </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structneorv32__xirq__t.html#a5fe0036a2cada585228b60aaa780e92a"> 31</a></span> uint32_t <a class="code hl_variable" href="structneorv32__xirq__t.html#a5fe0036a2cada585228b60aaa780e92a">TPOL</a>; </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>} <a class="code hl_struct" href="structneorv32__xirq__t.html">neorv32_xirq_t</a>;</div> +</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="neorv32__xirq_8h.html#a0c0886139e9837867202e5f6a83307c4"> 35</a></span><span class="preprocessor">#define NEORV32_XIRQ ((neorv32_xirq_t*) (NEORV32_XIRQ_BASE))</span></div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">/**********************************************************************/</span></div> +<div class="foldopen" id="foldopen00042" data-start="{" data-end="};"> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="neorv32__xirq_8h.html#a19aaba6e0cfedfee3cf96f3ea5323151"> 42</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="neorv32__xirq_8h.html#a19aaba6e0cfedfee3cf96f3ea5323151">XIRQ_TRIGGER_enum</a> {</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> XIRQ_TRIGGER_LEVEL_LOW = 0b00, <span class="comment">// low-level</span></div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> XIRQ_TRIGGER_LEVEL_HIGH = 0b01, <span class="comment">// high-level</span></div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> XIRQ_TRIGGER_EDGE_FALLING = 0b10, <span class="comment">// falling-edge</span></div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> XIRQ_TRIGGER_EDGE_RISING = 0b11 <span class="comment">// rising-edge</span></div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span>};</div> +</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">/**********************************************************************/</span></div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__xirq_8h.html#aaf30757d526030a8d81081915ab29a76">neorv32_xirq_available</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__xirq_8h.html#a9295997fce7114a8205325c4d75dd200">neorv32_xirq_setup</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__xirq_8h.html#a76468156ef52b371e06bc2ca8eddcd27">neorv32_xirq_global_enable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__xirq_8h.html#ac64d3ff5619968499bccebebe6a6cab3">neorv32_xirq_global_disable</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__xirq_8h.html#a717a8e34908cc01345e68920e76f229c">neorv32_xirq_get_num</a>(<span class="keywordtype">void</span>);</div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__xirq_8h.html#a0d137f09d1e7dcd31c157b856033ac42">neorv32_xirq_setup_trigger</a>(<span class="keywordtype">int</span> channel, <span class="keywordtype">int</span> config);</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__xirq_8h.html#abe63c0968c94b472082c8156a1a7db5c">neorv32_xirq_channel_enable</a>(<span class="keywordtype">int</span> channel);</div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="keywordtype">void</span> <a class="code hl_function" href="neorv32__xirq_8h.html#ae17509ad0c828aa9b36747b253cdbf0a">neorv32_xirq_channel_disable</a>(<span class="keywordtype">int</span> channel);</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__xirq_8h.html#a9129984f91c02afafaa072a5d86f9876">neorv32_xirq_install</a>(<span class="keywordtype">int</span> channel, <span class="keywordtype">void</span> (*handler)(<span class="keywordtype">void</span>));</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="keywordtype">int</span> <a class="code hl_function" href="neorv32__xirq_8h.html#a49ae67d1d5066cd795149e96b81127f7">neorv32_xirq_uninstall</a>(<span class="keywordtype">int</span> channel);</div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="preprocessor">#endif </span><span class="comment">// neorv32_xirq_h</span></div> +<div class="ttc" id="aneorv32__xirq_8h_html_a0d137f09d1e7dcd31c157b856033ac42"><div class="ttname"><a href="neorv32__xirq_8h.html#a0d137f09d1e7dcd31c157b856033ac42">neorv32_xirq_setup_trigger</a></div><div class="ttdeci">void neorv32_xirq_setup_trigger(int channel, int config)</div><div class="ttdef"><b>Definition</b> neorv32_xirq.c:162</div></div> +<div class="ttc" id="aneorv32__xirq_8h_html_a19aaba6e0cfedfee3cf96f3ea5323151"><div class="ttname"><a href="neorv32__xirq_8h.html#a19aaba6e0cfedfee3cf96f3ea5323151">XIRQ_TRIGGER_enum</a></div><div class="ttdeci">XIRQ_TRIGGER_enum</div><div class="ttdef"><b>Definition</b> neorv32_xirq.h:42</div></div> +<div class="ttc" id="aneorv32__xirq_8h_html_a49ae67d1d5066cd795149e96b81127f7"><div class="ttname"><a href="neorv32__xirq_8h.html#a49ae67d1d5066cd795149e96b81127f7">neorv32_xirq_uninstall</a></div><div class="ttdeci">int neorv32_xirq_uninstall(int channel)</div><div class="ttdef"><b>Definition</b> neorv32_xirq.c:235</div></div> +<div class="ttc" id="aneorv32__xirq_8h_html_a717a8e34908cc01345e68920e76f229c"><div class="ttname"><a href="neorv32__xirq_8h.html#a717a8e34908cc01345e68920e76f229c">neorv32_xirq_get_num</a></div><div class="ttdeci">int neorv32_xirq_get_num(void)</div><div class="ttdef"><b>Definition</b> neorv32_xirq.c:123</div></div> +<div class="ttc" id="aneorv32__xirq_8h_html_a76468156ef52b371e06bc2ca8eddcd27"><div class="ttname"><a href="neorv32__xirq_8h.html#a76468156ef52b371e06bc2ca8eddcd27">neorv32_xirq_global_enable</a></div><div class="ttdeci">void neorv32_xirq_global_enable(void)</div><div class="ttdef"><b>Definition</b> neorv32_xirq.c:99</div></div> +<div class="ttc" id="aneorv32__xirq_8h_html_a9129984f91c02afafaa072a5d86f9876"><div class="ttname"><a href="neorv32__xirq_8h.html#a9129984f91c02afafaa072a5d86f9876">neorv32_xirq_install</a></div><div class="ttdeci">int neorv32_xirq_install(int channel, void(*handler)(void))</div><div class="ttdef"><b>Definition</b> neorv32_xirq.c:214</div></div> +<div class="ttc" id="aneorv32__xirq_8h_html_a9295997fce7114a8205325c4d75dd200"><div class="ttname"><a href="neorv32__xirq_8h.html#a9295997fce7114a8205325c4d75dd200">neorv32_xirq_setup</a></div><div class="ttdeci">int neorv32_xirq_setup(void)</div><div class="ttdef"><b>Definition</b> neorv32_xirq.c:79</div></div> +<div class="ttc" id="aneorv32__xirq_8h_html_aaf30757d526030a8d81081915ab29a76"><div class="ttname"><a href="neorv32__xirq_8h.html#aaf30757d526030a8d81081915ab29a76">neorv32_xirq_available</a></div><div class="ttdeci">int neorv32_xirq_available(void)</div><div class="ttdef"><b>Definition</b> neorv32_xirq.c:60</div></div> +<div class="ttc" id="aneorv32__xirq_8h_html_abe63c0968c94b472082c8156a1a7db5c"><div class="ttname"><a href="neorv32__xirq_8h.html#abe63c0968c94b472082c8156a1a7db5c">neorv32_xirq_channel_enable</a></div><div class="ttdeci">void neorv32_xirq_channel_enable(int channel)</div><div class="ttdef"><b>Definition</b> neorv32_xirq.c:190</div></div> +<div class="ttc" id="aneorv32__xirq_8h_html_ac64d3ff5619968499bccebebe6a6cab3"><div class="ttname"><a href="neorv32__xirq_8h.html#ac64d3ff5619968499bccebebe6a6cab3">neorv32_xirq_global_disable</a></div><div class="ttdeci">void neorv32_xirq_global_disable(void)</div><div class="ttdef"><b>Definition</b> neorv32_xirq.c:111</div></div> +<div class="ttc" id="aneorv32__xirq_8h_html_ae17509ad0c828aa9b36747b253cdbf0a"><div class="ttname"><a href="neorv32__xirq_8h.html#ae17509ad0c828aa9b36747b253cdbf0a">neorv32_xirq_channel_disable</a></div><div class="ttdeci">void neorv32_xirq_channel_disable(int channel)</div><div class="ttdef"><b>Definition</b> neorv32_xirq.c:201</div></div> +<div class="ttc" id="astructneorv32__xirq__t_html"><div class="ttname"><a href="structneorv32__xirq__t.html">neorv32_xirq_t</a></div><div class="ttdef"><b>Definition</b> neorv32_xirq.h:27</div></div> +<div class="ttc" id="astructneorv32__xirq__t_html_a5fe0036a2cada585228b60aaa780e92a"><div class="ttname"><a href="structneorv32__xirq__t.html#a5fe0036a2cada585228b60aaa780e92a">neorv32_xirq_t::TPOL</a></div><div class="ttdeci">uint32_t TPOL</div><div class="ttdef"><b>Definition</b> neorv32_xirq.h:31</div></div> +<div class="ttc" id="astructneorv32__xirq__t_html_ab7117c210b5f0a8ebc369eeba6a4a5bc"><div class="ttname"><a href="structneorv32__xirq__t.html#ab7117c210b5f0a8ebc369eeba6a4a5bc">neorv32_xirq_t::TTYP</a></div><div class="ttdeci">uint32_t TTYP</div><div class="ttdef"><b>Definition</b> neorv32_xirq.h:30</div></div> +<div class="ttc" id="astructneorv32__xirq__t_html_ae4f7f3f41210ff329b6f82d5dfada88a"><div class="ttname"><a href="structneorv32__xirq__t.html#ae4f7f3f41210ff329b6f82d5dfada88a">neorv32_xirq_t::ESC</a></div><div class="ttdeci">uint32_t ESC</div><div class="ttdef"><b>Definition</b> neorv32_xirq.h:29</div></div> +<div class="ttc" id="astructneorv32__xirq__t_html_aef3c2b491207abd68bf6392f97096a74"><div class="ttname"><a href="structneorv32__xirq__t.html#aef3c2b491207abd68bf6392f97096a74">neorv32_xirq_t::EIE</a></div><div class="ttdeci">uint32_t EIE</div><div class="ttdef"><b>Definition</b> neorv32_xirq.h:28</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/neorv32_logo_small.png b/sw/neorv32_logo_small.png new file mode 100644 index 0000000000000000000000000000000000000000..457f55e5a767e4c258bc32345c58944c90506a98 GIT binary patch literal 4604 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 literal 0 HcmV?d00001 diff --git a/sw/onewire__aux_8h_source.html b/sw/onewire__aux_8h_source.html new file mode 100644 index 0000000000..d60491490e --- /dev/null +++ b/sw/onewire__aux_8h_source.html @@ -0,0 +1,402 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/demo_onewire/onewire_aux.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_3b3bafc48b460f797485cc75b94aa81c.html">demo_onewire</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="headertitle"><div class="title">onewire_aux.h</div></div> +</div><!--header--> +<div class="contents"> +<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// APPLICATION NOTE 187 &quot;1-Wire Search Algorithm&quot; by Maxim Integrated</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// https://www.maximintegrated.com/en/design/technical-documents/app-notes/1/187.html</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// modified for the NEORV32 Processor</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#ifndef onewire_aux_h</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#define onewire_aux_h</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;<a class="code" href="neorv32_8h.html">neorv32.h</a>&gt;</span></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">// definitions</span></div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#define FALSE 0</span></div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#define TRUE 1</span></div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dscrc_table[] = {</div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> 0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65,</div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> 157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220,</div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> 35,125,159,193, 66, 28,254,160,225,191, 93, 3,128,222, 60, 98,</div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> 190,224, 2, 92,223,129, 99, 61,124, 34,192,158, 29, 67,161,255,</div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> 70, 24,250,164, 39,121,155,197,132,218, 56,102,229,187, 89, 7,</div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> 219,133,103, 57,186,228, 6, 88, 25, 71,165,251,120, 38,196,154,</div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> 101, 59,217,135, 4, 90,184,230,167,249, 27, 69,198,152,122, 36,</div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> 248,166, 68, 26,153,199, 37,123, 58,100,134,216, 91, 5,231,185,</div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> 140,210, 48,110,237,179, 81, 15, 78, 16,242,172, 47,113,147,205,</div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> 17, 79,173,243,112, 46,204,146,211,141,111, 49,178,236, 14, 80,</div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> 175,241, 19, 77,206,144,114, 44,109, 51,209,143, 12, 82,176,238,</div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> 50,108,142,208, 83, 13,239,177,240,174, 76, 18,145,207, 45,115,</div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> 202,148,118, 40,171,245, 23, 73, 8, 86,180,234,105, 55,213,139,</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> 87, 9,235,181, 54,104,138,212,149,203, 41,119,244,170, 72, 22,</div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> 233,183, 85, 11,136,214, 52,106, 43,117,151,201, 74, 20,246,168,</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> 116, 42,200,150, 21, 75,169,247,182,232, 10, 84,215,137,107, 53</div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span>};</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">// method declarations</span></div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keywordtype">int</span> OWFirst();</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="keywordtype">int</span> OWNext();</div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="keywordtype">int</span> OWVerify();</div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keywordtype">void</span> OWTargetSetup(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> family_code);</div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="keywordtype">void</span> OWFamilySkipSetup();</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="keywordtype">int</span> OWSearch();</div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> docrc8(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> value);</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment">// global search state</span></div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ROM_NO[8];</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keywordtype">int</span> LastDiscrepancy;</div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="keywordtype">int</span> LastFamilyDiscrepancy;</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="keywordtype">int</span> LastDeviceFlag;</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> crc8;</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">//--------------------------------------------------------------------------</span></div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">// Find the &#39;first&#39; devices on the 1-Wire bus</span></div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment">// Return TRUE : device found, ROM number in ROM_NO buffer</span></div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment">// FALSE : no device present</span></div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment">//</span></div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="keywordtype">int</span> OWFirst()</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span>{</div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="comment">// reset the search state</span></div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> LastDiscrepancy = 0;</div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> LastDeviceFlag = FALSE;</div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> LastFamilyDiscrepancy = 0;</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">return</span> OWSearch();</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span>}</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment">//--------------------------------------------------------------------------</span></div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment">// Find the &#39;next&#39; devices on the 1-Wire bus</span></div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment">// Return TRUE : device found, ROM number in ROM_NO buffer</span></div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment">// FALSE : device not found, end of search</span></div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment">//</span></div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="keywordtype">int</span> OWNext()</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>{</div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="comment">// leave the search state alone</span></div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">return</span> OWSearch();</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>}</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="comment">//--------------------------------------------------------------------------</span></div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="comment">// Perform the 1-Wire Search Algorithm on the 1-Wire bus using the existing</span></div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment">// search state.</span></div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment">// Return TRUE : device found, ROM number in ROM_NO buffer</span></div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="comment">// FALSE : device not found, end of search</span></div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment">//</span></div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="keywordtype">int</span> OWSearch()</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span>{</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">int</span> id_bit_number;</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">int</span> last_zero, rom_byte_number, search_result;</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">int</span> id_bit, cmp_id_bit;</div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> rom_byte_mask, search_direction;</div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="comment">// initialize for search</span></div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> id_bit_number = 1;</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> last_zero = 0;</div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> rom_byte_number = 0;</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> rom_byte_mask = 1;</div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> search_result = 0;</div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> crc8 = 0;</div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="comment">// if the last call was not the last one</span></div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span> (!LastDeviceFlag)</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> {</div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="comment">// 1-Wire reset</span></div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="neorv32__onewire_8c.html#af8ca6be495176797b7da3857e2f794f9">neorv32_onewire_reset_blocking</a>())</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> {</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="comment">// reset the search</span></div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> LastDiscrepancy = 0;</div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> LastDeviceFlag = FALSE;</div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> LastFamilyDiscrepancy = 0;</div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> FALSE;</div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> }</div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="comment">// issue the search command</span></div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <a class="code hl_function" href="neorv32__onewire_8c.html#ac78557c77482b59394677f42fda4fdf1">neorv32_onewire_write_byte_blocking</a>(0xF0);</div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="comment">// loop to do the search</span></div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">do</span></div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> {</div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="comment">// read a bit and its complement</span></div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> id_bit = <a class="code hl_function" href="neorv32__onewire_8c.html#ace8b7cf697b068b6b51676d84dec5960">neorv32_onewire_read_bit_blocking</a>();</div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> cmp_id_bit = <a class="code hl_function" href="neorv32__onewire_8c.html#ace8b7cf697b068b6b51676d84dec5960">neorv32_onewire_read_bit_blocking</a>();</div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div> +<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="comment">// check for no devices on 1-wire</span></div> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span> ((id_bit == 1) &amp;&amp; (cmp_id_bit == 1))</div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> {</div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="comment">// all devices coupled have 0 or 1</span></div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">if</span> (id_bit != cmp_id_bit)</div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> search_direction = id_bit; <span class="comment">// bit write value for search</span></div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> {</div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="comment">// if this discrepancy if before the Last Discrepancy</span></div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// on a previous next then pick the same as last time</span></div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">if</span> (id_bit_number &lt; LastDiscrepancy)</div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> search_direction = ((ROM_NO[rom_byte_number] &amp; rom_byte_mask) &gt; 0);</div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="comment">// if equal to last pick 1, if not then pick 0</span></div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> search_direction = (id_bit_number == LastDiscrepancy);</div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="comment">// if 0 was picked then record its position in LastZero</span></div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> (search_direction == 0)</div> +<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> {</div> +<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> last_zero = id_bit_number;</div> +<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div> +<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="comment">// check for Last discrepancy in family</span></div> +<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">if</span> (last_zero &lt; 9)</div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> LastFamilyDiscrepancy = last_zero;</div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> }</div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> }</div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// set or clear the bit in the ROM byte rom_byte_number</span></div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// with mask rom_byte_mask</span></div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span> (search_direction == 1)</div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> ROM_NO[rom_byte_number] |= rom_byte_mask;</div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> ROM_NO[rom_byte_number] &amp;= ~rom_byte_mask;</div> +<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div> +<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// serial number search direction write bit</span></div> +<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <a class="code hl_function" href="neorv32__onewire_8c.html#a6f7b6690a2437e0b574a8a9a23dc0eaa">neorv32_onewire_write_bit_blocking</a>(search_direction);</div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div> +<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="comment">// increment the byte counter id_bit_number</span></div> +<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="comment">// and shift the mask rom_byte_mask</span></div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> id_bit_number++;</div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> rom_byte_mask &lt;&lt;= 1;</div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> </div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="comment">// if the mask is 0 then go to new SerialNum byte rom_byte_number and reset mask</span></div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">if</span> (rom_byte_mask == 0)</div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> {</div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> docrc8(ROM_NO[rom_byte_number]); <span class="comment">// accumulate the CRC</span></div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> rom_byte_number++;</div> +<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> rom_byte_mask = 1;</div> +<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> }</div> +<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> }</div> +<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> }</div> +<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">while</span>(rom_byte_number &lt; 8); <span class="comment">// loop until through all ROM bytes 0-7</span></div> +<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> </div> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="comment">// if the search was successful then</span></div> +<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span> (!((id_bit_number &lt; 65) || (crc8 != 0)))</div> +<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> {</div> +<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="comment">// search successful so set LastDiscrepancy,LastDeviceFlag,search_result</span></div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> LastDiscrepancy = last_zero;</div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="comment">// check for last device</span></div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span> (LastDiscrepancy == 0)</div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> LastDeviceFlag = TRUE;</div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> search_result = TRUE;</div> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> }</div> +<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> }</div> +<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div> +<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="comment">// if no device found then reset counters so next &#39;search&#39; will be like a first</span></div> +<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span> (!search_result || !ROM_NO[0])</div> +<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> {</div> +<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> LastDiscrepancy = 0;</div> +<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> LastDeviceFlag = FALSE;</div> +<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> LastFamilyDiscrepancy = 0;</div> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> search_result = FALSE;</div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> }</div> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div> +<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">return</span> search_result;</div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span>}</div> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span><span class="comment">//--------------------------------------------------------------------------</span></div> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span><span class="comment">// Verify the device with the ROM number in ROM_NO buffer is present.</span></div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span><span class="comment">// Return TRUE : device verified present</span></div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span><span class="comment">// FALSE : device not present</span></div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="comment">//</span></div> +<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span><span class="keywordtype">int</span> OWVerify()</div> +<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span>{</div> +<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> rom_backup[8];</div> +<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordtype">int</span> i,rslt,ld_backup,ldf_backup,lfd_backup;</div> +<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> </div> +<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="comment">// keep a backup copy of the current state</span></div> +<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">for</span> (i = 0; i &lt; 8; i++)</div> +<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> rom_backup[i] = ROM_NO[i];</div> +<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> ld_backup = LastDiscrepancy;</div> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> ldf_backup = LastDeviceFlag;</div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> lfd_backup = LastFamilyDiscrepancy;</div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="comment">// set search to find the same device</span></div> +<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> LastDiscrepancy = 64;</div> +<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> LastDeviceFlag = FALSE;</div> +<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div> +<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">if</span> (OWSearch())</div> +<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> {</div> +<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="comment">// check if same device found</span></div> +<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> rslt = TRUE;</div> +<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">for</span> (i = 0; i &lt; 8; i++)</div> +<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> {</div> +<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">if</span> (rom_backup[i] != ROM_NO[i])</div> +<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> {</div> +<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> rslt = FALSE;</div> +<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> }</div> +<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> }</div> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> }</div> +<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> rslt = FALSE;</div> +<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> </div> +<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="comment">// restore the search state</span></div> +<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">for</span> (i = 0; i &lt; 8; i++)</div> +<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> ROM_NO[i] = rom_backup[i];</div> +<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> LastDiscrepancy = ld_backup;</div> +<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> LastDeviceFlag = ldf_backup;</div> +<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> LastFamilyDiscrepancy = lfd_backup;</div> +<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> </div> +<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="comment">// return the result of the verify</span></div> +<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">return</span> rslt;</div> +<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span>}</div> +<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> </div> +<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="comment">//--------------------------------------------------------------------------</span></div> +<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span><span class="comment">// Setup the search to find the device type &#39;family_code&#39; on the next call</span></div> +<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span><span class="comment">// to OWNext() if it is present.</span></div> +<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span><span class="comment">//</span></div> +<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span><span class="keywordtype">void</span> OWTargetSetup(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> family_code)</div> +<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span>{</div> +<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keywordtype">int</span> i;</div> +<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> </div> +<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="comment">// set the search state to find SearchFamily type devices</span></div> +<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> ROM_NO[0] = family_code;</div> +<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">for</span> (i = 1; i &lt; 8; i++)</div> +<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> ROM_NO[i] = 0;</div> +<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> LastDiscrepancy = 64;</div> +<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> LastFamilyDiscrepancy = 0;</div> +<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> LastDeviceFlag = FALSE;</div> +<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span>}</div> +<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> </div> +<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span><span class="comment">//--------------------------------------------------------------------------</span></div> +<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span><span class="comment">// Setup the search to skip the current device type on the next call</span></div> +<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span><span class="comment">// to OWNext().</span></div> +<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span><span class="comment">//</span></div> +<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span><span class="keywordtype">void</span> OWFamilySkipSetup()</div> +<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span>{</div> +<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <span class="comment">// set the Last discrepancy to last family discrepancy</span></div> +<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> LastDiscrepancy = LastFamilyDiscrepancy;</div> +<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> LastFamilyDiscrepancy = 0;</div> +<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> </div> +<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="comment">// check for end of list</span></div> +<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">if</span> (LastDiscrepancy == 0)</div> +<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> LastDeviceFlag = TRUE;</div> +<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span>}</div> +<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> </div> +<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span><span class="comment">//--------------------------------------------------------------------------</span></div> +<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span><span class="comment">// Calculate the CRC8 of the byte value provided with the current</span></div> +<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span><span class="comment">// global &#39;crc8&#39; value.</span></div> +<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span><span class="comment">// Returns current global crc8 value</span></div> +<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="comment">//</span></div> +<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> docrc8(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> value)</div> +<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span>{</div> +<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="comment">// See Application Note 27</span></div> +<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> </div> +<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="comment">// TEST BUILD</span></div> +<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> crc8 = dscrc_table[crc8 ^ value];</div> +<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">return</span> crc8;</div> +<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span>}</div> +<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div> +<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><span class="preprocessor">#endif </span><span class="comment">// onewire_aux_h</span></div> +<div class="ttc" id="aneorv32_8h_html"><div class="ttname"><a href="neorv32_8h.html">neorv32.h</a></div><div class="ttdoc">Main NEORV32 core library / driver / HAL include file.</div></div> +<div class="ttc" id="aneorv32__onewire_8c_html_a6f7b6690a2437e0b574a8a9a23dc0eaa"><div class="ttname"><a href="neorv32__onewire_8c.html#a6f7b6690a2437e0b574a8a9a23dc0eaa">neorv32_onewire_write_bit_blocking</a></div><div class="ttdeci">void neorv32_onewire_write_bit_blocking(uint8_t bit)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:332</div></div> +<div class="ttc" id="aneorv32__onewire_8c_html_ac78557c77482b59394677f42fda4fdf1"><div class="ttname"><a href="neorv32__onewire_8c.html#ac78557c77482b59394677f42fda4fdf1">neorv32_onewire_write_byte_blocking</a></div><div class="ttdeci">void neorv32_onewire_write_byte_blocking(uint8_t byte)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:372</div></div> +<div class="ttc" id="aneorv32__onewire_8c_html_ace8b7cf697b068b6b51676d84dec5960"><div class="ttname"><a href="neorv32__onewire_8c.html#ace8b7cf697b068b6b51676d84dec5960">neorv32_onewire_read_bit_blocking</a></div><div class="ttdeci">uint8_t neorv32_onewire_read_bit_blocking(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:312</div></div> +<div class="ttc" id="aneorv32__onewire_8c_html_af8ca6be495176797b7da3857e2f794f9"><div class="ttname"><a href="neorv32__onewire_8c.html#af8ca6be495176797b7da3857e2f794f9">neorv32_onewire_reset_blocking</a></div><div class="ttdeci">int neorv32_onewire_reset_blocking(void)</div><div class="ttdef"><b>Definition</b> neorv32_onewire.c:292</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/open.png b/sw/open.png new file mode 100644 index 0000000000000000000000000000000000000000..30f75c7efe2dd0c9e956e35b69777a02751f048b GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM<Rdl=8h W@EqZ{ytxBt8iS{+pUXO@geCxcDJg#d literal 0 HcmV?d00001 diff --git a/sw/pages.html b/sw/pages.html new file mode 100644 index 0000000000..494e0891e3 --- /dev/null +++ b/sw/pages.html @@ -0,0 +1,104 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: Related Pages</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="doc-content"> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="header"> + <div class="headertitle"><div class="title">Related Pages</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory"> +<table class="directory"> +<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_README.html" target="_self">README</a></td><td class="desc"></td></tr> +</table> +</div><!-- directory --> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/plus.svg b/sw/plus.svg new file mode 100644 index 0000000000..0752016553 --- /dev/null +++ b/sw/plus.svg @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> + <g> + <rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" /> + <rect style="fill:#fcfcfc;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" /> + <rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" /> + <rect style="fill:#808080;stroke-width:0" width="15.874998" height="52.916668" x="44.979168" y="26.458332" /> + </g> +</svg> diff --git a/sw/plusd.svg b/sw/plusd.svg new file mode 100644 index 0000000000..0c65bfe946 --- /dev/null +++ b/sw/plusd.svg @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> + <g> + <rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" /> + <rect style="fill:#000000;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" /> + <rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" /> + <rect style="fill:#808080;stroke-width:0" width="15.874998" height="52.916668" x="44.979168" y="26.458332" /> + </g> +</svg> diff --git a/sw/processor__check_2main_8c.html b/sw/processor__check_2main_8c.html new file mode 100644 index 0000000000..23ee0c1341 --- /dev/null +++ b/sw/processor__check_2main_8c.html @@ -0,0 +1,498 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: sw/example/processor_check/main.c File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html">example</a></li><li class="navelem"><a class="el" href="dir_7a2c74f70a4cdf2e836a07048e2f71dd.html">processor_check</a></li> </ul> +</div> +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">main.c File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p>CPU/Processor test/verification program. +<a href="#details">More...</a></p> +<div class="textblock"><code>#include &lt;<a class="el" href="neorv32_8h_source.html">neorv32.h</a>&gt;</code><br /> +<code>#include &lt;string.h&gt;</code><br /> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">User configuration</div></td></tr> +<tr class="memitem:ad4455691936f92fdd6c37566fc58ba1f" id="r_ad4455691936f92fdd6c37566fc58ba1f"><td class="memItemLeft" align="right" valign="top"><a id="ad4455691936f92fdd6c37566fc58ba1f" name="ad4455691936f92fdd6c37566fc58ba1f"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>BAUD_RATE</b>&#160;&#160;&#160;(19200)</td></tr> +<tr class="separator:ad4455691936f92fdd6c37566fc58ba1f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a58c2e480e4c407c3a0d8639d3c8fbe93" id="r_a58c2e480e4c407c3a0d8639d3c8fbe93"><td class="memItemLeft" align="right" valign="top"><a id="a58c2e480e4c407c3a0d8639d3c8fbe93" name="a58c2e480e4c407c3a0d8639d3c8fbe93"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>ADDR_UNALIGNED_1</b>&#160;&#160;&#160;(0x00000001UL)</td></tr> +<tr class="separator:a58c2e480e4c407c3a0d8639d3c8fbe93"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1197de60262f6f7ef6b7be05637f41f9" id="r_a1197de60262f6f7ef6b7be05637f41f9"><td class="memItemLeft" align="right" valign="top"><a id="a1197de60262f6f7ef6b7be05637f41f9" name="a1197de60262f6f7ef6b7be05637f41f9"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>ADDR_UNALIGNED_3</b>&#160;&#160;&#160;(0x00000003UL)</td></tr> +<tr class="separator:a1197de60262f6f7ef6b7be05637f41f9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a577145c482d9444e298153c98f37c210" id="r_a577145c482d9444e298153c98f37c210"><td class="memItemLeft" align="right" valign="top"><a id="a577145c482d9444e298153c98f37c210" name="a577145c482d9444e298153c98f37c210"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>ADDR_UNREACHABLE</b>&#160;&#160;&#160;(<a class="el" href="neorv32_8h.html#a9bf0149681677f7d87abf8f62e2d9a3d">NEORV32_DM_BASE</a>)</td></tr> +<tr class="separator:a577145c482d9444e298153c98f37c210"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a32aece76361713a064649137ee25b1a4" id="r_a32aece76361713a064649137ee25b1a4"><td class="memItemLeft" align="right" valign="top"><a id="a32aece76361713a064649137ee25b1a4" name="a32aece76361713a064649137ee25b1a4"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>EXT_MEM_BASE</b>&#160;&#160;&#160;(0xF0000000UL)</td></tr> +<tr class="separator:a32aece76361713a064649137ee25b1a4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9c9c6c2f881f8c3a0ae6c1f7d7597252" id="r_a9c9c6c2f881f8c3a0ae6c1f7d7597252"><td class="memItemLeft" align="right" valign="top"><a id="a9c9c6c2f881f8c3a0ae6c1f7d7597252" name="a9c9c6c2f881f8c3a0ae6c1f7d7597252"></a> +#define&#160;</td><td class="memItemRight" valign="bottom"><b>SIM_TRIG_BASE</b>&#160;&#160;&#160;(0xFF000000UL)</td></tr> +<tr class="separator:a9c9c6c2f881f8c3a0ae6c1f7d7597252"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr><td colspan="2"><div class="groupHeader">UART print macros</div></td></tr> +<tr class="memitem:acbfde3de517fdc818a720383ec516d5b" id="r_acbfde3de517fdc818a720383ec516d5b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acbfde3de517fdc818a720383ec516d5b">PRINT_STANDARD</a>(...)</td></tr> +<tr class="separator:acbfde3de517fdc818a720383ec516d5b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acaa90e675a32d0f349ece12c9437e98f" id="r_acaa90e675a32d0f349ece12c9437e98f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acaa90e675a32d0f349ece12c9437e98f">PRINT_CRITICAL</a>(...)</td></tr> +<tr class="separator:acaa90e675a32d0f349ece12c9437e98f"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ada24f2cd9d2d384265517f539711de62" id="r_ada24f2cd9d2d384265517f539711de62"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ada24f2cd9d2d384265517f539711de62">sim_irq_trigger</a> (uint32_t sel)</td></tr> +<tr class="separator:ada24f2cd9d2d384265517f539711de62"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9a64ce0ee69c4c32cecc8b2b2746604c" id="r_a9a64ce0ee69c4c32cecc8b2b2746604c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9a64ce0ee69c4c32cecc8b2b2746604c">global_trap_handler</a> (void)</td></tr> +<tr class="separator:a9a64ce0ee69c4c32cecc8b2b2746604c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a349743a03307abb5130a3e89d903971b" id="r_a349743a03307abb5130a3e89d903971b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a349743a03307abb5130a3e89d903971b">rte_service_handler</a> (void)</td></tr> +<tr class="separator:a349743a03307abb5130a3e89d903971b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0d695ebfaae3b4614ddb62640cbf8b7b" id="r_a0d695ebfaae3b4614ddb62640cbf8b7b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0d695ebfaae3b4614ddb62640cbf8b7b">vectored_irq_table</a> (void)</td></tr> +<tr class="separator:a0d695ebfaae3b4614ddb62640cbf8b7b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9504ca74fdb80711a88d2a16d4cb4cf4" id="r_a9504ca74fdb80711a88d2a16d4cb4cf4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9504ca74fdb80711a88d2a16d4cb4cf4">vectored_global_handler</a> (void)</td></tr> +<tr class="separator:a9504ca74fdb80711a88d2a16d4cb4cf4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1a455bede4ab48f32d3ed0868e398044" id="r_a1a455bede4ab48f32d3ed0868e398044"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1a455bede4ab48f32d3ed0868e398044">vectored_mei_handler</a> (void)</td></tr> +<tr class="separator:a1a455bede4ab48f32d3ed0868e398044"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a31d9e432f6a368e6222f5e0907eeb6f4" id="r_a31d9e432f6a368e6222f5e0907eeb6f4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a31d9e432f6a368e6222f5e0907eeb6f4">hw_breakpoint_handler</a> (void)</td></tr> +<tr class="separator:a31d9e432f6a368e6222f5e0907eeb6f4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac91bfdd45696444673dc7d6b1b644082" id="r_ac91bfdd45696444673dc7d6b1b644082"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac91bfdd45696444673dc7d6b1b644082">trigger_module_dummy</a> (void)</td></tr> +<tr class="separator:ac91bfdd45696444673dc7d6b1b644082"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa4fe70578c4dccabe1e31fae941378cb" id="r_aa4fe70578c4dccabe1e31fae941378cb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa4fe70578c4dccabe1e31fae941378cb">xirq_trap_handler0</a> (void)</td></tr> +<tr class="separator:aa4fe70578c4dccabe1e31fae941378cb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a277cb06ef74e4cfe1ef783069f9b6527" id="r_a277cb06ef74e4cfe1ef783069f9b6527"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a277cb06ef74e4cfe1ef783069f9b6527">xirq_trap_handler1</a> (void)</td></tr> +<tr class="separator:a277cb06ef74e4cfe1ef783069f9b6527"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae61d39109b2747429ec3a3c1b5533598" id="r_ae61d39109b2747429ec3a3c1b5533598"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae61d39109b2747429ec3a3c1b5533598">test_ok</a> (void)</td></tr> +<tr class="separator:ae61d39109b2747429ec3a3c1b5533598"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1e0a5d63896fa26a6c25c0012fc6b938" id="r_a1e0a5d63896fa26a6c25c0012fc6b938"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1e0a5d63896fa26a6c25c0012fc6b938">test_fail</a> (void)</td></tr> +<tr class="separator:a1e0a5d63896fa26a6c25c0012fc6b938"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr> +<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:ae0783283256fd1826040b1090342a4d2" id="r_ae0783283256fd1826040b1090342a4d2"><td class="memItemLeft" align="right" valign="top"><a id="ae0783283256fd1826040b1090342a4d2" name="ae0783283256fd1826040b1090342a4d2"></a> +const uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>mcause_never_c</b> = 0x80000000UL</td></tr> +<tr class="separator:ae0783283256fd1826040b1090342a4d2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a109a78ab4c60a2b9c00c8fd6174d2af7" id="r_a109a78ab4c60a2b9c00c8fd6174d2af7"><td class="memItemLeft" align="right" valign="top"><a id="a109a78ab4c60a2b9c00c8fd6174d2af7" name="a109a78ab4c60a2b9c00c8fd6174d2af7"></a> +volatile int&#160;</td><td class="memItemRight" valign="bottom"><b>cnt_fail</b> = 0</td></tr> +<tr class="separator:a109a78ab4c60a2b9c00c8fd6174d2af7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a144bdb576c534127820da75219d1ae13" id="r_a144bdb576c534127820da75219d1ae13"><td class="memItemLeft" align="right" valign="top"><a id="a144bdb576c534127820da75219d1ae13" name="a144bdb576c534127820da75219d1ae13"></a> +volatile int&#160;</td><td class="memItemRight" valign="bottom"><b>cnt_ok</b> = 0</td></tr> +<tr class="separator:a144bdb576c534127820da75219d1ae13"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac778536f0a8aa9e25139fd2eab0febb8" id="r_ac778536f0a8aa9e25139fd2eab0febb8"><td class="memItemLeft" align="right" valign="top"><a id="ac778536f0a8aa9e25139fd2eab0febb8" name="ac778536f0a8aa9e25139fd2eab0febb8"></a> +volatile int&#160;</td><td class="memItemRight" valign="bottom"><b>cnt_test</b> = 0</td></tr> +<tr class="separator:ac778536f0a8aa9e25139fd2eab0febb8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae2b99614860e64dd115f1061d6e81439" id="r_ae2b99614860e64dd115f1061d6e81439"><td class="memItemLeft" align="right" valign="top"><a id="ae2b99614860e64dd115f1061d6e81439" name="ae2b99614860e64dd115f1061d6e81439"></a> +volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>num_hpm_cnts_global</b> = 0</td></tr> +<tr class="separator:ae2b99614860e64dd115f1061d6e81439"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa3a6d1f668e064493017c66046f24843" id="r_aa3a6d1f668e064493017c66046f24843"><td class="memItemLeft" align="right" valign="top"><a id="aa3a6d1f668e064493017c66046f24843" name="aa3a6d1f668e064493017c66046f24843"></a> +volatile int&#160;</td><td class="memItemRight" valign="bottom"><b>vectored_mei_handler_ack</b> = 0</td></tr> +<tr class="separator:aa3a6d1f668e064493017c66046f24843"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa7a94a1ae71c7ab1650351c2af18b745" id="r_aa7a94a1ae71c7ab1650351c2af18b745"><td class="memItemLeft" align="right" valign="top"><a id="aa7a94a1ae71c7ab1650351c2af18b745" name="aa7a94a1ae71c7ab1650351c2af18b745"></a> +volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>xirq_trap_handler_ack</b> = 0</td></tr> +<tr class="separator:aa7a94a1ae71c7ab1650351c2af18b745"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a49b20a83a39c69f841db1ca6653a5d16" id="r_a49b20a83a39c69f841db1ca6653a5d16"><td class="memItemLeft" align="right" valign="top"><a id="a49b20a83a39c69f841db1ca6653a5d16" name="a49b20a83a39c69f841db1ca6653a5d16"></a> +volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>hw_brk_mscratch_ok</b> = 0</td></tr> +<tr class="separator:a49b20a83a39c69f841db1ca6653a5d16"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a264dc6692665c4813b594da243f3a7e2" id="r_a264dc6692665c4813b594da243f3a7e2"><td class="memItemLeft" align="right" valign="top"><a id="a264dc6692665c4813b594da243f3a7e2" name="a264dc6692665c4813b594da243f3a7e2"></a> +volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>dma_src</b></td></tr> +<tr class="separator:a264dc6692665c4813b594da243f3a7e2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acd15f2c828419bbdaf6acf27404df5a9" id="r_acd15f2c828419bbdaf6acf27404df5a9"><td class="memItemLeft" align="right" valign="top"><a id="acd15f2c828419bbdaf6acf27404df5a9" name="acd15f2c828419bbdaf6acf27404df5a9"></a> +volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>store_access_addr</b> [2]</td></tr> +<tr class="separator:acd15f2c828419bbdaf6acf27404df5a9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9141e95a5f98420ddf8a43e6d20ff6dc" id="r_a9141e95a5f98420ddf8a43e6d20ff6dc"><td class="memItemLeft" align="right" valign="top"><a id="a9141e95a5f98420ddf8a43e6d20ff6dc" name="a9141e95a5f98420ddf8a43e6d20ff6dc"></a> +volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>amo_var</b></td></tr> +<tr class="separator:a9141e95a5f98420ddf8a43e6d20ff6dc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1a3f256100e7e01c261bac5c7130ec1a" id="r_a1a3f256100e7e01c261bac5c7130ec1a"><td class="memItemLeft" align="right" valign="top"><a id="a1a3f256100e7e01c261bac5c7130ec1a" name="a1a3f256100e7e01c261bac5c7130ec1a"></a> +volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>pmp_access</b> [2]</td></tr> +<tr class="separator:a1a3f256100e7e01c261bac5c7130ec1a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7ad64774414ab59e4e1ed52d24f62f71" id="r_a7ad64774414ab59e4e1ed52d24f62f71"><td class="memItemLeft" align="right" valign="top"><a id="a7ad64774414ab59e4e1ed52d24f62f71" name="a7ad64774414ab59e4e1ed52d24f62f71"></a> +volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>trap_cnt</b></td></tr> +<tr class="separator:a7ad64774414ab59e4e1ed52d24f62f71"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a58d31bd38ed6dca5083f002b70ad73c6" id="r_a58d31bd38ed6dca5083f002b70ad73c6"><td class="memItemLeft" align="right" valign="top"><a id="a58d31bd38ed6dca5083f002b70ad73c6" name="a58d31bd38ed6dca5083f002b70ad73c6"></a> +volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>pmp_num_regions</b></td></tr> +<tr class="separator:a58d31bd38ed6dca5083f002b70ad73c6"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>CPU/Processor test/verification program. </p> +<dl class="section author"><dt>Author</dt><dd>Stephan Nolting </dd></dl> +</div><h2 class="groupheader">Macro Definition Documentation</h2> +<a id="acaa90e675a32d0f349ece12c9437e98f" name="acaa90e675a32d0f349ece12c9437e98f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acaa90e675a32d0f349ece12c9437e98f">&#9670;&#160;</a></span>PRINT_CRITICAL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define PRINT_CRITICAL</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em></em></span>...</td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line">neorv32_uart0_printf(__VA_ARGS__)</div> +</div><!-- fragment --> +</div> +</div> +<a id="acbfde3de517fdc818a720383ec516d5b" name="acbfde3de517fdc818a720383ec516d5b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acbfde3de517fdc818a720383ec516d5b">&#9670;&#160;</a></span>PRINT_STANDARD</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define PRINT_STANDARD</td> + <td>(</td> + <td class="paramtype"></td> <td class="paramname"><span class="paramname"><em></em></span>...</td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<b>Value:</b><div class="fragment"><div class="line">neorv32_uart0_printf(__VA_ARGS__)</div> +</div><!-- fragment --> +</div> +</div> +<h2 class="groupheader">Function Documentation</h2> +<a id="a9a64ce0ee69c4c32cecc8b2b2746604c" name="a9a64ce0ee69c4c32cecc8b2b2746604c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9a64ce0ee69c4c32cecc8b2b2746604c">&#9670;&#160;</a></span>global_trap_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void global_trap_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Trap handler for ALL exceptions/interrupts. </p> + +</div> +</div> +<a id="a31d9e432f6a368e6222f5e0907eeb6f4" name="a31d9e432f6a368e6222f5e0907eeb6f4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a31d9e432f6a368e6222f5e0907eeb6f4">&#9670;&#160;</a></span>hw_breakpoint_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void hw_breakpoint_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Hardware-breakpoint trap handler </p> + +</div> +</div> +<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int main </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>High-level CPU/processor test program.</p> +<dl class="section warning"><dt>Warning</dt><dd>This test is intended for simulation only. </dd> +<dd> +This test requires all optional extensions/modules to be enabled.</dd></dl> +<dl class="section return"><dt>Returns</dt><dd>0 if execution was successful </dd></dl> + +</div> +</div> +<a id="a349743a03307abb5130a3e89d903971b" name="a349743a03307abb5130a3e89d903971b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a349743a03307abb5130a3e89d903971b">&#9670;&#160;</a></span>rte_service_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void rte_service_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>RTE's ecall "system service handler"; modifies application context to provide "system services" </p> + +</div> +</div> +<a id="ada24f2cd9d2d384265517f539711de62" name="ada24f2cd9d2d384265517f539711de62"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ada24f2cd9d2d384265517f539711de62">&#9670;&#160;</a></span>sim_irq_trigger()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void sim_irq_trigger </td> + <td>(</td> + <td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>sel</em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Simulation-based function to set/clear CPU interrupts (MSI, MEI).</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramdir">[in]</td><td class="paramname">sel</td><td>IRQ select mask (bit positions according to <a class="el" href="neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33">NEORV32_CSR_MIE_enum</a>). </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a1e0a5d63896fa26a6c25c0012fc6b938" name="a1e0a5d63896fa26a6c25c0012fc6b938"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1e0a5d63896fa26a6c25c0012fc6b938">&#9670;&#160;</a></span>test_fail()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void test_fail </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Test results helper function: Shows "[FAIL]" and increments global cnt_fail </p> + +</div> +</div> +<a id="ae61d39109b2747429ec3a3c1b5533598" name="ae61d39109b2747429ec3a3c1b5533598"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae61d39109b2747429ec3a3c1b5533598">&#9670;&#160;</a></span>test_ok()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void test_ok </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Test results helper function: Shows "[ok]" and increments global cnt_ok </p> + +</div> +</div> +<a id="ac91bfdd45696444673dc7d6b1b644082" name="ac91bfdd45696444673dc7d6b1b644082"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac91bfdd45696444673dc7d6b1b644082">&#9670;&#160;</a></span>trigger_module_dummy()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void trigger_module_dummy </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Test function for the trigger module </p> + +</div> +</div> +<a id="a9504ca74fdb80711a88d2a16d4cb4cf4" name="a9504ca74fdb80711a88d2a16d4cb4cf4"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9504ca74fdb80711a88d2a16d4cb4cf4">&#9670;&#160;</a></span>vectored_global_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void vectored_global_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Vectored trap handler for ALL exceptions/interrupts. </p> + +</div> +</div> +<a id="a0d695ebfaae3b4614ddb62640cbf8b7b" name="a0d695ebfaae3b4614ddb62640cbf8b7b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0d695ebfaae3b4614ddb62640cbf8b7b">&#9670;&#160;</a></span>vectored_irq_table()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void vectored_irq_table </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Vectored mtvec mode jump table. </p> + +</div> +</div> +<a id="a1a455bede4ab48f32d3ed0868e398044" name="a1a455bede4ab48f32d3ed0868e398044"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1a455bede4ab48f32d3ed0868e398044">&#9670;&#160;</a></span>vectored_mei_handler()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void vectored_mei_handler </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>Machine external interrupt handler. </p> + +</div> +</div> +<a id="aa4fe70578c4dccabe1e31fae941378cb" name="aa4fe70578c4dccabe1e31fae941378cb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa4fe70578c4dccabe1e31fae941378cb">&#9670;&#160;</a></span>xirq_trap_handler0()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void xirq_trap_handler0 </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>XIRQ handler channel 0. </p> + +</div> +</div> +<a id="a277cb06ef74e4cfe1ef783069f9b6527" name="a277cb06ef74e4cfe1ef783069f9b6527"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a277cb06ef74e4cfe1ef783069f9b6527">&#9670;&#160;</a></span>xirq_trap_handler1()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void xirq_trap_handler1 </td> + <td>(</td> + <td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> +<p>XIRQ handler channel 1. </p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/resize.js b/sw/resize.js new file mode 100644 index 0000000000..178d03bcb8 --- /dev/null +++ b/sw/resize.js @@ -0,0 +1,147 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + // workaround for firefox + $("body").css({overflow: "hidden"}); + } + $(window).on('load',function() { resizeHeight(treeview); }); +} +/* @license-end */ diff --git a/sw/search/all_0.js b/sw/search/all_0.js new file mode 100644 index 0000000000..7b0e67ce96 --- /dev/null +++ b/sw/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['1_20overview_0',['1. Overview',['../md_README.html#autotoc_md1',1,'']]] +]; diff --git a/sw/search/all_1.js b/sw/search/all_1.js new file mode 100644 index 0000000000..bf3dd22bfa --- /dev/null +++ b/sw/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['2_20features_0',['2. Features',['../md_README.html#autotoc_md4',1,'']]] +]; diff --git a/sw/search/all_10.js b/sw/search/all_10.js new file mode 100644 index 0000000000..f6d15f15af --- /dev/null +++ b/sw/search/all_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['key_0',['key',['../demo__cfu_2main_8c.html#ab5c498f9da12ab2d6ddc89bf4a46dec6',1,'main.c']]], + ['key_20features_1',['Key Features',['../md_README.html#autotoc_md2',1,'']]] +]; diff --git a/sw/search/all_11.js b/sw/search/all_11.js new file mode 100644 index 0000000000..1245a0e73f --- /dev/null +++ b/sw/search/all_11.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['legal_0',[':copyright: Legal',['../md_README.html#autotoc_md13',1,'']]], + ['let_20s_20get_20it_20started_1',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]] +]; diff --git a/sw/search/all_12.js b/sw/search/all_12.js new file mode 100644 index 0000000000..b23f25852f --- /dev/null +++ b/sw/search/all_12.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['main_0',['main',['../bootloader_8c.html#a840291bc02cba5474a4cb46a9b9566fe',1,'main(void):&#160;bootloader.c'],['../atomic__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../bus__explorer_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__blink__led_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__cfs_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__cfu_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__clint_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__crc_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__dma_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__emulate__unaligned_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__gptmr_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__hpm_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__neopixel_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__newlib_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__onewire_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__pwm_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__sdi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__slink_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__spi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__spi__irq_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__trng_2main_8c.html#a840291bc02cba5474a4cb46a9b9566fe',1,'main(void):&#160;main.c'],['../demo__twi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__wdt_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__xip_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__xirq_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../float__corner__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../floating__point__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../game__of__life_2main_8c.html#a840291bc02cba5474a4cb46a9b9566fe',1,'main(void):&#160;main.c'],['../hello__world_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../processor__check_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c']]], + ['main_2ec_1',['main.c',['../atomic__test_2main_8c.html',1,'(Global Namespace)'],['../bus__explorer_2main_8c.html',1,'(Global Namespace)'],['../demo__blink__led_2main_8c.html',1,'(Global Namespace)'],['../demo__cfs_2main_8c.html',1,'(Global Namespace)'],['../demo__cfu_2main_8c.html',1,'(Global Namespace)'],['../demo__clint_2main_8c.html',1,'(Global Namespace)'],['../demo__crc_2main_8c.html',1,'(Global Namespace)'],['../demo__dma_2main_8c.html',1,'(Global Namespace)'],['../demo__emulate__unaligned_2main_8c.html',1,'(Global Namespace)'],['../demo__gptmr_2main_8c.html',1,'(Global Namespace)'],['../demo__hpm_2main_8c.html',1,'(Global Namespace)'],['../demo__neopixel_2main_8c.html',1,'(Global Namespace)'],['../demo__newlib_2main_8c.html',1,'(Global Namespace)'],['../demo__onewire_2main_8c.html',1,'(Global Namespace)'],['../demo__pwm_2main_8c.html',1,'(Global Namespace)'],['../demo__sdi_2main_8c.html',1,'(Global Namespace)'],['../demo__slink_2main_8c.html',1,'(Global Namespace)'],['../demo__spi_2main_8c.html',1,'(Global Namespace)'],['../demo__spi__irq_2main_8c.html',1,'(Global Namespace)'],['../demo__trng_2main_8c.html',1,'(Global Namespace)'],['../demo__twi_2main_8c.html',1,'(Global Namespace)'],['../demo__wdt_2main_8c.html',1,'(Global Namespace)'],['../demo__xip_2main_8c.html',1,'(Global Namespace)'],['../demo__xirq_2main_8c.html',1,'(Global Namespace)'],['../float__corner__test_2main_8c.html',1,'(Global Namespace)'],['../floating__point__test_2main_8c.html',1,'(Global Namespace)'],['../game__of__life_2main_8c.html',1,'(Global Namespace)'],['../hello__world_2main_8c.html',1,'(Global Namespace)'],['../processor__check_2main_8c.html',1,'(Global Namespace)']]], + ['main_5fdestructor_5ftest_2',['main_destructor_test',['../demo__newlib_2main_8c.html#a7076a1dfd3c18c91fcf665ce54b087b3',1,'main.c']]], + ['max_5fduty_3',['MAX_DUTY',['../demo__pwm_2main_8c.html#a2351f30f0895b552e5fe9944d69e645d',1,'main.c']]], + ['max_5fintensity_4',['MAX_INTENSITY',['../demo__neopixel_2main_8c.html#a1d1d5e7ff16f25b68fdf779befd298f7',1,'main.c']]], + ['mem_5',['MEM',['../structneorv32__sysinfo__t.html#a51eee92b1824c1b19eb0a83a0a9c7d4c',1,'neorv32_sysinfo_t']]], + ['minutes_6',['minutes',['../structdate__t.html#a2ab79834ebae42979e359bf30ad5f67a',1,'date_t']]], + ['mode_7',['MODE',['../structneorv32__crc__t.html#ad720502701f16e6e952bbcaee980017c',1,'neorv32_crc_t']]], + ['month_8',['month',['../structdate__t.html#a1a97f6a755cd4209a0880cf811d52c7b',1,'date_t']]], + ['msi_5firq_5fhandler_9',['msi_irq_handler',['../demo__clint_2main_8c.html#a8e5e335f226a7dac74e2f117f07bebf6',1,'main.c']]], + ['mswi_10',['MSWI',['../structneorv32__clint__t.html#a7b49826af73aae2035cd697cb4b2666b',1,'neorv32_clint_t']]], + ['mti_5firq_5fhandler_11',['mti_irq_handler',['../demo__clint_2main_8c.html#a56e848c71747fc350f1697e84797871f',1,'main.c']]], + ['mtime_12',['MTIME',['../structneorv32__clint__t.html#aea25562a01a789da8b6c5ee82c6a9ef0',1,'neorv32_clint_t']]], + ['mtimecmp_13',['MTIMECMP',['../structneorv32__clint__t.html#ac198a6ec62ea154d2533aebdd7b0df36',1,'neorv32_clint_t']]] +]; diff --git a/sw/search/all_13.js b/sw/search/all_13.js new file mode 100644 index 0000000000..2ce3c29d2f --- /dev/null +++ b/sw/search/all_13.js @@ -0,0 +1,473 @@ +var searchData= +[ + ['neoled_5fctrl_5fbufs_5f0_0',['NEOLED_CTRL_BUFS_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fbufs_5f1_1',['NEOLED_CTRL_BUFS_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fbufs_5f2_2',['NEOLED_CTRL_BUFS_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fbufs_5f3_3',['NEOLED_CTRL_BUFS_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fen_4',['NEOLED_CTRL_EN',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5firq_5fconf_5',['NEOLED_CTRL_IRQ_CONF',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fmode_6',['NEOLED_CTRL_MODE',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fprsc0_7',['NEOLED_CTRL_PRSC0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fprsc1_8',['NEOLED_CTRL_PRSC1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fprsc2_9',['NEOLED_CTRL_PRSC2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fstrobe_10',['NEOLED_CTRL_STROBE',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f0_11',['NEOLED_CTRL_T_ONE_H_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f1_12',['NEOLED_CTRL_T_ONE_H_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f2_13',['NEOLED_CTRL_T_ONE_H_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f3_14',['NEOLED_CTRL_T_ONE_H_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f4_15',['NEOLED_CTRL_T_ONE_H_4',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f0_16',['NEOLED_CTRL_T_TOT_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f1_17',['NEOLED_CTRL_T_TOT_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f2_18',['NEOLED_CTRL_T_TOT_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f3_19',['NEOLED_CTRL_T_TOT_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f4_20',['NEOLED_CTRL_T_TOT_4',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f0_21',['NEOLED_CTRL_T_ZERO_H_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f1_22',['NEOLED_CTRL_T_ZERO_H_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f2_23',['NEOLED_CTRL_T_ZERO_H_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f3_24',['NEOLED_CTRL_T_ZERO_H_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f4_25',['NEOLED_CTRL_T_ZERO_H_4',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5fbusy_26',['NEOLED_CTRL_TX_BUSY',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5fempty_27',['NEOLED_CTRL_TX_EMPTY',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5ffull_28',['NEOLED_CTRL_TX_FULL',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5fhalf_29',['NEOLED_CTRL_TX_HALF',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73',1,'neorv32_neoled.h']]], + ['neoled_5ffirq_5fenable_30',['NEOLED_FIRQ_ENABLE',['../neorv32_8h.html#a8d0409818600c0b2acfe8253e8f027b8',1,'neorv32.h']]], + ['neoled_5ffirq_5fpending_31',['NEOLED_FIRQ_PENDING',['../neorv32_8h.html#aded7d7f5f4ba3a6d90f9a29e62a8cfab',1,'neorv32.h']]], + ['neoled_5frte_5fid_32',['NEOLED_RTE_ID',['../neorv32_8h.html#aca6cfc3f580c4dfe1e213009ee450c58',1,'neorv32.h']]], + ['neoled_5ftrap_5fcode_33',['NEOLED_TRAP_CODE',['../neorv32_8h.html#ab4a2ac455d7426992de6877ea7325f21',1,'neorv32.h']]], + ['neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_34',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_35',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_36',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_37',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['neorv32_20cpu_20a_20the_20core_38',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['neorv32_20processor_20a_20the_20soc_39',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['neorv32_20project_20a_20an_20introduction_40',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['neorv32_20risc_20v_20processor_41',['The NEORV32 RISC-V Processor',['../md_README.html#autotoc_md0',1,'']]], + ['neorv32_20ug_20user_20guide_20a_20let_20s_20get_20it_20started_42',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]], + ['neorv32_2eh_43',['neorv32.h',['../neorv32_8h.html',1,'']]], + ['neorv32_5faux_2ec_44',['neorv32_aux.c',['../neorv32__aux_8c.html',1,'']]], + ['neorv32_5faux_2eh_45',['neorv32_aux.h',['../neorv32__aux_8h.html',1,'']]], + ['neorv32_5faux_5fdate2unixtime_46',['neorv32_aux_date2unixtime',['../neorv32__aux_8c.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c',1,'neorv32_aux_date2unixtime(date_t *date):&#160;neorv32_aux.c'],['../neorv32__aux_8h.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c',1,'neorv32_aux_date2unixtime(date_t *date):&#160;neorv32_aux.c']]], + ['neorv32_5faux_5fhexstr2uint64_47',['neorv32_aux_hexstr2uint64',['../neorv32__aux_8c.html#a05a5482da3b72a5bdf2181e754143d79',1,'neorv32_aux_hexstr2uint64(char *buffer, unsigned int length):&#160;neorv32_aux.c'],['../neorv32__aux_8h.html#a05a5482da3b72a5bdf2181e754143d79',1,'neorv32_aux_hexstr2uint64(char *buffer, unsigned int length):&#160;neorv32_aux.c']]], + ['neorv32_5faux_5fitoa_48',['neorv32_aux_itoa',['../neorv32__aux_8c.html#af72230251bc58d3142353849f63d5667',1,'neorv32_aux_itoa(char *buffer, uint32_t num, uint32_t base):&#160;neorv32_aux.c'],['../neorv32__aux_8h.html#af72230251bc58d3142353849f63d5667',1,'neorv32_aux_itoa(char *buffer, uint32_t num, uint32_t base):&#160;neorv32_aux.c']]], + ['neorv32_5faux_5funixtime2date_49',['neorv32_aux_unixtime2date',['../neorv32__aux_8c.html#a885a81838a91b57797e849cb835c6887',1,'neorv32_aux_unixtime2date(uint64_t unixtime, date_t *date):&#160;neorv32_aux.c'],['../neorv32__aux_8h.html#a885a81838a91b57797e849cb835c6887',1,'neorv32_aux_unixtime2date(uint64_t unixtime, date_t *date):&#160;neorv32_aux.c']]], + ['neorv32_5faux_5fxorshift32_50',['neorv32_aux_xorshift32',['../neorv32__aux_8c.html#aff31dd983f75f70eeae331c65acaa50e',1,'neorv32_aux_xorshift32(void):&#160;neorv32_aux.c'],['../neorv32__aux_8h.html#aff31dd983f75f70eeae331c65acaa50e',1,'neorv32_aux_xorshift32(void):&#160;neorv32_aux.c']]], + ['neorv32_5fbootrom_5fbase_51',['NEORV32_BOOTROM_BASE',['../neorv32_8h.html#a9af9742516d8f0e43cee33882ea41157',1,'neorv32.h']]], + ['neorv32_5fcfs_52',['NEORV32_CFS',['../neorv32__cfs_8h.html#a6c101b306bd096f78d351e39b308d3e2',1,'neorv32_cfs.h']]], + ['neorv32_5fcfs_2ec_53',['neorv32_cfs.c',['../neorv32__cfs_8c.html',1,'']]], + ['neorv32_5fcfs_2eh_54',['neorv32_cfs.h',['../neorv32__cfs_8h.html',1,'']]], + ['neorv32_5fcfs_5favailable_55',['neorv32_cfs_available',['../neorv32__cfs_8c.html#abac96dfaefe433eca1c0b93fa6183d2e',1,'neorv32_cfs_available(void):&#160;neorv32_cfs.c'],['../neorv32__cfs_8h.html#abac96dfaefe433eca1c0b93fa6183d2e',1,'neorv32_cfs_available(void):&#160;neorv32_cfs.c']]], + ['neorv32_5fcfs_5fbase_56',['NEORV32_CFS_BASE',['../neorv32_8h.html#a41d6f97daef61641da96b9f72f6b272f',1,'neorv32.h']]], + ['neorv32_5fcfs_5ft_57',['neorv32_cfs_t',['../structneorv32__cfs__t.html',1,'']]], + ['neorv32_5fcfu_5fr3_5finstr_58',['neorv32_cfu_r3_instr',['../neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c',1,'neorv32_cpu_cfu.h']]], + ['neorv32_5fcfu_5fr4_5finstr_59',['neorv32_cfu_r4_instr',['../neorv32__cpu__cfu_8h.html#a046a640f7f4a7b1b99a824fb325e2079',1,'neorv32_cpu_cfu.h']]], + ['neorv32_5fclint_60',['NEORV32_CLINT',['../neorv32__clint_8h.html#aa85ecb43f16fa798c5e583f08d29ca3e',1,'neorv32_clint.h']]], + ['neorv32_5fclint_2ec_61',['neorv32_clint.c',['../neorv32__clint_8c.html',1,'']]], + ['neorv32_5fclint_2eh_62',['neorv32_clint.h',['../neorv32__clint_8h.html',1,'']]], + ['neorv32_5fclint_5favailable_63',['neorv32_clint_available',['../neorv32__clint_8c.html#a197e7946193987bf04a08aa0563462bf',1,'neorv32_clint_available(void):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#a197e7946193987bf04a08aa0563462bf',1,'neorv32_clint_available(void):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5fbase_64',['NEORV32_CLINT_BASE',['../neorv32_8h.html#ab1522f52c3c24ba2245dfa2783932d42',1,'neorv32.h']]], + ['neorv32_5fclint_5fmsi_5fclr_65',['neorv32_clint_msi_clr',['../neorv32__clint_8c.html#a6655e1e21cc94cda4e5c21544a72c758',1,'neorv32_clint_msi_clr(int hart):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#a6655e1e21cc94cda4e5c21544a72c758',1,'neorv32_clint_msi_clr(int hart):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5fmsi_5fset_66',['neorv32_clint_msi_set',['../neorv32__clint_8c.html#a4478c86505e3a22b774208006060b8a4',1,'neorv32_clint_msi_set(int hart):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#a4478c86505e3a22b774208006060b8a4',1,'neorv32_clint_msi_set(int hart):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5fmtimecmp_5fget_67',['neorv32_clint_mtimecmp_get',['../neorv32__clint_8c.html#a1d6526b096fbf99fdde2632bff7ce8df',1,'neorv32_clint_mtimecmp_get(int hart):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#a1d6526b096fbf99fdde2632bff7ce8df',1,'neorv32_clint_mtimecmp_get(int hart):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5fmtimecmp_5fset_68',['neorv32_clint_mtimecmp_set',['../neorv32__clint_8c.html#af1e2ff4ce5f3a20b07eeaac50685110a',1,'neorv32_clint_mtimecmp_set(int hart, uint64_t timecmp):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#af1e2ff4ce5f3a20b07eeaac50685110a',1,'neorv32_clint_mtimecmp_set(int hart, uint64_t timecmp):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5ft_69',['neorv32_clint_t',['../structneorv32__clint__t.html',1,'']]], + ['neorv32_5fclint_5ftime_5fget_70',['neorv32_clint_time_get',['../neorv32__clint_8c.html#a94364eb5e89145b5e2b61ac6d3eeccd4',1,'neorv32_clint_time_get(void):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#a94364eb5e89145b5e2b61ac6d3eeccd4',1,'neorv32_clint_time_get(void):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5ftime_5fset_71',['neorv32_clint_time_set',['../neorv32__clint_8c.html#af8e6985da6cd629a0572edd8c70cd888',1,'neorv32_clint_time_set(uint64_t time):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#af8e6985da6cd629a0572edd8c70cd888',1,'neorv32_clint_time_set(uint64_t time):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5funixtime_5fget_72',['neorv32_clint_unixtime_get',['../neorv32__clint_8c.html#a89aa592a96260e68f99df71a194facaa',1,'neorv32_clint_unixtime_get(void):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#a89aa592a96260e68f99df71a194facaa',1,'neorv32_clint_unixtime_get(void):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5funixtime_5fset_73',['neorv32_clint_unixtime_set',['../neorv32__clint_8c.html#abe9bcd07591e9c2d3e27435809bf4bdd',1,'neorv32_clint_unixtime_set(uint64_t unixtime):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#abe9bcd07591e9c2d3e27435809bf4bdd',1,'neorv32_clint_unixtime_set(uint64_t unixtime):&#160;neorv32_clint.c']]], + ['neorv32_5fclock_5fprsc_5fenum_74',['NEORV32_CLOCK_PRSC_enum',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73',1,'neorv32.h']]], + ['neorv32_5fcpu_2ec_75',['neorv32_cpu.c',['../neorv32__cpu_8c.html',1,'']]], + ['neorv32_5fcpu_2eh_76',['neorv32_cpu.h',['../neorv32__cpu_8h.html',1,'']]], + ['neorv32_5fcpu_5famo_2ec_77',['neorv32_cpu_amo.c',['../neorv32__cpu__amo_8c.html',1,'']]], + ['neorv32_5fcpu_5famo_2eh_78',['neorv32_cpu_amo.h',['../neorv32__cpu__amo_8h.html',1,'']]], + ['neorv32_5fcpu_5famoaddw_79',['neorv32_cpu_amoaddw',['../neorv32__cpu__amo_8c.html#ada27ec89b2530f7b7f14de947cc82bf9',1,'neorv32_cpu_amoaddw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#ada27ec89b2530f7b7f14de947cc82bf9',1,'neorv32_cpu_amoaddw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famoandw_80',['neorv32_cpu_amoandw',['../neorv32__cpu__amo_8c.html#a9b4540dadbfd5da907117570d8006e36',1,'neorv32_cpu_amoandw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a9b4540dadbfd5da907117570d8006e36',1,'neorv32_cpu_amoandw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famolr_81',['neorv32_cpu_amolr',['../neorv32__cpu__amo_8h.html#ad4437bbc61a4e40d7d01dfe9459f6639',1,'neorv32_cpu_amo.h']]], + ['neorv32_5fcpu_5famomaxuw_82',['neorv32_cpu_amomaxuw',['../neorv32__cpu__amo_8c.html#a31a6a3b5a33655f4a7b27d4c85b75f07',1,'neorv32_cpu_amomaxuw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a31a6a3b5a33655f4a7b27d4c85b75f07',1,'neorv32_cpu_amomaxuw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famomaxw_83',['neorv32_cpu_amomaxw',['../neorv32__cpu__amo_8c.html#a62cf36637d7a04079228acecfe8a5cf3',1,'neorv32_cpu_amomaxw(uint32_t addr, int32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a62cf36637d7a04079228acecfe8a5cf3',1,'neorv32_cpu_amomaxw(uint32_t addr, int32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famominuw_84',['neorv32_cpu_amominuw',['../neorv32__cpu__amo_8c.html#a1281e18b95cd525073e1123c5d04e9e2',1,'neorv32_cpu_amominuw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a1281e18b95cd525073e1123c5d04e9e2',1,'neorv32_cpu_amominuw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famominw_85',['neorv32_cpu_amominw',['../neorv32__cpu__amo_8c.html#a8e383fb8825538b5579d5ce075830697',1,'neorv32_cpu_amominw(uint32_t addr, int32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a8e383fb8825538b5579d5ce075830697',1,'neorv32_cpu_amominw(uint32_t addr, int32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famoorw_86',['neorv32_cpu_amoorw',['../neorv32__cpu__amo_8c.html#adc80b1f2b3a4e70fee44c0edb08fc402',1,'neorv32_cpu_amoorw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#adc80b1f2b3a4e70fee44c0edb08fc402',1,'neorv32_cpu_amoorw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famosc_87',['neorv32_cpu_amosc',['../neorv32__cpu__amo_8h.html#a5e73eaa273c41a06972e862976fda53c',1,'neorv32_cpu_amo.h']]], + ['neorv32_5fcpu_5famoswapw_88',['neorv32_cpu_amoswapw',['../neorv32__cpu__amo_8c.html#aad0d96e61bacc3af13ff471dd44ca8e9',1,'neorv32_cpu_amoswapw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#aad0d96e61bacc3af13ff471dd44ca8e9',1,'neorv32_cpu_amoswapw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famoxorw_89',['neorv32_cpu_amoxorw',['../neorv32__cpu__amo_8c.html#a65b67f48356fa9b30596485473311377',1,'neorv32_cpu_amoxorw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a65b67f48356fa9b30596485473311377',1,'neorv32_cpu_amoxorw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5fcfu_2ec_90',['neorv32_cpu_cfu.c',['../neorv32__cpu__cfu_8c.html',1,'']]], + ['neorv32_5fcpu_5fcfu_2eh_91',['neorv32_cpu_cfu.h',['../neorv32__cpu__cfu_8h.html',1,'']]], + ['neorv32_5fcpu_5fcfu_5favailable_92',['neorv32_cpu_cfu_available',['../neorv32__cpu__cfu_8c.html#a13019b8afa1a80c0e5c24eb4d72e75c1',1,'neorv32_cpu_cfu_available(void):&#160;neorv32_cpu_cfu.c'],['../neorv32__cpu__cfu_8h.html#a13019b8afa1a80c0e5c24eb4d72e75c1',1,'neorv32_cpu_cfu_available(void):&#160;neorv32_cpu_cfu.c']]], + ['neorv32_5fcpu_5fcsr_2eh_93',['neorv32_cpu_csr.h',['../neorv32__cpu__csr_8h.html',1,'']]], + ['neorv32_5fcpu_5fcsr_5fclr_94',['neorv32_cpu_csr_clr',['../neorv32__cpu_8h.html#ab8f533ddbc3a3af5e3bca2287ac10122',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fcsr_5fread_95',['neorv32_cpu_csr_read',['../neorv32__cpu_8h.html#aab7a9f9cf608599f2b124dd499cb8418',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fcsr_5fset_96',['neorv32_cpu_csr_set',['../neorv32__cpu_8h.html#a25a09de97229aac839ef6f74da604acf',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fcsr_5fwrite_97',['neorv32_cpu_csr_write',['../neorv32__cpu_8h.html#afb5ef6e0b1a3e26570edfd8379490455',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fdelay_5fms_98',['neorv32_cpu_delay_ms',['../neorv32__cpu_8c.html#aa9027535b13d9f9325e734997fc4a137',1,'neorv32_cpu_delay_ms(uint32_t time_ms):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#aa9027535b13d9f9325e734997fc4a137',1,'neorv32_cpu_delay_ms(uint32_t time_ms):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fget_5fclk_5ffrom_5fprsc_99',['neorv32_cpu_get_clk_from_prsc',['../neorv32__cpu_8c.html#a8346fb926f84f3d7bccbb4741105505f',1,'neorv32_cpu_get_clk_from_prsc(int prsc):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#a8346fb926f84f3d7bccbb4741105505f',1,'neorv32_cpu_get_clk_from_prsc(int prsc):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fget_5fcycle_100',['neorv32_cpu_get_cycle',['../neorv32__cpu_8c.html#ac3fd7dc7cd1e0a08225c41820af27f92',1,'neorv32_cpu_get_cycle(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#ac3fd7dc7cd1e0a08225c41820af27f92',1,'neorv32_cpu_get_cycle(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fget_5finstret_101',['neorv32_cpu_get_instret',['../neorv32__cpu_8c.html#a387aa304770b05594c4acca128a60a75',1,'neorv32_cpu_get_instret(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#a387aa304770b05594c4acca128a60a75',1,'neorv32_cpu_get_instret(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fgoto_5fuser_5fmode_102',['neorv32_cpu_goto_user_mode',['../neorv32__cpu_8c.html#aca49efb45d3808ad76cf65ba291f546d',1,'neorv32_cpu_goto_user_mode(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#aca49efb45d3808ad76cf65ba291f546d',1,'neorv32_cpu_goto_user_mode(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fhpm_5fget_5fnum_5fcounters_103',['neorv32_cpu_hpm_get_num_counters',['../neorv32__cpu_8c.html#a70f49b80322aa457f29f7671f94a183d',1,'neorv32_cpu_hpm_get_num_counters(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#a70f49b80322aa457f29f7671f94a183d',1,'neorv32_cpu_hpm_get_num_counters(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fhpm_5fget_5fsize_104',['neorv32_cpu_hpm_get_size',['../neorv32__cpu_8c.html#adb3ae542bbb0ddf9f562a4e42bc24d10',1,'neorv32_cpu_hpm_get_size(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#adb3ae542bbb0ddf9f562a4e42bc24d10',1,'neorv32_cpu_hpm_get_size(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fload_5fsigned_5fbyte_105',['neorv32_cpu_load_signed_byte',['../neorv32__cpu_8h.html#a31f903596ab1bcddea79fdf608eaa666',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5fsigned_5fhalf_106',['neorv32_cpu_load_signed_half',['../neorv32__cpu_8h.html#ae9c8b6c681536ddea3aff0e63f30ef70',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5funsigned_5fbyte_107',['neorv32_cpu_load_unsigned_byte',['../neorv32__cpu_8h.html#ac54ec9b59e17c7cd9b9907abee82ce95',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5funsigned_5fhalf_108',['neorv32_cpu_load_unsigned_half',['../neorv32__cpu_8h.html#a32544cd652debb4affb308806a115d5b',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5funsigned_5fword_109',['neorv32_cpu_load_unsigned_word',['../neorv32__cpu_8h.html#a3b6cf445e2136486564ef3d3473c91dd',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fpmp_5fconfigure_5fregion_110',['neorv32_cpu_pmp_configure_region',['../neorv32__cpu_8c.html#aa458a700619b2f7666cfcffe02ec2e2c',1,'neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#aa458a700619b2f7666cfcffe02ec2e2c',1,'neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fpmp_5fget_5fgranularity_111',['neorv32_cpu_pmp_get_granularity',['../neorv32__cpu_8c.html#ad4f8160f4821b6691e9682ef60c7cd7b',1,'neorv32_cpu_pmp_get_granularity(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#ad4f8160f4821b6691e9682ef60c7cd7b',1,'neorv32_cpu_pmp_get_granularity(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fpmp_5fget_5fnum_5fregions_112',['neorv32_cpu_pmp_get_num_regions',['../neorv32__cpu_8c.html#a27dd614bc270dfa30ed73323ebda2d2d',1,'neorv32_cpu_pmp_get_num_regions(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#a27dd614bc270dfa30ed73323ebda2d2d',1,'neorv32_cpu_pmp_get_num_regions(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fset_5fmcycle_113',['neorv32_cpu_set_mcycle',['../neorv32__cpu_8c.html#a232d0290c459dc790d989fcdc4d121bf',1,'neorv32_cpu_set_mcycle(uint64_t value):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#a232d0290c459dc790d989fcdc4d121bf',1,'neorv32_cpu_set_mcycle(uint64_t value):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fset_5fminstret_114',['neorv32_cpu_set_minstret',['../neorv32__cpu_8c.html#a5c3cf52498abb3cf3c14a724b287ecf0',1,'neorv32_cpu_set_minstret(uint64_t value):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#a5c3cf52498abb3cf3c14a724b287ecf0',1,'neorv32_cpu_set_minstret(uint64_t value):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fsleep_115',['neorv32_cpu_sleep',['../neorv32__cpu_8h.html#a769ca4556213619f6fea4ff6bfb979dd',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fstore_5funsigned_5fbyte_116',['neorv32_cpu_store_unsigned_byte',['../neorv32__cpu_8h.html#aeec8ad2a82885c40a307346f9003483e',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fstore_5funsigned_5fhalf_117',['neorv32_cpu_store_unsigned_half',['../neorv32__cpu_8h.html#a31f30f6d6542758cd3073a9939b07653',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fstore_5funsigned_5fword_118',['neorv32_cpu_store_unsigned_word',['../neorv32__cpu_8h.html#a173bb06b4ae9c8964469068dafcb7b0e',1,'neorv32_cpu.h']]], + ['neorv32_5fcrc_119',['NEORV32_CRC',['../neorv32__crc_8h.html#a110962d2b370f9d7997e459d9fd34271',1,'neorv32_crc.h']]], + ['neorv32_5fcrc_2ec_120',['neorv32_crc.c',['../neorv32__crc_8c.html',1,'']]], + ['neorv32_5fcrc_2eh_121',['neorv32_crc.h',['../neorv32__crc_8h.html',1,'']]], + ['neorv32_5fcrc_5favailable_122',['neorv32_crc_available',['../neorv32__crc_8c.html#aa46c647317752f8bb6d5836d4876a704',1,'neorv32_crc_available(void):&#160;neorv32_crc.c'],['../neorv32__crc_8h.html#aa46c647317752f8bb6d5836d4876a704',1,'neorv32_crc_available(void):&#160;neorv32_crc.c']]], + ['neorv32_5fcrc_5fbase_123',['NEORV32_CRC_BASE',['../neorv32_8h.html#a0e2377055bdc0f416b5ae4385610600d',1,'neorv32.h']]], + ['neorv32_5fcrc_5fblock_124',['neorv32_crc_block',['../neorv32__crc_8c.html#a9243006e6cc94c03450646d26a7289b2',1,'neorv32_crc_block(uint8_t *byte, int length):&#160;neorv32_crc.c'],['../neorv32__crc_8h.html#a9243006e6cc94c03450646d26a7289b2',1,'neorv32_crc_block(uint8_t *byte, int length):&#160;neorv32_crc.c']]], + ['neorv32_5fcrc_5fget_125',['neorv32_crc_get',['../neorv32__crc_8c.html#a444b88f1536f65acc301fb19eddcf227',1,'neorv32_crc_get(void):&#160;neorv32_crc.c'],['../neorv32__crc_8h.html#a444b88f1536f65acc301fb19eddcf227',1,'neorv32_crc_get(void):&#160;neorv32_crc.c']]], + ['neorv32_5fcrc_5fmode_5fenum_126',['NEORV32_CRC_MODE_enum',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447',1,'neorv32_crc.h']]], + ['neorv32_5fcrc_5fsetup_127',['neorv32_crc_setup',['../neorv32__crc_8c.html#a4ff5f7b91e9f668535ed33b6382ae623',1,'neorv32_crc_setup(uint32_t mode, uint32_t poly, uint32_t start):&#160;neorv32_crc.c'],['../neorv32__crc_8h.html#a4ff5f7b91e9f668535ed33b6382ae623',1,'neorv32_crc_setup(uint32_t mode, uint32_t poly, uint32_t start):&#160;neorv32_crc.c']]], + ['neorv32_5fcrc_5fsingle_128',['neorv32_crc_single',['../neorv32__crc_8c.html#ad9d50c76a485160667d486bce32cbeb8',1,'neorv32_crc_single(uint8_t byte):&#160;neorv32_crc.c'],['../neorv32__crc_8h.html#ad9d50c76a485160667d486bce32cbeb8',1,'neorv32_crc_single(uint8_t byte):&#160;neorv32_crc.c']]], + ['neorv32_5fcrc_5ft_129',['neorv32_crc_t',['../structneorv32__crc__t.html',1,'']]], + ['neorv32_5fcsr_5fenum_130',['NEORV32_CSR_enum',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5ffflags_5fenum_131',['NEORV32_CSR_FFLAGS_enum',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204b',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmcounteren_5fenum_132',['NEORV32_CSR_MCOUNTEREN_enum',['../neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmcountinhibit_5fenum_133',['NEORV32_CSR_MCOUNTINHIBIT_enum',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfe',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmie_5fenum_134',['NEORV32_CSR_MIE_enum',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmip_5fenum_135',['NEORV32_CSR_MIP_enum',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmisa_5fenum_136',['NEORV32_CSR_MISA_enum',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830c',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmstatus_5fenum_137',['NEORV32_CSR_MSTATUS_enum',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fxisa_5fenum_138',['NEORV32_CSR_XISA_enum',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fdm_5fbase_139',['NEORV32_DM_BASE',['../neorv32_8h.html#a9bf0149681677f7d87abf8f62e2d9a3d',1,'neorv32.h']]], + ['neorv32_5fdma_140',['NEORV32_DMA',['../neorv32__dma_8h.html#a0dcb61a0e0d2b45beb7818015adc8639',1,'neorv32_dma.h']]], + ['neorv32_5fdma_2eh_141',['neorv32_dma.h',['../neorv32__dma_8h.html',1,'']]], + ['neorv32_5fdma_5favailable_142',['neorv32_dma_available',['../neorv32__dma_8h.html#a13260c3252f0375d8982590d270d7dfd',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fbase_143',['NEORV32_DMA_BASE',['../neorv32_8h.html#aa8d3a83ffad1e71f0832a5da78d62008',1,'neorv32.h']]], + ['neorv32_5fdma_5fctrl_5fenum_144',['NEORV32_DMA_CTRL_enum',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4',1,'neorv32_dma.h']]], + ['neorv32_5fdma_5fdisable_145',['neorv32_dma_disable',['../neorv32__dma_8h.html#a6df244028455cf7f8d4cf1520c4670a7',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fdone_146',['neorv32_dma_done',['../neorv32__dma_8h.html#afc8cc32f7d80d0f5ab33b2f1ecf77956',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fenable_147',['neorv32_dma_enable',['../neorv32__dma_8h.html#ac3b72447e8a132faf26577ac714b8284',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ffence_5fdisable_148',['neorv32_dma_fence_disable',['../neorv32__dma_8h.html#a8f37adfa07050b0a1cb8430c9ce1fcc2',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ffence_5fenable_149',['neorv32_dma_fence_enable',['../neorv32__dma_8h.html#a2c7257567ccdb7a986f5ef7c74d3917c',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fstatus_150',['neorv32_dma_status',['../neorv32__dma_8h.html#aa116f9714174abbe8a3583e441fee24b',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fstatus_5fenum_151',['NEORV32_DMA_STATUS_enum',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74b',1,'neorv32_dma.h']]], + ['neorv32_5fdma_5ft_152',['neorv32_dma_t',['../structneorv32__dma__t.html',1,'']]], + ['neorv32_5fdma_5ftransfer_153',['neorv32_dma_transfer',['../neorv32__dma_8h.html#a2ce0d31e04604b2523135d52a877febf',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ftransfer_5fauto_154',['neorv32_dma_transfer_auto',['../neorv32__dma_8h.html#a6ebd1595ee6fa0e6cbfbd1ce7476f18e',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fttype_5fenum_155',['NEORV32_DMA_TTYPE_enum',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9',1,'neorv32_dma.h']]], + ['neorv32_5fexception_5fcodes_5fenum_156',['NEORV32_EXCEPTION_CODES_enum',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fexecutable_5fenum_157',['NEORV32_EXECUTABLE_enum',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feb',1,'bootloader.c']]], + ['neorv32_5fgpio_158',['NEORV32_GPIO',['../neorv32__gpio_8h.html#a1e35bbf26b9d1aa5373af0b9468eb445',1,'neorv32_gpio.h']]], + ['neorv32_5fgpio_2ec_159',['neorv32_gpio.c',['../neorv32__gpio_8c.html',1,'']]], + ['neorv32_5fgpio_2eh_160',['neorv32_gpio.h',['../neorv32__gpio_8h.html',1,'']]], + ['neorv32_5fgpio_5favailable_161',['neorv32_gpio_available',['../neorv32__gpio_8c.html#a41d39a41ba5879eb85d3ed4481fcff81',1,'neorv32_gpio_available(void):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#a41d39a41ba5879eb85d3ed4481fcff81',1,'neorv32_gpio_available(void):&#160;neorv32_gpio.c']]], + ['neorv32_5fgpio_5fbase_162',['NEORV32_GPIO_BASE',['../neorv32_8h.html#a7fd1e24d4de2eed7bf9cd5391562c7f4',1,'neorv32.h']]], + ['neorv32_5fgpio_5fpin_5fget_163',['neorv32_gpio_pin_get',['../neorv32__gpio_8c.html#afa3ee54aca47ff35f706b627ac66e95a',1,'neorv32_gpio_pin_get(int pin):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#afa3ee54aca47ff35f706b627ac66e95a',1,'neorv32_gpio_pin_get(int pin):&#160;neorv32_gpio.c']]], + ['neorv32_5fgpio_5fpin_5fset_164',['neorv32_gpio_pin_set',['../neorv32__gpio_8c.html#a60fd0830d634f0c1f784d815384665cb',1,'neorv32_gpio_pin_set(int pin, int value):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#a60fd0830d634f0c1f784d815384665cb',1,'neorv32_gpio_pin_set(int pin, int value):&#160;neorv32_gpio.c']]], + ['neorv32_5fgpio_5fpin_5ftoggle_165',['neorv32_gpio_pin_toggle',['../neorv32__gpio_8c.html#a1958850fc1689eae9ddfcaa4a7513400',1,'neorv32_gpio_pin_toggle(int pin):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#a1958850fc1689eae9ddfcaa4a7513400',1,'neorv32_gpio_pin_toggle(int pin):&#160;neorv32_gpio.c']]], + ['neorv32_5fgpio_5fport_5fget_166',['neorv32_gpio_port_get',['../neorv32__gpio_8c.html#ac42379f2fb5ca0bb63850d7957852b84',1,'neorv32_gpio_port_get(void):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#ac42379f2fb5ca0bb63850d7957852b84',1,'neorv32_gpio_port_get(void):&#160;neorv32_gpio.c']]], + ['neorv32_5fgpio_5fport_5fset_167',['neorv32_gpio_port_set',['../neorv32__gpio_8c.html#a8dc7846945e4609fc96d81caee99ac00',1,'neorv32_gpio_port_set(uint64_t port_data):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#a789222709485cd8467aad5eddf69d2df',1,'neorv32_gpio_port_set(uint64_t d):&#160;neorv32_gpio.c']]], + ['neorv32_5fgpio_5fport_5ftoggle_168',['neorv32_gpio_port_toggle',['../neorv32__gpio_8c.html#a210529f789779387d3f014e6253e803f',1,'neorv32_gpio_port_toggle(uint64_t toggle):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#a210529f789779387d3f014e6253e803f',1,'neorv32_gpio_port_toggle(uint64_t toggle):&#160;neorv32_gpio.c']]], + ['neorv32_5fgpio_5ft_169',['neorv32_gpio_t',['../structneorv32__gpio__t.html',1,'']]], + ['neorv32_5fgptmr_170',['NEORV32_GPTMR',['../neorv32__gptmr_8h.html#a9e047791588ff21fc4dc1b06456bdfd2',1,'neorv32_gptmr.h']]], + ['neorv32_5fgptmr_2ec_171',['neorv32_gptmr.c',['../neorv32__gptmr_8c.html',1,'']]], + ['neorv32_5fgptmr_2eh_172',['neorv32_gptmr.h',['../neorv32__gptmr_8h.html',1,'']]], + ['neorv32_5fgptmr_5favailable_173',['neorv32_gptmr_available',['../neorv32__gptmr_8c.html#ae79a08c52ad3e83f9c4393acfabf035f',1,'neorv32_gptmr_available(void):&#160;neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#ae79a08c52ad3e83f9c4393acfabf035f',1,'neorv32_gptmr_available(void):&#160;neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5fbase_174',['NEORV32_GPTMR_BASE',['../neorv32_8h.html#a0991b1a5ba1e8c3550eb9770d43589d0',1,'neorv32.h']]], + ['neorv32_5fgptmr_5fctrl_5fenum_175',['NEORV32_GPTMR_CTRL_enum',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988',1,'neorv32_gptmr.h']]], + ['neorv32_5fgptmr_5fdisable_176',['neorv32_gptmr_disable',['../neorv32__gptmr_8c.html#a7c9bc6d28ad12611b08fa2867c2db874',1,'neorv32_gptmr_disable(void):&#160;neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#a7c9bc6d28ad12611b08fa2867c2db874',1,'neorv32_gptmr_disable(void):&#160;neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5fenable_177',['neorv32_gptmr_enable',['../neorv32__gptmr_8c.html#a59e684348835772a7e83446e478d4a13',1,'neorv32_gptmr_enable(void):&#160;neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#a59e684348835772a7e83446e478d4a13',1,'neorv32_gptmr_enable(void):&#160;neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5firq_5fack_178',['neorv32_gptmr_irq_ack',['../neorv32__gptmr_8c.html#ac73aa4e41a064abb4ca554a389888e67',1,'neorv32_gptmr_irq_ack(void):&#160;neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#ac73aa4e41a064abb4ca554a389888e67',1,'neorv32_gptmr_irq_ack(void):&#160;neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5fsetup_179',['neorv32_gptmr_setup',['../neorv32__gptmr_8c.html#a6aa27efd2163eebf8fc49fe1c591708f',1,'neorv32_gptmr_setup(int prsc, uint32_t threshold, int cont_mode):&#160;neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#a6aa27efd2163eebf8fc49fe1c591708f',1,'neorv32_gptmr_setup(int prsc, uint32_t threshold, int cont_mode):&#160;neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5ft_180',['neorv32_gptmr_t',['../structneorv32__gptmr__t.html',1,'']]], + ['neorv32_5fheap_5fbegin_5fc_181',['neorv32_heap_begin_c',['../neorv32_8h.html#aca22a64c8c580dfde1676732d97ead7c',1,'neorv32.h']]], + ['neorv32_5fheap_5fend_5fc_182',['neorv32_heap_end_c',['../neorv32_8h.html#ac8b656bd05c05176638ea3f922228ca5',1,'neorv32.h']]], + ['neorv32_5fheap_5fsize_5fc_183',['neorv32_heap_size_c',['../neorv32_8h.html#a32904e45632a47e21f7c9d873720cdc5',1,'neorv32.h']]], + ['neorv32_5fhpmcnt_5fevent_5fenum_184',['NEORV32_HPMCNT_EVENT_enum',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfe',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fintrinsics_2eh_185',['neorv32_intrinsics.h',['../neorv32__intrinsics_8h.html',1,'']]], + ['neorv32_5flegacy_2eh_186',['neorv32_legacy.h',['../neorv32__legacy_8h.html',1,'']]], + ['neorv32_5fneoled_187',['NEORV32_NEOLED',['../neorv32__neoled_8h.html#a3ccc1097bc70f92235d693b612fa994a',1,'neorv32_neoled.h']]], + ['neorv32_5fneoled_2ec_188',['neorv32_neoled.c',['../neorv32__neoled_8c.html',1,'']]], + ['neorv32_5fneoled_2eh_189',['neorv32_neoled.h',['../neorv32__neoled_8h.html',1,'']]], + ['neorv32_5fneoled_5favailable_190',['neorv32_neoled_available',['../neorv32__neoled_8c.html#a57398d92fb4fc735b33e89271726e1d6',1,'neorv32_neoled_available(void):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a57398d92fb4fc735b33e89271726e1d6',1,'neorv32_neoled_available(void):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fbase_191',['NEORV32_NEOLED_BASE',['../neorv32_8h.html#a559fdce92e8af5efc426c8fc48d14f99',1,'neorv32.h']]], + ['neorv32_5fneoled_5fctrl_5fenum_192',['NEORV32_NEOLED_CTRL_enum',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412',1,'neorv32_neoled.h']]], + ['neorv32_5fneoled_5fdisable_193',['neorv32_neoled_disable',['../neorv32__neoled_8c.html#a8daaa97a85e0eb94d4a38eb2119ea183',1,'neorv32_neoled_disable(void):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a8daaa97a85e0eb94d4a38eb2119ea183',1,'neorv32_neoled_disable(void):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fenable_194',['neorv32_neoled_enable',['../neorv32__neoled_8c.html#a8181d5c1d15b7b5eecdc018341ac14fa',1,'neorv32_neoled_enable(void):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a8181d5c1d15b7b5eecdc018341ac14fa',1,'neorv32_neoled_enable(void):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fget_5fbuffer_5fsize_195',['neorv32_neoled_get_buffer_size',['../neorv32__neoled_8c.html#a81c2c49198531fb6551eb288e29c084e',1,'neorv32_neoled_get_buffer_size(void):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a81c2c49198531fb6551eb288e29c084e',1,'neorv32_neoled_get_buffer_size(void):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fset_5fmode_196',['neorv32_neoled_set_mode',['../neorv32__neoled_8c.html#a484fcc6797b6d9cef86192e9593ec33d',1,'neorv32_neoled_set_mode(uint32_t mode):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a484fcc6797b6d9cef86192e9593ec33d',1,'neorv32_neoled_set_mode(uint32_t mode):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fsetup_197',['neorv32_neoled_setup',['../neorv32__neoled_8c.html#ac6e94602453779a2791bd0734465f5a3',1,'neorv32_neoled_setup(uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#ac6e94602453779a2791bd0734465f5a3',1,'neorv32_neoled_setup(uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fsetup_5fws2812_198',['neorv32_neoled_setup_ws2812',['../neorv32__neoled_8c.html#adade69c7368c28180b9992d5f0ab6031',1,'neorv32_neoled_setup_ws2812(int irq_mode):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#adade69c7368c28180b9992d5f0ab6031',1,'neorv32_neoled_setup_ws2812(int irq_mode):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fstrobe_5fblocking_199',['neorv32_neoled_strobe_blocking',['../neorv32__neoled_8c.html#a5aa9eb4dd3655fa08e1b61eb0f36589c',1,'neorv32_neoled_strobe_blocking(void):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a5aa9eb4dd3655fa08e1b61eb0f36589c',1,'neorv32_neoled_strobe_blocking(void):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fstrobe_5fnonblocking_200',['neorv32_neoled_strobe_nonblocking',['../neorv32__neoled_8c.html#abf7882b949373df0774fc9cc20c2bd2e',1,'neorv32_neoled_strobe_nonblocking(void):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#abf7882b949373df0774fc9cc20c2bd2e',1,'neorv32_neoled_strobe_nonblocking(void):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5ft_201',['neorv32_neoled_t',['../structneorv32__neoled__t.html',1,'']]], + ['neorv32_5fneoled_5fwrite_5fblocking_202',['neorv32_neoled_write_blocking',['../neorv32__neoled_8c.html#a3ee5b3602da3ae982628e2802587e451',1,'neorv32_neoled_write_blocking(uint32_t data):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a3ee5b3602da3ae982628e2802587e451',1,'neorv32_neoled_write_blocking(uint32_t data):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fwrite_5fnonblocking_203',['neorv32_neoled_write_nonblocking',['../neorv32__neoled_8h.html#ad2a318bd59be12de34797ced0f7743c6',1,'neorv32_neoled.h']]], + ['neorv32_5fnewlib_2ec_204',['neorv32_newlib.c',['../neorv32__newlib_8c.html',1,'']]], + ['neorv32_5fonewire_205',['NEORV32_ONEWIRE',['../neorv32__onewire_8h.html#a6f119e35d7ac01f110987508ff3becc9',1,'neorv32_onewire.h']]], + ['neorv32_5fonewire_2ec_206',['neorv32_onewire.c',['../neorv32__onewire_8c.html',1,'']]], + ['neorv32_5fonewire_2eh_207',['neorv32_onewire.h',['../neorv32__onewire_8h.html',1,'']]], + ['neorv32_5fonewire_5favailable_208',['neorv32_onewire_available',['../neorv32__onewire_8c.html#a865e5c381fd3c27c6981a589a5124d1e',1,'neorv32_onewire_available(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a865e5c381fd3c27c6981a589a5124d1e',1,'neorv32_onewire_available(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fbase_209',['NEORV32_ONEWIRE_BASE',['../neorv32_8h.html#a8d0b612e52b77395a05d4f18af6fcf00',1,'neorv32.h']]], + ['neorv32_5fonewire_5fbusy_210',['neorv32_onewire_busy',['../neorv32__onewire_8c.html#a01b6236b89c045ddbd58398361c6ee0a',1,'neorv32_onewire_busy(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a01b6236b89c045ddbd58398361c6ee0a',1,'neorv32_onewire_busy(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fctrl_5fenum_211',['NEORV32_ONEWIRE_CTRL_enum',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831',1,'neorv32_onewire.h']]], + ['neorv32_5fonewire_5fdcmd_5fenum_212',['NEORV32_ONEWIRE_DCMD_enum',['../neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26',1,'neorv32_onewire.h']]], + ['neorv32_5fonewire_5fdisable_213',['neorv32_onewire_disable',['../neorv32__onewire_8c.html#a7e329eeb1cd98301a53b271a6a102385',1,'neorv32_onewire_disable(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a7e329eeb1cd98301a53b271a6a102385',1,'neorv32_onewire_disable(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fenable_214',['neorv32_onewire_enable',['../neorv32__onewire_8c.html#ae6fe766e7decf18869cfb86bba741ca4',1,'neorv32_onewire_enable(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#ae6fe766e7decf18869cfb86bba741ca4',1,'neorv32_onewire_enable(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fflush_215',['neorv32_onewire_flush',['../neorv32__onewire_8c.html#a05e220711255e82460bc92010199eb53',1,'neorv32_onewire_flush(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a05e220711255e82460bc92010199eb53',1,'neorv32_onewire_flush(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fget_5ffifo_5fdepth_216',['neorv32_onewire_get_fifo_depth',['../neorv32__onewire_8c.html#a32128bfcea4d8c8e31b0b59498e59798',1,'neorv32_onewire_get_fifo_depth(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a32128bfcea4d8c8e31b0b59498e59798',1,'neorv32_onewire_get_fifo_depth(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbit_217',['neorv32_onewire_read_bit',['../neorv32__onewire_8c.html#aace8398062b759256a516e6245aced83',1,'neorv32_onewire_read_bit(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#aace8398062b759256a516e6245aced83',1,'neorv32_onewire_read_bit(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbit_5fblocking_218',['neorv32_onewire_read_bit_blocking',['../neorv32__onewire_8c.html#ace8b7cf697b068b6b51676d84dec5960',1,'neorv32_onewire_read_bit_blocking(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#ace8b7cf697b068b6b51676d84dec5960',1,'neorv32_onewire_read_bit_blocking(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbit_5fget_219',['neorv32_onewire_read_bit_get',['../neorv32__onewire_8c.html#aa4a19d2d8dc3b3401307615aec201190',1,'neorv32_onewire_read_bit_get(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#aa4a19d2d8dc3b3401307615aec201190',1,'neorv32_onewire_read_bit_get(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbyte_220',['neorv32_onewire_read_byte',['../neorv32__onewire_8c.html#a01ddba7a9148be542b5c52e39e6f46d6',1,'neorv32_onewire_read_byte(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a01ddba7a9148be542b5c52e39e6f46d6',1,'neorv32_onewire_read_byte(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbyte_5fblocking_221',['neorv32_onewire_read_byte_blocking',['../neorv32__onewire_8c.html#a7510e65a26aeefb40e994fd00667537e',1,'neorv32_onewire_read_byte_blocking(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a7510e65a26aeefb40e994fd00667537e',1,'neorv32_onewire_read_byte_blocking(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbyte_5fget_222',['neorv32_onewire_read_byte_get',['../neorv32__onewire_8c.html#a4c7eec15c095c97c939163f631f51dab',1,'neorv32_onewire_read_byte_get(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a4c7eec15c095c97c939163f631f51dab',1,'neorv32_onewire_read_byte_get(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5freset_223',['neorv32_onewire_reset',['../neorv32__onewire_8c.html#a3072f7167831edc95dee44ecfef6a0d4',1,'neorv32_onewire_reset(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a3072f7167831edc95dee44ecfef6a0d4',1,'neorv32_onewire_reset(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5freset_5fblocking_224',['neorv32_onewire_reset_blocking',['../neorv32__onewire_8c.html#af8ca6be495176797b7da3857e2f794f9',1,'neorv32_onewire_reset_blocking(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#af8ca6be495176797b7da3857e2f794f9',1,'neorv32_onewire_reset_blocking(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5freset_5fget_5fpresence_225',['neorv32_onewire_reset_get_presence',['../neorv32__onewire_8c.html#a43eb8a08eeaa83e3d7e9aa5058a4269f',1,'neorv32_onewire_reset_get_presence(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a43eb8a08eeaa83e3d7e9aa5058a4269f',1,'neorv32_onewire_reset_get_presence(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fsense_226',['neorv32_onewire_sense',['../neorv32__onewire_8c.html#a122531c7154126858c46d89e003d838d',1,'neorv32_onewire_sense(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a122531c7154126858c46d89e003d838d',1,'neorv32_onewire_sense(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fsetup_227',['neorv32_onewire_setup',['../neorv32__onewire_8c.html#a224005037387484dfa510a1355a62828',1,'neorv32_onewire_setup(uint32_t t_base):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a224005037387484dfa510a1355a62828',1,'neorv32_onewire_setup(uint32_t t_base):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5ft_228',['neorv32_onewire_t',['../structneorv32__onewire__t.html',1,'']]], + ['neorv32_5fonewire_5fwrite_5fbit_229',['neorv32_onewire_write_bit',['../neorv32__onewire_8c.html#a49d0a2a386f129fd2f4fed880bba31d4',1,'neorv32_onewire_write_bit(uint8_t bit):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a49d0a2a386f129fd2f4fed880bba31d4',1,'neorv32_onewire_write_bit(uint8_t bit):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbit_5fblocking_230',['neorv32_onewire_write_bit_blocking',['../neorv32__onewire_8c.html#a6f7b6690a2437e0b574a8a9a23dc0eaa',1,'neorv32_onewire_write_bit_blocking(uint8_t bit):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a6f7b6690a2437e0b574a8a9a23dc0eaa',1,'neorv32_onewire_write_bit_blocking(uint8_t bit):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbyte_231',['neorv32_onewire_write_byte',['../neorv32__onewire_8c.html#a23b96b68c3214b188525eb102cafb620',1,'neorv32_onewire_write_byte(uint8_t byte):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a23b96b68c3214b188525eb102cafb620',1,'neorv32_onewire_write_byte(uint8_t byte):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbyte_5fblocking_232',['neorv32_onewire_write_byte_blocking',['../neorv32__onewire_8c.html#ac78557c77482b59394677f42fda4fdf1',1,'neorv32_onewire_write_byte_blocking(uint8_t byte):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#ac78557c77482b59394677f42fda4fdf1',1,'neorv32_onewire_write_byte_blocking(uint8_t byte):&#160;neorv32_onewire.c']]], + ['neorv32_5fpmp_5fmodes_5fenum_233',['NEORV32_PMP_MODES_enum',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fpmpcfg_5fattributes_5fenum_234',['NEORV32_PMPCFG_ATTRIBUTES_enum',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930ea',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fpmw_5fget_5fnum_5fchannels_235',['neorv32_pmw_get_num_channels',['../neorv32__pwm_8c.html#a43d8a47dc79ebac24c8a7d2d8247d2a5',1,'neorv32_pmw_get_num_channels(void):&#160;neorv32_pwm.c'],['../neorv32__pwm_8h.html#a43d8a47dc79ebac24c8a7d2d8247d2a5',1,'neorv32_pmw_get_num_channels(void):&#160;neorv32_pwm.c']]], + ['neorv32_5fpwm_236',['NEORV32_PWM',['../neorv32__pwm_8h.html#ad4cb534c29e26fa56c10bef7afab8f51',1,'neorv32_pwm.h']]], + ['neorv32_5fpwm_2ec_237',['neorv32_pwm.c',['../neorv32__pwm_8c.html',1,'']]], + ['neorv32_5fpwm_2eh_238',['neorv32_pwm.h',['../neorv32__pwm_8h.html',1,'']]], + ['neorv32_5fpwm_5favailable_239',['neorv32_pwm_available',['../neorv32__pwm_8c.html#afb12c860b2f7fa6cd1e069ea540da41c',1,'neorv32_pwm_available(void):&#160;neorv32_pwm.c'],['../neorv32__pwm_8h.html#afb12c860b2f7fa6cd1e069ea540da41c',1,'neorv32_pwm_available(void):&#160;neorv32_pwm.c']]], + ['neorv32_5fpwm_5fbase_240',['NEORV32_PWM_BASE',['../neorv32_8h.html#afef7a6b121a788560b29e2ee2a58c725',1,'neorv32.h']]], + ['neorv32_5fpwm_5fch_5fdisable_241',['neorv32_pwm_ch_disable',['../neorv32__pwm_8c.html#a7bc39afa807b7c2e06d6fd8b4dc7506c',1,'neorv32_pwm_ch_disable(int channel):&#160;neorv32_pwm.c'],['../neorv32__pwm_8h.html#a7bc39afa807b7c2e06d6fd8b4dc7506c',1,'neorv32_pwm_ch_disable(int channel):&#160;neorv32_pwm.c']]], + ['neorv32_5fpwm_5fch_5fenable_242',['neorv32_pwm_ch_enable',['../neorv32__pwm_8c.html#af00e67388ef9186e051e518883ad9a40',1,'neorv32_pwm_ch_enable(int channel):&#160;neorv32_pwm.c'],['../neorv32__pwm_8h.html#af00e67388ef9186e051e518883ad9a40',1,'neorv32_pwm_ch_enable(int channel):&#160;neorv32_pwm.c']]], + ['neorv32_5fpwm_5fch_5fset_5fclock_243',['neorv32_pwm_ch_set_clock',['../neorv32__pwm_8c.html#a784672443179a7c1e604f23854e001f4',1,'neorv32_pwm_ch_set_clock(int channel, int prsc, int cdiv):&#160;neorv32_pwm.c'],['../neorv32__pwm_8h.html#a784672443179a7c1e604f23854e001f4',1,'neorv32_pwm_ch_set_clock(int channel, int prsc, int cdiv):&#160;neorv32_pwm.c']]], + ['neorv32_5fpwm_5fch_5fset_5fduty_244',['neorv32_pwm_ch_set_duty',['../neorv32__pwm_8c.html#a518bad33405039fadd668d16276acb14',1,'neorv32_pwm_ch_set_duty(int channel, int duty):&#160;neorv32_pwm.c'],['../neorv32__pwm_8h.html#a518bad33405039fadd668d16276acb14',1,'neorv32_pwm_ch_set_duty(int channel, int duty):&#160;neorv32_pwm.c']]], + ['neorv32_5fpwm_5ft_245',['neorv32_pwm_t',['../structneorv32__pwm__t.html',1,'']]], + ['neorv32_5frte_2ec_246',['neorv32_rte.c',['../neorv32__rte_8c.html',1,'']]], + ['neorv32_5frte_2eh_247',['neorv32_rte.h',['../neorv32__rte_8h.html',1,'']]], + ['neorv32_5frte_5fcontext_5fget_248',['neorv32_rte_context_get',['../neorv32__rte_8c.html#a65e71acc8916b42b59dc2cf6bba30ba3',1,'neorv32_rte_context_get(int x):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a65e71acc8916b42b59dc2cf6bba30ba3',1,'neorv32_rte_context_get(int x):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fcontext_5fput_249',['neorv32_rte_context_put',['../neorv32__rte_8c.html#ae13a9c1fd59ad71afb0d47cf9a0b303e',1,'neorv32_rte_context_put(int x, uint32_t data):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#ae13a9c1fd59ad71afb0d47cf9a0b303e',1,'neorv32_rte_context_put(int x, uint32_t data):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fcore_250',['neorv32_rte_core',['../neorv32__rte_8c.html#ad6ab21f2218a3e88e0cc50d0643dafad',1,'neorv32_rte_core(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#ad6ab21f2218a3e88e0cc50d0643dafad',1,'neorv32_rte_core(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fdebug_5fhandler_251',['neorv32_rte_debug_handler',['../neorv32__rte_8c.html#a65422bb44f1e7bc011e9bfc5d8451ebe',1,'neorv32_rte_debug_handler(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a65422bb44f1e7bc011e9bfc5d8451ebe',1,'neorv32_rte_debug_handler(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fhandler_5finstall_252',['neorv32_rte_handler_install',['../neorv32__rte_8c.html#a2cf31cfa569a03a20d554b6400c4c5e2',1,'neorv32_rte_handler_install(int id, void(*handler)(void)):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a2cf31cfa569a03a20d554b6400c4c5e2',1,'neorv32_rte_handler_install(int id, void(*handler)(void)):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fhandler_5funinstall_253',['neorv32_rte_handler_uninstall',['../neorv32__rte_8c.html#a10fde6229bf391e46148405616404a65',1,'neorv32_rte_handler_uninstall(int id):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a10fde6229bf391e46148405616404a65',1,'neorv32_rte_handler_uninstall(int id):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fnum_5ftraps_254',['NEORV32_RTE_NUM_TRAPS',['../neorv32__rte_8h.html#ad14a1ca41df1e9300bfd01aef07dce59',1,'neorv32_rte.h']]], + ['neorv32_5frte_5fprint_5fabout_255',['neorv32_rte_print_about',['../neorv32__rte_8c.html#aa442c0e39f9156a131c3432fda587692',1,'neorv32_rte_print_about(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#aa442c0e39f9156a131c3432fda587692',1,'neorv32_rte_print_about(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5fhw_5fconfig_256',['neorv32_rte_print_hw_config',['../neorv32__rte_8c.html#a05e8304963e402d228a76aff1868771c',1,'neorv32_rte_print_hw_config(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a05e8304963e402d228a76aff1868771c',1,'neorv32_rte_print_hw_config(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5fhw_5fversion_257',['neorv32_rte_print_hw_version',['../neorv32__rte_8c.html#aad6f5256a265807c4cde163bcba8dae9',1,'neorv32_rte_print_hw_version(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#aad6f5256a265807c4cde163bcba8dae9',1,'neorv32_rte_print_hw_version(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5flicense_258',['neorv32_rte_print_license',['../neorv32__rte_8c.html#acd96aa73eebe6d4bbc9aabe1230cbabc',1,'neorv32_rte_print_license(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#acd96aa73eebe6d4bbc9aabe1230cbabc',1,'neorv32_rte_print_license(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5flogo_259',['neorv32_rte_print_logo',['../neorv32__rte_8c.html#a16df1b48f2e1258a51d3bb7f49531cf3',1,'neorv32_rte_print_logo(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a16df1b48f2e1258a51d3bb7f49531cf3',1,'neorv32_rte_print_logo(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fsetup_260',['neorv32_rte_setup',['../neorv32__rte_8c.html#a343e1913bdc37db9b168fb4def0e6170',1,'neorv32_rte_setup(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a343e1913bdc37db9b168fb4def0e6170',1,'neorv32_rte_setup(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5ftrap_5fenum_261',['NEORV32_RTE_TRAP_enum',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a',1,'neorv32_rte.h']]], + ['neorv32_5fsdi_262',['NEORV32_SDI',['../neorv32__sdi_8h.html#afd0921633d6523d9b7235055e9bbf928',1,'neorv32_sdi.h']]], + ['neorv32_5fsdi_2ec_263',['neorv32_sdi.c',['../neorv32__sdi_8c.html',1,'']]], + ['neorv32_5fsdi_2eh_264',['neorv32_sdi.h',['../neorv32__sdi_8h.html',1,'']]], + ['neorv32_5fsdi_5favailable_265',['neorv32_sdi_available',['../neorv32__sdi_8c.html#a51412722efdb18cd09667622b215e825',1,'neorv32_sdi_available(void):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a51412722efdb18cd09667622b215e825',1,'neorv32_sdi_available(void):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fbase_266',['NEORV32_SDI_BASE',['../neorv32_8h.html#a9b316ec038bd94ada42c9dab57a0a3cb',1,'neorv32.h']]], + ['neorv32_5fsdi_5fcheck_5fcs_267',['neorv32_sdi_check_cs',['../neorv32__sdi_8c.html#a2636cf1959ce1f3eb4b77c00ca2e2707',1,'neorv32_sdi_check_cs(void):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a2636cf1959ce1f3eb4b77c00ca2e2707',1,'neorv32_sdi_check_cs(void):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fctrl_5fenum_268',['NEORV32_SDI_CTRL_enum',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6',1,'neorv32_sdi.h']]], + ['neorv32_5fsdi_5fdisable_269',['neorv32_sdi_disable',['../neorv32__sdi_8c.html#a8bd54bca8aea6147651c8115ee616f54',1,'neorv32_sdi_disable(void):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a8bd54bca8aea6147651c8115ee616f54',1,'neorv32_sdi_disable(void):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fenable_270',['neorv32_sdi_enable',['../neorv32__sdi_8c.html#a5d68b9b1642baf3519076e55a22a8f61',1,'neorv32_sdi_enable(void):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a5d68b9b1642baf3519076e55a22a8f61',1,'neorv32_sdi_enable(void):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fget_271',['neorv32_sdi_get',['../neorv32__sdi_8c.html#a4d54ce22ec97eb83da118439576e3277',1,'neorv32_sdi_get(uint8_t *data):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a4d54ce22ec97eb83da118439576e3277',1,'neorv32_sdi_get(uint8_t *data):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fget_5ffifo_5fdepth_272',['neorv32_sdi_get_fifo_depth',['../neorv32__sdi_8c.html#a7390faeb01b4de3dd5ac18335736b90c',1,'neorv32_sdi_get_fifo_depth(void):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a7390faeb01b4de3dd5ac18335736b90c',1,'neorv32_sdi_get_fifo_depth(void):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fput_273',['neorv32_sdi_put',['../neorv32__sdi_8c.html#ac7a262d16c42bbac27723ff779545569',1,'neorv32_sdi_put(uint8_t data):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#ac7a262d16c42bbac27723ff779545569',1,'neorv32_sdi_put(uint8_t data):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fsetup_274',['neorv32_sdi_setup',['../neorv32__sdi_8c.html#a3246118dc0d7e1f61bc2485bbab44149',1,'neorv32_sdi_setup(uint32_t irq_mask):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a3246118dc0d7e1f61bc2485bbab44149',1,'neorv32_sdi_setup(uint32_t irq_mask):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5ft_275',['neorv32_sdi_t',['../structneorv32__sdi__t.html',1,'']]], + ['neorv32_5fslink_276',['NEORV32_SLINK',['../neorv32__slink_8h.html#a6380d894432de119a20993096db534df',1,'neorv32_slink.h']]], + ['neorv32_5fslink_2ec_277',['neorv32_slink.c',['../neorv32__slink_8c.html',1,'']]], + ['neorv32_5fslink_2eh_278',['neorv32_slink.h',['../neorv32__slink_8h.html',1,'']]], + ['neorv32_5fslink_5favailable_279',['neorv32_slink_available',['../neorv32__slink_8c.html#aaf0f7bc96b797e819ccaae94292d9ddb',1,'neorv32_slink_available(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#aaf0f7bc96b797e819ccaae94292d9ddb',1,'neorv32_slink_available(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fbase_280',['NEORV32_SLINK_BASE',['../neorv32_8h.html#ab5e6dc57886cd5ed98b86f22fc37d7cc',1,'neorv32.h']]], + ['neorv32_5fslink_5fcheck_5flast_281',['neorv32_slink_check_last',['../neorv32__slink_8c.html#a3e02c558548c1c6178c49adee9a007f7',1,'neorv32_slink_check_last(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#a3e02c558548c1c6178c49adee9a007f7',1,'neorv32_slink_check_last(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fctrl_5fenum_282',['NEORV32_SLINK_CTRL_enum',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1',1,'neorv32_slink.h']]], + ['neorv32_5fslink_5fget_283',['neorv32_slink_get',['../neorv32__slink_8c.html#ace319592c12dc6a0fe1b7dd66bdf9284',1,'neorv32_slink_get(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#ace319592c12dc6a0fe1b7dd66bdf9284',1,'neorv32_slink_get(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fget_5frx_5ffifo_5fdepth_284',['neorv32_slink_get_rx_fifo_depth',['../neorv32__slink_8c.html#a575c7663ca0bd07c95b1d45152a3ddf8',1,'neorv32_slink_get_rx_fifo_depth(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#a575c7663ca0bd07c95b1d45152a3ddf8',1,'neorv32_slink_get_rx_fifo_depth(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fget_5fsrc_285',['neorv32_slink_get_src',['../neorv32__slink_8c.html#a1a9269f42552a849450aecd99f7ec7a0',1,'neorv32_slink_get_src(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#a1a9269f42552a849450aecd99f7ec7a0',1,'neorv32_slink_get_src(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fget_5ftx_5ffifo_5fdepth_286',['neorv32_slink_get_tx_fifo_depth',['../neorv32__slink_8c.html#aaf0d0d1b890353d4f3bf49450ec2fad2',1,'neorv32_slink_get_tx_fifo_depth(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#aaf0d0d1b890353d4f3bf49450ec2fad2',1,'neorv32_slink_get_tx_fifo_depth(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fput_287',['neorv32_slink_put',['../neorv32__slink_8c.html#aaa9fdb9cbfa7888e92790ab65431d21d',1,'neorv32_slink_put(uint32_t tx_data):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#aaa9fdb9cbfa7888e92790ab65431d21d',1,'neorv32_slink_put(uint32_t tx_data):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fput_5flast_288',['neorv32_slink_put_last',['../neorv32__slink_8c.html#a2136bc0b12ee2e6703e84a6417a1e8eb',1,'neorv32_slink_put_last(uint32_t tx_data):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#a2136bc0b12ee2e6703e84a6417a1e8eb',1,'neorv32_slink_put_last(uint32_t tx_data):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5froute_5fenum_289',['NEORV32_SLINK_ROUTE_enum',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45',1,'neorv32_slink.h']]], + ['neorv32_5fslink_5frx_5fclear_290',['neorv32_slink_rx_clear',['../neorv32__slink_8c.html#ad149fea81e6d28f77450b8ba50cf706e',1,'neorv32_slink_rx_clear(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#ad149fea81e6d28f77450b8ba50cf706e',1,'neorv32_slink_rx_clear(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5frx_5fstatus_291',['neorv32_slink_rx_status',['../neorv32__slink_8c.html#ad57fc0941fe32e8bf423ce3e57e2c10a',1,'neorv32_slink_rx_status(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#ad57fc0941fe32e8bf423ce3e57e2c10a',1,'neorv32_slink_rx_status(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fset_5fdst_292',['neorv32_slink_set_dst',['../neorv32__slink_8c.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc',1,'neorv32_slink_set_dst(uint32_t dst):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc',1,'neorv32_slink_set_dst(uint32_t dst):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fsetup_293',['neorv32_slink_setup',['../neorv32__slink_8c.html#a8f0b4a768f53a72a5c16034e160ce321',1,'neorv32_slink_setup(uint32_t rx_irq, uint32_t tx_irq):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#a8f0b4a768f53a72a5c16034e160ce321',1,'neorv32_slink_setup(uint32_t rx_irq, uint32_t tx_irq):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fstatus_5fenum_294',['NEORV32_SLINK_STATUS_enum',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bf',1,'neorv32_slink.h']]], + ['neorv32_5fslink_5ft_295',['neorv32_slink_t',['../structneorv32__slink__t.html',1,'']]], + ['neorv32_5fslink_5ftx_5fclear_296',['neorv32_slink_tx_clear',['../neorv32__slink_8c.html#ac7484e9e3848f94efe016dd064f6a57f',1,'neorv32_slink_tx_clear(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#ac7484e9e3848f94efe016dd064f6a57f',1,'neorv32_slink_tx_clear(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5ftx_5fstatus_297',['neorv32_slink_tx_status',['../neorv32__slink_8c.html#ad0252e7ae915e5840cd17e8c52e94a1c',1,'neorv32_slink_tx_status(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#ad0252e7ae915e5840cd17e8c52e94a1c',1,'neorv32_slink_tx_status(void):&#160;neorv32_slink.c']]], + ['neorv32_5fspi_298',['NEORV32_SPI',['../neorv32__spi_8h.html#a5f3afc4e268670c54d90df67fa38ca22',1,'neorv32_spi.h']]], + ['neorv32_5fspi_2ec_299',['neorv32_spi.c',['../neorv32__spi_8c.html',1,'']]], + ['neorv32_5fspi_2eh_300',['neorv32_spi.h',['../neorv32__spi_8h.html',1,'']]], + ['neorv32_5fspi_5favailable_301',['neorv32_spi_available',['../neorv32__spi_8c.html#a7266ee439d0ec11c5cedd4bf1a258272',1,'neorv32_spi_available(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a7266ee439d0ec11c5cedd4bf1a258272',1,'neorv32_spi_available(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fbase_302',['NEORV32_SPI_BASE',['../neorv32_8h.html#aa466dc5eace7351bd438606f0f7475a7',1,'neorv32.h']]], + ['neorv32_5fspi_5fbusy_303',['neorv32_spi_busy',['../neorv32__spi_8c.html#a332c7a1be511812ac0a2b102c165398a',1,'neorv32_spi_busy(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a332c7a1be511812ac0a2b102c165398a',1,'neorv32_spi_busy(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fcheck_5fcs_304',['neorv32_spi_check_cs',['../neorv32__spi_8c.html#a82bb4d4c222b2bdc57e917c348481501',1,'neorv32_spi_check_cs(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a82bb4d4c222b2bdc57e917c348481501',1,'neorv32_spi_check_cs(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fdis_305',['neorv32_spi_cs_dis',['../neorv32__spi_8c.html#aa10ec90ccba6325eeeebb8f6f298d30c',1,'neorv32_spi_cs_dis(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#aa10ec90ccba6325eeeebb8f6f298d30c',1,'neorv32_spi_cs_dis(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fdis_5fnonblocking_306',['neorv32_spi_cs_dis_nonblocking',['../neorv32__spi_8c.html#ad8dd1b5a85a9daef4c8c21c9990884c1',1,'neorv32_spi_cs_dis_nonblocking(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#ad8dd1b5a85a9daef4c8c21c9990884c1',1,'neorv32_spi_cs_dis_nonblocking(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fen_307',['neorv32_spi_cs_en',['../neorv32__spi_8c.html#a737961d040ac09567350f89034f9e122',1,'neorv32_spi_cs_en(int cs):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a737961d040ac09567350f89034f9e122',1,'neorv32_spi_cs_en(int cs):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fen_5fnonblocking_308',['neorv32_spi_cs_en_nonblocking',['../neorv32__spi_8c.html#a97b5536347a27b053f071ba49071ba6f',1,'neorv32_spi_cs_en_nonblocking(int cs):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a97b5536347a27b053f071ba49071ba6f',1,'neorv32_spi_cs_en_nonblocking(int cs):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fctrl_5fenum_309',['NEORV32_SPI_CTRL_enum',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3b',1,'neorv32_spi.h']]], + ['neorv32_5fspi_5fdata_5fenum_310',['NEORV32_SPI_DATA_enum',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8',1,'neorv32_spi.h']]], + ['neorv32_5fspi_5fdisable_311',['neorv32_spi_disable',['../neorv32__spi_8c.html#a817dd9a38bfceb2048e40874a83ba169',1,'neorv32_spi_disable(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a817dd9a38bfceb2048e40874a83ba169',1,'neorv32_spi_disable(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fenable_312',['neorv32_spi_enable',['../neorv32__spi_8c.html#a8fa25d144ccb20a2faf0450c8dddd16e',1,'neorv32_spi_enable(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a8fa25d144ccb20a2faf0450c8dddd16e',1,'neorv32_spi_enable(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fget_5fclock_5fspeed_313',['neorv32_spi_get_clock_speed',['../neorv32__spi_8c.html#a01c6b63d7349447e2277f2649c3c89f2',1,'neorv32_spi_get_clock_speed(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a01c6b63d7349447e2277f2649c3c89f2',1,'neorv32_spi_get_clock_speed(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fget_5ffifo_5fdepth_314',['neorv32_spi_get_fifo_depth',['../neorv32__spi_8c.html#ae1c4da7e4dc2e42b04d7187f684f142c',1,'neorv32_spi_get_fifo_depth(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#ae1c4da7e4dc2e42b04d7187f684f142c',1,'neorv32_spi_get_fifo_depth(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fget_5fnonblocking_315',['neorv32_spi_get_nonblocking',['../neorv32__spi_8c.html#aad66fa8f8d1a92d4f355de7579bfbfd2',1,'neorv32_spi_get_nonblocking(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#aad66fa8f8d1a92d4f355de7579bfbfd2',1,'neorv32_spi_get_nonblocking(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fhighspeed_5fdisable_316',['neorv32_spi_highspeed_disable',['../neorv32__spi_8c.html#a67e9717635e272bc0e04408135a2f04d',1,'neorv32_spi_highspeed_disable(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a67e9717635e272bc0e04408135a2f04d',1,'neorv32_spi_highspeed_disable(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fhighspeed_5fenable_317',['neorv32_spi_highspeed_enable',['../neorv32__spi_8c.html#acf131faa3ad970c19a3cd8a47cb54f65',1,'neorv32_spi_highspeed_enable(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#acf131faa3ad970c19a3cd8a47cb54f65',1,'neorv32_spi_highspeed_enable(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5finit_318',['neorv32_spi_init',['../neorv32__spi__irq_8c.html#a4aa4746fd210ecc0c3614089a6951ddf',1,'neorv32_spi_init(t_neorv32_spi *self):&#160;neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#a4aa4746fd210ecc0c3614089a6951ddf',1,'neorv32_spi_init(t_neorv32_spi *self):&#160;neorv32_spi_irq.c']]], + ['neorv32_5fspi_5firq_2ec_319',['neorv32_spi_irq.c',['../neorv32__spi__irq_8c.html',1,'']]], + ['neorv32_5fspi_5firq_2eh_320',['neorv32_spi_irq.h',['../neorv32__spi__irq_8h.html',1,'']]], + ['neorv32_5fspi_5fisr_321',['neorv32_spi_isr',['../neorv32__spi__irq_8c.html#aa641816bb302df497664aa21ea69ed16',1,'neorv32_spi_isr(t_neorv32_spi *self):&#160;neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#aa641816bb302df497664aa21ea69ed16',1,'neorv32_spi_isr(t_neorv32_spi *self):&#160;neorv32_spi_irq.c']]], + ['neorv32_5fspi_5fput_5fnonblocking_322',['neorv32_spi_put_nonblocking',['../neorv32__spi_8c.html#aec8583e988789e846d21c2a35e6b06e7',1,'neorv32_spi_put_nonblocking(uint8_t tx_data):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#aec8583e988789e846d21c2a35e6b06e7',1,'neorv32_spi_put_nonblocking(uint8_t tx_data):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5frw_323',['neorv32_spi_rw',['../neorv32__spi__irq_8c.html#a1f44ed849415d8e1d659c0485762c485',1,'neorv32_spi_rw(t_neorv32_spi *self, uint8_t csn, void *spi, uint32_t len):&#160;neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#a1f44ed849415d8e1d659c0485762c485',1,'neorv32_spi_rw(t_neorv32_spi *self, uint8_t csn, void *spi, uint32_t len):&#160;neorv32_spi_irq.c']]], + ['neorv32_5fspi_5frw_5fbusy_324',['neorv32_spi_rw_busy',['../neorv32__spi__irq_8c.html#a1863e19932bc6a79f2ca27d23eb74ef5',1,'neorv32_spi_rw_busy(t_neorv32_spi *self):&#160;neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#a1863e19932bc6a79f2ca27d23eb74ef5',1,'neorv32_spi_rw_busy(t_neorv32_spi *self):&#160;neorv32_spi_irq.c']]], + ['neorv32_5fspi_5fsetup_325',['neorv32_spi_setup',['../neorv32__spi_8c.html#a7d8124d986b69210081df6f1aa653552',1,'neorv32_spi_setup(int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a7d8124d986b69210081df6f1aa653552',1,'neorv32_spi_setup(int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5ft_326',['neorv32_spi_t',['../structneorv32__spi__t.html',1,'']]], + ['neorv32_5fspi_5ftrans_327',['neorv32_spi_trans',['../neorv32__spi_8c.html#a7af79950eefc26e67a89bde02f255532',1,'neorv32_spi_trans(uint8_t tx_data):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a7af79950eefc26e67a89bde02f255532',1,'neorv32_spi_trans(uint8_t tx_data):&#160;neorv32_spi.c']]], + ['neorv32_5fsysinfo_328',['NEORV32_SYSINFO',['../neorv32__sysinfo_8h.html#a140e23434ef7e85b2b38d8ae9695227b',1,'neorv32_sysinfo.h']]], + ['neorv32_5fsysinfo_2ec_329',['neorv32_sysinfo.c',['../neorv32__sysinfo_8c.html',1,'']]], + ['neorv32_5fsysinfo_2eh_330',['neorv32_sysinfo.h',['../neorv32__sysinfo_8h.html',1,'']]], + ['neorv32_5fsysinfo_5fbase_331',['NEORV32_SYSINFO_BASE',['../neorv32_8h.html#a5aa936f38782232c7ed3eab1283ee536',1,'neorv32.h']]], + ['neorv32_5fsysinfo_5fcache_5fenum_332',['NEORV32_SYSINFO_CACHE_enum',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1ea',1,'neorv32_sysinfo.h']]], + ['neorv32_5fsysinfo_5fget_5fclk_333',['neorv32_sysinfo_get_clk',['../neorv32__sysinfo_8c.html#a098105f8a133087f286c7010c5dec8dd',1,'neorv32_sysinfo_get_clk(void):&#160;neorv32_sysinfo.c'],['../neorv32__sysinfo_8h.html#a098105f8a133087f286c7010c5dec8dd',1,'neorv32_sysinfo_get_clk(void):&#160;neorv32_sysinfo.c']]], + ['neorv32_5fsysinfo_5fmem_5fenum_334',['NEORV32_SYSINFO_MEM_enum',['../neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5f',1,'neorv32_sysinfo.h']]], + ['neorv32_5fsysinfo_5fset_5fclk_335',['neorv32_sysinfo_set_clk',['../neorv32__sysinfo_8c.html#a9b1ca94e298533641547ee448e1c52b3',1,'neorv32_sysinfo_set_clk(uint32_t clock):&#160;neorv32_sysinfo.c'],['../neorv32__sysinfo_8h.html#a9b1ca94e298533641547ee448e1c52b3',1,'neorv32_sysinfo_set_clk(uint32_t clock):&#160;neorv32_sysinfo.c']]], + ['neorv32_5fsysinfo_5fsoc_5fenum_336',['NEORV32_SYSINFO_SOC_enum',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08',1,'neorv32_sysinfo.h']]], + ['neorv32_5fsysinfo_5ft_337',['neorv32_sysinfo_t',['../structneorv32__sysinfo__t.html',1,'']]], + ['neorv32_5ftrng_338',['NEORV32_TRNG',['../neorv32__trng_8h.html#a9794ff3746eb5321ad9c2bf522ea26dd',1,'neorv32_trng.h']]], + ['neorv32_5ftrng_2ec_339',['neorv32_trng.c',['../neorv32__trng_8c.html',1,'']]], + ['neorv32_5ftrng_2eh_340',['neorv32_trng.h',['../neorv32__trng_8h.html',1,'']]], + ['neorv32_5ftrng_5favailable_341',['neorv32_trng_available',['../neorv32__trng_8c.html#af0c4139ff68763623b3d658a8dd8b5ce',1,'neorv32_trng_available(void):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#af0c4139ff68763623b3d658a8dd8b5ce',1,'neorv32_trng_available(void):&#160;neorv32_trng.c']]], + ['neorv32_5ftrng_5fbase_342',['NEORV32_TRNG_BASE',['../neorv32_8h.html#ab4846cd153e8a23deec45d81cc8372a2',1,'neorv32.h']]], + ['neorv32_5ftrng_5fcheck_5fsim_5fmode_343',['neorv32_trng_check_sim_mode',['../neorv32__trng_8c.html#aba36f08dd88f2f3e58353ae72eaa14f7',1,'neorv32_trng_check_sim_mode(void):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#aba36f08dd88f2f3e58353ae72eaa14f7',1,'neorv32_trng_check_sim_mode(void):&#160;neorv32_trng.c']]], + ['neorv32_5ftrng_5fctrl_5fenum_344',['NEORV32_TRNG_CTRL_enum',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1a',1,'neorv32_trng.h']]], + ['neorv32_5ftrng_5fdata_5fenum_345',['NEORV32_TRNG_DATA_enum',['../neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2',1,'neorv32_trng.h']]], + ['neorv32_5ftrng_5fdisable_346',['neorv32_trng_disable',['../neorv32__trng_8c.html#ae838bc980e28c300dc2c9c3f34a46bb8',1,'neorv32_trng_disable(void):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#ae838bc980e28c300dc2c9c3f34a46bb8',1,'neorv32_trng_disable(void):&#160;neorv32_trng.c']]], + ['neorv32_5ftrng_5fenable_347',['neorv32_trng_enable',['../neorv32__trng_8c.html#af64df166369d79bf744de06c8a962304',1,'neorv32_trng_enable(void):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#af64df166369d79bf744de06c8a962304',1,'neorv32_trng_enable(void):&#160;neorv32_trng.c']]], + ['neorv32_5ftrng_5ffifo_5fclear_348',['neorv32_trng_fifo_clear',['../neorv32__trng_8c.html#a87cfe338e2ff559f96c73f729465f967',1,'neorv32_trng_fifo_clear(void):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#a87cfe338e2ff559f96c73f729465f967',1,'neorv32_trng_fifo_clear(void):&#160;neorv32_trng.c']]], + ['neorv32_5ftrng_5fget_349',['neorv32_trng_get',['../neorv32__trng_8c.html#a9148bcb6a7c448c364e78fa98aac6985',1,'neorv32_trng_get(uint8_t *data):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#a9148bcb6a7c448c364e78fa98aac6985',1,'neorv32_trng_get(uint8_t *data):&#160;neorv32_trng.c']]], + ['neorv32_5ftrng_5fget_5ffifo_5fdepth_350',['neorv32_trng_get_fifo_depth',['../neorv32__trng_8c.html#ad24e44372f4fd1ed29a6967dccab4fb0',1,'neorv32_trng_get_fifo_depth(void):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#ad24e44372f4fd1ed29a6967dccab4fb0',1,'neorv32_trng_get_fifo_depth(void):&#160;neorv32_trng.c']]], + ['neorv32_5ftrng_5ft_351',['neorv32_trng_t',['../structneorv32__trng__t.html',1,'']]], + ['neorv32_5ftwd_352',['NEORV32_TWD',['../neorv32__twd_8h.html#ac9995cfc63846945ac26992148cd9401',1,'neorv32_twd.h']]], + ['neorv32_5ftwd_2ec_353',['neorv32_twd.c',['../neorv32__twd_8c.html',1,'']]], + ['neorv32_5ftwd_2eh_354',['neorv32_twd.h',['../neorv32__twd_8h.html',1,'']]], + ['neorv32_5ftwd_5favailable_355',['neorv32_twd_available',['../neorv32__twd_8c.html#ae6392461557d300b3b9c1f8e63a7dcc7',1,'neorv32_twd_available(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#ae6392461557d300b3b9c1f8e63a7dcc7',1,'neorv32_twd_available(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fbase_356',['NEORV32_TWD_BASE',['../neorv32_8h.html#a8ac9e39bd62e9c5d7bcde0d44716b958',1,'neorv32.h']]], + ['neorv32_5ftwd_5fbusy_357',['neorv32_twd_busy',['../neorv32__twd_8c.html#a90e8f83ff4f6f05a5aef0046e82dc908',1,'neorv32_twd_busy(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a90e8f83ff4f6f05a5aef0046e82dc908',1,'neorv32_twd_busy(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fclear_5frx_358',['neorv32_twd_clear_rx',['../neorv32__twd_8c.html#ab12e92dfbe37710c12b44fed97c01c06',1,'neorv32_twd_clear_rx(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#ab12e92dfbe37710c12b44fed97c01c06',1,'neorv32_twd_clear_rx(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fclear_5ftx_359',['neorv32_twd_clear_tx',['../neorv32__twd_8c.html#a38f7c54e2b356851f3b18011796f3902',1,'neorv32_twd_clear_tx(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a38f7c54e2b356851f3b18011796f3902',1,'neorv32_twd_clear_tx(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fctrl_5fenum_360',['NEORV32_TWD_CTRL_enum',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18',1,'neorv32_twd.h']]], + ['neorv32_5ftwd_5fdata_5fenum_361',['NEORV32_TWD_DATA_enum',['../neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8',1,'neorv32_twd.h']]], + ['neorv32_5ftwd_5fdisable_362',['neorv32_twd_disable',['../neorv32__twd_8c.html#af82c89d23e3fc3fbd61c750ecb25d0dc',1,'neorv32_twd_disable(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#af82c89d23e3fc3fbd61c750ecb25d0dc',1,'neorv32_twd_disable(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fenable_363',['neorv32_twd_enable',['../neorv32__twd_8c.html#a7fa01904130031ab2dee77b4058061c7',1,'neorv32_twd_enable(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a7fa01904130031ab2dee77b4058061c7',1,'neorv32_twd_enable(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fget_364',['neorv32_twd_get',['../neorv32__twd_8c.html#a6382d25525ff9bb88e6df0802f0037e2',1,'neorv32_twd_get(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a6382d25525ff9bb88e6df0802f0037e2',1,'neorv32_twd_get(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fget_5ffifo_5fdepth_365',['neorv32_twd_get_fifo_depth',['../neorv32__twd_8c.html#a4fe22b79183dc7d07a1b84a70328a00b',1,'neorv32_twd_get_fifo_depth(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a4fe22b79183dc7d07a1b84a70328a00b',1,'neorv32_twd_get_fifo_depth(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fput_366',['neorv32_twd_put',['../neorv32__twd_8c.html#a0cbf868493aa8931e5c5bc71e5b478a4',1,'neorv32_twd_put(uint8_t data):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a0cbf868493aa8931e5c5bc71e5b478a4',1,'neorv32_twd_put(uint8_t data):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5frx_5favailable_367',['neorv32_twd_rx_available',['../neorv32__twd_8c.html#af2b925dffe4e4d0f8412052b92281066',1,'neorv32_twd_rx_available(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#af2b925dffe4e4d0f8412052b92281066',1,'neorv32_twd_rx_available(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5frx_5ffull_368',['neorv32_twd_rx_full',['../neorv32__twd_8c.html#a138bd6bdefed2a24b746ddb550a02407',1,'neorv32_twd_rx_full(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a138bd6bdefed2a24b746ddb550a02407',1,'neorv32_twd_rx_full(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fsense_5fscl_369',['neorv32_twd_sense_scl',['../neorv32__twd_8c.html#a4d167a59c4297e0e93af5a74091bd752',1,'neorv32_twd_sense_scl(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a4d167a59c4297e0e93af5a74091bd752',1,'neorv32_twd_sense_scl(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fsense_5fsda_370',['neorv32_twd_sense_sda',['../neorv32__twd_8c.html#a6b728dd7e359c1f3ae170a4dae054a31',1,'neorv32_twd_sense_sda(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a6b728dd7e359c1f3ae170a4dae054a31',1,'neorv32_twd_sense_sda(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fsetup_371',['neorv32_twd_setup',['../neorv32__twd_8c.html#ace89f57655c6aacf6e05a5b6a29a1616',1,'neorv32_twd_setup(int device_addr, int fsel, int irq_rx_avail, int irq_rx_full, int irq_tx_empty):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#ace89f57655c6aacf6e05a5b6a29a1616',1,'neorv32_twd_setup(int device_addr, int fsel, int irq_rx_avail, int irq_rx_full, int irq_tx_empty):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5ft_372',['neorv32_twd_t',['../structneorv32__twd__t.html',1,'']]], + ['neorv32_5ftwd_5ftx_5fempty_373',['neorv32_twd_tx_empty',['../neorv32__twd_8c.html#ae106ee8a74649853eab1b2a07c2c0ede',1,'neorv32_twd_tx_empty(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#ae106ee8a74649853eab1b2a07c2c0ede',1,'neorv32_twd_tx_empty(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5ftx_5ffull_374',['neorv32_twd_tx_full',['../neorv32__twd_8c.html#ac06102b8e4f692415ec91d37253a3118',1,'neorv32_twd_tx_full(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#ac06102b8e4f692415ec91d37253a3118',1,'neorv32_twd_tx_full(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwi_375',['NEORV32_TWI',['../neorv32__twi_8h.html#a2769c2fe5e0de01b12fe4a5fad029768',1,'neorv32_twi.h']]], + ['neorv32_5ftwi_2ec_376',['neorv32_twi.c',['../neorv32__twi_8c.html',1,'']]], + ['neorv32_5ftwi_2eh_377',['neorv32_twi.h',['../neorv32__twi_8h.html',1,'']]], + ['neorv32_5ftwi_5favailable_378',['neorv32_twi_available',['../neorv32__twi_8c.html#aa2e01ebbc0c82d65ed4ded351f4d8711',1,'neorv32_twi_available(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#aa2e01ebbc0c82d65ed4ded351f4d8711',1,'neorv32_twi_available(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fbase_379',['NEORV32_TWI_BASE',['../neorv32_8h.html#a4a741408a4bb0938e03b99555306db9c',1,'neorv32.h']]], + ['neorv32_5ftwi_5fbusy_380',['neorv32_twi_busy',['../neorv32__twi_8c.html#a4fff1ddade320f6cc568c6266f2c2acd',1,'neorv32_twi_busy(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a4fff1ddade320f6cc568c6266f2c2acd',1,'neorv32_twi_busy(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fctrl_5fenum_381',['NEORV32_TWI_CTRL_enum',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafa',1,'neorv32_twi.h']]], + ['neorv32_5ftwi_5fdcmd_5fenum_382',['NEORV32_TWI_DCMD_enum',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8',1,'neorv32_twi.h']]], + ['neorv32_5ftwi_5fdisable_383',['neorv32_twi_disable',['../neorv32__twi_8c.html#ae5f31e737c7a6c3c86070ff34cb0d861',1,'neorv32_twi_disable(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#ae5f31e737c7a6c3c86070ff34cb0d861',1,'neorv32_twi_disable(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fenable_384',['neorv32_twi_enable',['../neorv32__twi_8c.html#a22717887cffff1e6830756bc73140e7b',1,'neorv32_twi_enable(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a22717887cffff1e6830756bc73140e7b',1,'neorv32_twi_enable(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstart_385',['neorv32_twi_generate_start',['../neorv32__twi_8c.html#a633d460e4735eb369d74a834b03c8b78',1,'neorv32_twi_generate_start(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a633d460e4735eb369d74a834b03c8b78',1,'neorv32_twi_generate_start(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstart_5fnonblocking_386',['neorv32_twi_generate_start_nonblocking',['../neorv32__twi_8c.html#adbf2eaed0c76221da5c3091665fc885e',1,'neorv32_twi_generate_start_nonblocking(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#adbf2eaed0c76221da5c3091665fc885e',1,'neorv32_twi_generate_start_nonblocking(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstop_387',['neorv32_twi_generate_stop',['../neorv32__twi_8c.html#ad352447adcccccabd4e20577b34fbece',1,'neorv32_twi_generate_stop(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#ad352447adcccccabd4e20577b34fbece',1,'neorv32_twi_generate_stop(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstop_5fnonblocking_388',['neorv32_twi_generate_stop_nonblocking',['../neorv32__twi_8c.html#aa22430aab0a38d88cbd2c4220c573da0',1,'neorv32_twi_generate_stop_nonblocking(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#aa22430aab0a38d88cbd2c4220c573da0',1,'neorv32_twi_generate_stop_nonblocking(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fget_389',['neorv32_twi_get',['../neorv32__twi_8c.html#a7735376d26560866b153ed205dfcb2ba',1,'neorv32_twi_get(uint8_t *data):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a7735376d26560866b153ed205dfcb2ba',1,'neorv32_twi_get(uint8_t *data):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fget_5ffifo_5fdepth_390',['neorv32_twi_get_fifo_depth',['../neorv32__twi_8c.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2',1,'neorv32_twi_get_fifo_depth(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2',1,'neorv32_twi_get_fifo_depth(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fsend_5fnonblocking_391',['neorv32_twi_send_nonblocking',['../neorv32__twi_8c.html#a28fc44cce5d28f6e8c32268b239b07d5',1,'neorv32_twi_send_nonblocking(uint8_t data, int mack):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a28fc44cce5d28f6e8c32268b239b07d5',1,'neorv32_twi_send_nonblocking(uint8_t data, int mack):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fsense_5fscl_392',['neorv32_twi_sense_scl',['../neorv32__twi_8c.html#a71e204837e71ce8c18c66e2ef3e7d9ef',1,'neorv32_twi_sense_scl(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a71e204837e71ce8c18c66e2ef3e7d9ef',1,'neorv32_twi_sense_scl(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fsense_5fsda_393',['neorv32_twi_sense_sda',['../neorv32__twi_8c.html#a7645e3ba5a92ea0fbe446dbaac33b363',1,'neorv32_twi_sense_sda(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a7645e3ba5a92ea0fbe446dbaac33b363',1,'neorv32_twi_sense_sda(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fsetup_394',['neorv32_twi_setup',['../neorv32__twi_8c.html#a7ea6f3509a7cf622234d4b83e33afbe3',1,'neorv32_twi_setup(int prsc, int cdiv, int clkstr):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a7ea6f3509a7cf622234d4b83e33afbe3',1,'neorv32_twi_setup(int prsc, int cdiv, int clkstr):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5ft_395',['neorv32_twi_t',['../structneorv32__twi__t.html',1,'']]], + ['neorv32_5ftwi_5ftrans_396',['neorv32_twi_trans',['../neorv32__twi_8c.html#ac7020f3379602f11c47ca16f1bd82f2e',1,'neorv32_twi_trans(uint8_t *data, int mack):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#ac7020f3379602f11c47ca16f1bd82f2e',1,'neorv32_twi_trans(uint8_t *data, int mack):&#160;neorv32_twi.c']]], + ['neorv32_5fuart_2ec_397',['neorv32_uart.c',['../neorv32__uart_8c.html',1,'']]], + ['neorv32_5fuart_2eh_398',['neorv32_uart.h',['../neorv32__uart_8h.html',1,'']]], + ['neorv32_5fuart0_399',['NEORV32_UART0',['../neorv32__uart_8h.html#a4c880a6b27e46f459e750425258b1bdb',1,'neorv32_uart.h']]], + ['neorv32_5fuart0_5fbase_400',['NEORV32_UART0_BASE',['../neorv32_8h.html#a000b37f710043fe21e49b2fdbc039d94',1,'neorv32.h']]], + ['neorv32_5fuart1_401',['NEORV32_UART1',['../neorv32__uart_8h.html#aa2a9ded4523f001bf69935c80247fa2d',1,'neorv32_uart.h']]], + ['neorv32_5fuart1_5fbase_402',['NEORV32_UART1_BASE',['../neorv32_8h.html#a26a1defe18ce222b8b4ed1c760344700',1,'neorv32.h']]], + ['neorv32_5fuart_5favailable_403',['neorv32_uart_available',['../neorv32__uart_8c.html#abef6415b0391dc055713404312196682',1,'neorv32_uart_available(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#abef6415b0391dc055713404312196682',1,'neorv32_uart_available(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fchar_5freceived_404',['neorv32_uart_char_received',['../neorv32__uart_8c.html#adedb0e07efb232717534017167a5be98',1,'neorv32_uart_char_received(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#adedb0e07efb232717534017167a5be98',1,'neorv32_uart_char_received(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fchar_5freceived_5fget_405',['neorv32_uart_char_received_get',['../neorv32__uart_8c.html#aa490df3a9bb2aa3215fa6fad34ffe7d1',1,'neorv32_uart_char_received_get(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#aa490df3a9bb2aa3215fa6fad34ffe7d1',1,'neorv32_uart_char_received_get(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fctrl_5fenum_406',['NEORV32_UART_CTRL_enum',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afc',1,'neorv32_uart.h']]], + ['neorv32_5fuart_5fdata_5fenum_407',['NEORV32_UART_DATA_enum',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2',1,'neorv32_uart.h']]], + ['neorv32_5fuart_5fdisable_408',['neorv32_uart_disable',['../neorv32__uart_8c.html#ae18804ccd29ec2fd1cc06e9ce985b704',1,'neorv32_uart_disable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#ae18804ccd29ec2fd1cc06e9ce985b704',1,'neorv32_uart_disable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fenable_409',['neorv32_uart_enable',['../neorv32__uart_8c.html#afa0533e81d53057c36f4997a2dbbe2bc',1,'neorv32_uart_enable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#afa0533e81d53057c36f4997a2dbbe2bc',1,'neorv32_uart_enable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fget_5frx_5ffifo_5fdepth_410',['neorv32_uart_get_rx_fifo_depth',['../neorv32__uart_8c.html#af85fb929c912d3edef3d86ffa833982a',1,'neorv32_uart_get_rx_fifo_depth(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#af85fb929c912d3edef3d86ffa833982a',1,'neorv32_uart_get_rx_fifo_depth(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fget_5ftx_5ffifo_5fdepth_411',['neorv32_uart_get_tx_fifo_depth',['../neorv32__uart_8c.html#a031e3e27c8783c299623468020a22b0e',1,'neorv32_uart_get_tx_fifo_depth(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a031e3e27c8783c299623468020a22b0e',1,'neorv32_uart_get_tx_fifo_depth(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fgetc_412',['neorv32_uart_getc',['../neorv32__uart_8c.html#a2efd432f63b8d36d44263d0b1f39a6dc',1,'neorv32_uart_getc(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a2efd432f63b8d36d44263d0b1f39a6dc',1,'neorv32_uart_getc(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fprintf_413',['neorv32_uart_printf',['../neorv32__uart_8c.html#ab8c1f9f451def9126ab2749d7bbe50d9',1,'neorv32_uart_printf(neorv32_uart_t *UARTx, const char *format,...):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#ab8c1f9f451def9126ab2749d7bbe50d9',1,'neorv32_uart_printf(neorv32_uart_t *UARTx, const char *format,...):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fputc_414',['neorv32_uart_putc',['../neorv32__uart_8c.html#a9bc7bb94a50b74e1145b78eec6094129',1,'neorv32_uart_putc(neorv32_uart_t *UARTx, char c):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a9bc7bb94a50b74e1145b78eec6094129',1,'neorv32_uart_putc(neorv32_uart_t *UARTx, char c):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fputs_415',['neorv32_uart_puts',['../neorv32__uart_8c.html#a45a07d5e71677162baaa1025759c67a2',1,'neorv32_uart_puts(neorv32_uart_t *UARTx, const char *s):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a45a07d5e71677162baaa1025759c67a2',1,'neorv32_uart_puts(neorv32_uart_t *UARTx, const char *s):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5frtscts_5fdisable_416',['neorv32_uart_rtscts_disable',['../neorv32__uart_8c.html#a7b2f924ef4554b1fa90433c38d97558d',1,'neorv32_uart_rtscts_disable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a7b2f924ef4554b1fa90433c38d97558d',1,'neorv32_uart_rtscts_disable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5frtscts_5fenable_417',['neorv32_uart_rtscts_enable',['../neorv32__uart_8c.html#a734b610f4cd1b474d7763f9700a715ec',1,'neorv32_uart_rtscts_enable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a734b610f4cd1b474d7763f9700a715ec',1,'neorv32_uart_rtscts_enable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5frx_5fclear_418',['neorv32_uart_rx_clear',['../neorv32__uart_8c.html#afe0de59c14faff1e0c890d5465be25f0',1,'neorv32_uart_rx_clear(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#afe0de59c14faff1e0c890d5465be25f0',1,'neorv32_uart_rx_clear(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fscan_419',['neorv32_uart_scan',['../neorv32__uart_8c.html#ac429964878bd6deab61d9ed8659bca75',1,'neorv32_uart_scan(neorv32_uart_t *UARTx, char *buffer, int max_size, int echo):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#ac429964878bd6deab61d9ed8659bca75',1,'neorv32_uart_scan(neorv32_uart_t *UARTx, char *buffer, int max_size, int echo):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fsetup_420',['neorv32_uart_setup',['../neorv32__uart_8c.html#a9cdec36f2723c5373664022d1b68b841',1,'neorv32_uart_setup(neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a9cdec36f2723c5373664022d1b68b841',1,'neorv32_uart_setup(neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5ft_421',['neorv32_uart_t',['../structneorv32__uart__t.html',1,'']]], + ['neorv32_5fuart_5ftx_5fbusy_422',['neorv32_uart_tx_busy',['../neorv32__uart_8c.html#aa7bef48a58e044c246b8c4ad32864502',1,'neorv32_uart_tx_busy(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#aa7bef48a58e044c246b8c4ad32864502',1,'neorv32_uart_tx_busy(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5ftx_5fclear_423',['neorv32_uart_tx_clear',['../neorv32__uart_8c.html#a27971954262a2fd1f21d3bf1ba27e87c',1,'neorv32_uart_tx_clear(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a27971954262a2fd1f21d3bf1ba27e87c',1,'neorv32_uart_tx_clear(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fvprintf_424',['neorv32_uart_vprintf',['../neorv32__uart_8c.html#a8714cdb1c04d94bec322c6215ea10238',1,'neorv32_uart_vprintf(neorv32_uart_t *UARTx, const char *format, va_list args):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a8714cdb1c04d94bec322c6215ea10238',1,'neorv32_uart_vprintf(neorv32_uart_t *UARTx, const char *format, va_list args):&#160;neorv32_uart.c']]], + ['neorv32_5fwdt_425',['NEORV32_WDT',['../neorv32__wdt_8h.html#a78615b08cd799063011606d084fef46c',1,'neorv32_wdt.h']]], + ['neorv32_5fwdt_2ec_426',['neorv32_wdt.c',['../neorv32__wdt_8c.html',1,'']]], + ['neorv32_5fwdt_2eh_427',['neorv32_wdt.h',['../neorv32__wdt_8h.html',1,'']]], + ['neorv32_5fwdt_5favailable_428',['neorv32_wdt_available',['../neorv32__wdt_8c.html#a459a918c5a86c0167e8c748352d39827',1,'neorv32_wdt_available(void):&#160;neorv32_wdt.c'],['../neorv32__wdt_8h.html#a459a918c5a86c0167e8c748352d39827',1,'neorv32_wdt_available(void):&#160;neorv32_wdt.c']]], + ['neorv32_5fwdt_5fbase_429',['NEORV32_WDT_BASE',['../neorv32_8h.html#a3012986cdd5748ee96bcc74cd7108dea',1,'neorv32.h']]], + ['neorv32_5fwdt_5fctrl_5fenum_430',['NEORV32_WDT_CTRL_enum',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23e',1,'neorv32_wdt.h']]], + ['neorv32_5fwdt_5fdisable_431',['neorv32_wdt_disable',['../neorv32__wdt_8c.html#aba52520582392a671e2b717715a330b2',1,'neorv32_wdt_disable(void):&#160;neorv32_wdt.c'],['../neorv32__wdt_8h.html#aba52520582392a671e2b717715a330b2',1,'neorv32_wdt_disable(void):&#160;neorv32_wdt.c']]], + ['neorv32_5fwdt_5ffeed_432',['neorv32_wdt_feed',['../neorv32__wdt_8c.html#ae4e86c42ed45eefdec43d9ece08b98a4',1,'neorv32_wdt_feed(uint32_t password):&#160;neorv32_wdt.c'],['../neorv32__wdt_8h.html#ae4e86c42ed45eefdec43d9ece08b98a4',1,'neorv32_wdt_feed(uint32_t password):&#160;neorv32_wdt.c']]], + ['neorv32_5fwdt_5fget_5fcause_433',['neorv32_wdt_get_cause',['../neorv32__wdt_8c.html#a80fa8d178d18c9b02d32d93e815b532e',1,'neorv32_wdt_get_cause(void):&#160;neorv32_wdt.c'],['../neorv32__wdt_8h.html#a80fa8d178d18c9b02d32d93e815b532e',1,'neorv32_wdt_get_cause(void):&#160;neorv32_wdt.c']]], + ['neorv32_5fwdt_5frcause_5fenum_434',['NEORV32_WDT_RCAUSE_enum',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049',1,'neorv32_wdt.h']]], + ['neorv32_5fwdt_5fsetup_435',['neorv32_wdt_setup',['../neorv32__wdt_8c.html#a2aa72608191d34ef41c5f545988ff400',1,'neorv32_wdt_setup(uint32_t timeout, int lock, int debug_en, int sleep_en, int strict):&#160;neorv32_wdt.c'],['../neorv32__wdt_8h.html#a2aa72608191d34ef41c5f545988ff400',1,'neorv32_wdt_setup(uint32_t timeout, int lock, int debug_en, int sleep_en, int strict):&#160;neorv32_wdt.c']]], + ['neorv32_5fwdt_5ft_436',['neorv32_wdt_t',['../structneorv32__wdt__t.html',1,'']]], + ['neorv32_5fxip_437',['NEORV32_XIP',['../neorv32__xip_8h.html#a3d6f138a347c16883b51069428eb7c1e',1,'neorv32_xip.h']]], + ['neorv32_5fxip_2ec_438',['neorv32_xip.c',['../neorv32__xip_8c.html',1,'']]], + ['neorv32_5fxip_2eh_439',['neorv32_xip.h',['../neorv32__xip_8h.html',1,'']]], + ['neorv32_5fxip_5favailable_440',['neorv32_xip_available',['../neorv32__xip_8c.html#afe2e5682a26cafdb0585d2233bccc7c6',1,'neorv32_xip_available(void):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#afe2e5682a26cafdb0585d2233bccc7c6',1,'neorv32_xip_available(void):&#160;neorv32_xip.c']]], + ['neorv32_5fxip_5fbase_441',['NEORV32_XIP_BASE',['../neorv32_8h.html#ae0978315beac8399f96f520bda81c7fe',1,'neorv32.h']]], + ['neorv32_5fxip_5fctrl_5fenum_442',['NEORV32_XIP_CTRL_enum',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceb',1,'neorv32_xip.h']]], + ['neorv32_5fxip_5fget_5fclock_5fspeed_443',['neorv32_xip_get_clock_speed',['../neorv32__xip_8c.html#a88f728101e82939bf7f8b9ab5a904706',1,'neorv32_xip_get_clock_speed(void):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#a88f728101e82939bf7f8b9ab5a904706',1,'neorv32_xip_get_clock_speed(void):&#160;neorv32_xip.c']]], + ['neorv32_5fxip_5fhighspeed_5fdisable_444',['neorv32_xip_highspeed_disable',['../neorv32__xip_8c.html#ad74f2842ed2251e3ae5c19e06dced0c3',1,'neorv32_xip_highspeed_disable(void):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#ad74f2842ed2251e3ae5c19e06dced0c3',1,'neorv32_xip_highspeed_disable(void):&#160;neorv32_xip.c']]], + ['neorv32_5fxip_5fhighspeed_5fenable_445',['neorv32_xip_highspeed_enable',['../neorv32__xip_8c.html#a6aef2ea29451ba2aa55160da777a5115',1,'neorv32_xip_highspeed_enable(void):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#a6aef2ea29451ba2aa55160da777a5115',1,'neorv32_xip_highspeed_enable(void):&#160;neorv32_xip.c']]], + ['neorv32_5fxip_5fsetup_446',['neorv32_xip_setup',['../neorv32__xip_8c.html#a549d68abdf5a3d7484abe6d5370bb999',1,'neorv32_xip_setup(int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#a549d68abdf5a3d7484abe6d5370bb999',1,'neorv32_xip_setup(int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd):&#160;neorv32_xip.c']]], + ['neorv32_5fxip_5fspi_5ftrans_447',['neorv32_xip_spi_trans',['../neorv32__xip_8c.html#a92f1446a3bb7fe6dee5dbed33882b223',1,'neorv32_xip_spi_trans(int nbytes, uint64_t *rtx_data):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#a92f1446a3bb7fe6dee5dbed33882b223',1,'neorv32_xip_spi_trans(int nbytes, uint64_t *rtx_data):&#160;neorv32_xip.c']]], + ['neorv32_5fxip_5fstart_448',['neorv32_xip_start',['../neorv32__xip_8c.html#a0ab2c36c973030a811e6d7abe0afc393',1,'neorv32_xip_start(int abytes):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#a0ab2c36c973030a811e6d7abe0afc393',1,'neorv32_xip_start(int abytes):&#160;neorv32_xip.c']]], + ['neorv32_5fxip_5ft_449',['neorv32_xip_t',['../structneorv32__xip__t.html',1,'']]], + ['neorv32_5fxirq_450',['NEORV32_XIRQ',['../neorv32__xirq_8h.html#a0c0886139e9837867202e5f6a83307c4',1,'neorv32_xirq.h']]], + ['neorv32_5fxirq_2ec_451',['neorv32_xirq.c',['../neorv32__xirq_8c.html',1,'']]], + ['neorv32_5fxirq_2eh_452',['neorv32_xirq.h',['../neorv32__xirq_8h.html',1,'']]], + ['neorv32_5fxirq_5favailable_453',['neorv32_xirq_available',['../neorv32__xirq_8c.html#aaf30757d526030a8d81081915ab29a76',1,'neorv32_xirq_available(void):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#aaf30757d526030a8d81081915ab29a76',1,'neorv32_xirq_available(void):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fbase_454',['NEORV32_XIRQ_BASE',['../neorv32_8h.html#a942a897be2d4ae6820bee0f7bb3a0ff1',1,'neorv32.h']]], + ['neorv32_5fxirq_5fchannel_5fdisable_455',['neorv32_xirq_channel_disable',['../neorv32__xirq_8c.html#ae17509ad0c828aa9b36747b253cdbf0a',1,'neorv32_xirq_channel_disable(int channel):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#ae17509ad0c828aa9b36747b253cdbf0a',1,'neorv32_xirq_channel_disable(int channel):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fchannel_5fenable_456',['neorv32_xirq_channel_enable',['../neorv32__xirq_8c.html#abe63c0968c94b472082c8156a1a7db5c',1,'neorv32_xirq_channel_enable(int channel):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#abe63c0968c94b472082c8156a1a7db5c',1,'neorv32_xirq_channel_enable(int channel):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fget_5fnum_457',['neorv32_xirq_get_num',['../neorv32__xirq_8c.html#a717a8e34908cc01345e68920e76f229c',1,'neorv32_xirq_get_num(void):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#a717a8e34908cc01345e68920e76f229c',1,'neorv32_xirq_get_num(void):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fglobal_5fdisable_458',['neorv32_xirq_global_disable',['../neorv32__xirq_8c.html#ac64d3ff5619968499bccebebe6a6cab3',1,'neorv32_xirq_global_disable(void):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#ac64d3ff5619968499bccebebe6a6cab3',1,'neorv32_xirq_global_disable(void):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fglobal_5fenable_459',['neorv32_xirq_global_enable',['../neorv32__xirq_8c.html#a76468156ef52b371e06bc2ca8eddcd27',1,'neorv32_xirq_global_enable(void):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#a76468156ef52b371e06bc2ca8eddcd27',1,'neorv32_xirq_global_enable(void):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5finstall_460',['neorv32_xirq_install',['../neorv32__xirq_8c.html#a9129984f91c02afafaa072a5d86f9876',1,'neorv32_xirq_install(int channel, void(*handler)(void)):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#a9129984f91c02afafaa072a5d86f9876',1,'neorv32_xirq_install(int channel, void(*handler)(void)):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fsetup_461',['neorv32_xirq_setup',['../neorv32__xirq_8c.html#a9295997fce7114a8205325c4d75dd200',1,'neorv32_xirq_setup(void):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#a9295997fce7114a8205325c4d75dd200',1,'neorv32_xirq_setup(void):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fsetup_5ftrigger_462',['neorv32_xirq_setup_trigger',['../neorv32__xirq_8c.html#a0d137f09d1e7dcd31c157b856033ac42',1,'neorv32_xirq_setup_trigger(int channel, int config):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#a0d137f09d1e7dcd31c157b856033ac42',1,'neorv32_xirq_setup_trigger(int channel, int config):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5ft_463',['neorv32_xirq_t',['../structneorv32__xirq__t.html',1,'']]], + ['neorv32_5fxirq_5funinstall_464',['neorv32_xirq_uninstall',['../neorv32__xirq_8c.html#a49ae67d1d5066cd795149e96b81127f7',1,'neorv32_xirq_uninstall(int channel):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#a49ae67d1d5066cd795149e96b81127f7',1,'neorv32_xirq_uninstall(int channel):&#160;neorv32_xirq.c']]], + ['neorv32_5fzfinx_5fextension_5fintrinsics_2eh_465',['neorv32_zfinx_extension_intrinsics.h',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html',1,'']]], + ['num_5fcells_5fx_466',['NUM_CELLS_X',['../game__of__life_2main_8c.html#a78c5b500f0f057bcaedf6fedeca7c537',1,'main.c']]], + ['num_5fcells_5fy_467',['NUM_CELLS_Y',['../game__of__life_2main_8c.html#aed77778557404b38bebb05b5830368b4',1,'main.c']]], + ['num_5fleds_5f24bit_468',['NUM_LEDS_24BIT',['../demo__neopixel_2main_8c.html#aa1dddb8d6b3b4d2f19afc3c09e2ff572',1,'main.c']]], + ['num_5ftest_5fcases_469',['NUM_TEST_CASES',['../atomic__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e',1,'NUM_TEST_CASES:&#160;main.c'],['../float__corner__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e',1,'NUM_TEST_CASES:&#160;main.c'],['../floating__point__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e',1,'NUM_TEST_CASES:&#160;main.c']]] +]; diff --git a/sw/search/all_14.js b/sw/search/all_14.js new file mode 100644 index 0000000000..b896107378 --- /dev/null +++ b/sw/search/all_14.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['onewire_5fctrl_5fbusy_0',['ONEWIRE_CTRL_BUSY',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclear_1',['ONEWIRE_CTRL_CLEAR',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831adfe5373712e0c02da3aa5dfd8ca5e51e',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv0_2',['ONEWIRE_CTRL_CLKDIV0',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv7_3',['ONEWIRE_CTRL_CLKDIV7',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fen_4',['ONEWIRE_CTRL_EN',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5ffifo_5flsb_5',['ONEWIRE_CTRL_FIFO_LSB',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a3903370331c6ae15cd37381bc64b6016',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5ffifo_5fmsb_6',['ONEWIRE_CTRL_FIFO_MSB',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a101cd15b58450d9740ab92bb5c40ba63',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fprsc0_7',['ONEWIRE_CTRL_PRSC0',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fprsc1_8',['ONEWIRE_CTRL_PRSC1',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5frx_5favail_9',['ONEWIRE_CTRL_RX_AVAIL',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a74d1259bee8e3e1d18cc69a2d8ce4749',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fsense_10',['ONEWIRE_CTRL_SENSE',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5ftx_5ffull_11',['ONEWIRE_CTRL_TX_FULL',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a5db9e3557d447c62039ad3437caa9884',1,'neorv32_onewire.h']]], + ['onewire_5fdcmd_5fcmd_5fhi_12',['ONEWIRE_DCMD_CMD_HI',['../neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aeb1f95a9b6f3b4a295578e874a1ad5d0',1,'neorv32_onewire.h']]], + ['onewire_5fdcmd_5fcmd_5flo_13',['ONEWIRE_DCMD_CMD_LO',['../neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26ac095ac82ef2be6e67b5c9f6b9f5c4379',1,'neorv32_onewire.h']]], + ['onewire_5fdcmd_5fdata_5flsb_14',['ONEWIRE_DCMD_DATA_LSB',['../neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a035b3e4021a1959a7cbd8954e838c324',1,'neorv32_onewire.h']]], + ['onewire_5fdcmd_5fdata_5fmsb_15',['ONEWIRE_DCMD_DATA_MSB',['../neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a36fe4def67f02a3d06dbe47231d6f21d',1,'neorv32_onewire.h']]], + ['onewire_5fdcmd_5fpresence_16',['ONEWIRE_DCMD_PRESENCE',['../neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aa4cd11972bbc09f7a7eab8e129b280b4',1,'neorv32_onewire.h']]], + ['onewire_5ffirq_5fenable_17',['ONEWIRE_FIRQ_ENABLE',['../neorv32_8h.html#a8bb1918679e32e898af2d485cfa44afb',1,'neorv32.h']]], + ['onewire_5ffirq_5fpending_18',['ONEWIRE_FIRQ_PENDING',['../neorv32_8h.html#a3853ef999f99ca062e6025038811d0f0',1,'neorv32.h']]], + ['onewire_5frte_5fid_19',['ONEWIRE_RTE_ID',['../neorv32_8h.html#a142f4a1c754edfab292706618d427b94',1,'neorv32.h']]], + ['onewire_5ftrap_5fcode_20',['ONEWIRE_TRAP_CODE',['../neorv32_8h.html#a3e7aaa405a7d1fcd71a36c4b6b5a4081',1,'neorv32.h']]], + ['output_21',['OUTPUT',['../structneorv32__gpio__t.html#abaf7de4f79adfc3debcde93fa4a921bb',1,'neorv32_gpio_t']]], + ['overview_22',['1. Overview',['../md_README.html#autotoc_md1',1,'']]] +]; diff --git a/sw/search/all_15.js b/sw/search/all_15.js new file mode 100644 index 0000000000..5e715eebdc --- /dev/null +++ b/sw/search/all_15.js @@ -0,0 +1,40 @@ +var searchData= +[ + ['performance_0',['4. Performance',['../md_README.html#autotoc_md6',1,'']]], + ['plain_5fdata_5fhw_1',['plain_data_hw',['../demo__cfu_2main_8c.html#aee8dde13fe2f5ac52dd6075e2fe1eab5',1,'main.c']]], + ['plain_5fdata_5fsw_2',['plain_data_sw',['../demo__cfu_2main_8c.html#a72ba1460776ad684028448ca51810bbe',1,'main.c']]], + ['pmp_5fna4_3',['PMP_NA4',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892',1,'neorv32_cpu_csr.h']]], + ['pmp_5fnapot_4',['PMP_NAPOT',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820',1,'neorv32_cpu_csr.h']]], + ['pmp_5foff_5',['PMP_OFF',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4',1,'neorv32_cpu_csr.h']]], + ['pmp_5ftor_6',['PMP_TOR',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fa_5flsb_7',['PMPCFG_A_LSB',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fa_5fmsb_8',['PMPCFG_A_MSB',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fl_9',['PMPCFG_L',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fr_10',['PMPCFG_R',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fw_11',['PMPCFG_W',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fx_12',['PMPCFG_X',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d',1,'neorv32_cpu_csr.h']]], + ['poly_13',['POLY',['../structneorv32__crc__t.html#a9bbcab843ddba4f9772d07478947a661',1,'neorv32_crc_t']]], + ['pop_5fcount_14',['pop_count',['../game__of__life_2main_8c.html#aac4bec7738b12f5a4b4d7a3a6cb1ab8d',1,'main.c']]], + ['print_5fgetc_15',['PRINT_GETC',['../bootloader_8c.html#a999b04603115ce08b0cb33e333312480',1,'bootloader.c']]], + ['print_5fhelp_16',['print_help',['../bootloader_8c.html#a402ea961bfc2ffeee61e3a7c330b1559',1,'bootloader.c']]], + ['print_5fhex_5fbyte_17',['print_hex_byte',['../demo__twi_2main_8c.html#a2ebc688bc1dad328693fc0974b378fa0',1,'main.c']]], + ['print_5fhex_5fword_18',['print_hex_word',['../bootloader_8c.html#a70b7d5c3b3ae97e4e72e84c4bc28fb8a',1,'bootloader.c']]], + ['print_5fputc_19',['PRINT_PUTC',['../bootloader_8c.html#aa7afbe8348ebd1a876a4d247553292e9',1,'bootloader.c']]], + ['print_5frandom_5fdata_20',['print_random_data',['../demo__trng_2main_8c.html#a64205d97b57c99dc5e95b8621827f4a4',1,'main.c']]], + ['print_5freport_21',['print_report',['../atomic__test_2main_8c.html#a99377a057d14aaa9b45f8cab890e8cf7',1,'print_report(int num_err, int num_tests):&#160;main.c'],['../float__corner__test_2main_8c.html#a1740720aa8ce1a30fcf642be9140d203',1,'print_report(uint32_t num_err):&#160;main.c'],['../floating__point__test_2main_8c.html#a1740720aa8ce1a30fcf642be9140d203',1,'print_report(uint32_t num_err):&#160;main.c']]], + ['print_5ftext_22',['PRINT_TEXT',['../bootloader_8c.html#a0e5a66f68ecc7a6f42088f349707e852',1,'bootloader.c']]], + ['print_5funiverse_23',['print_universe',['../game__of__life_2main_8c.html#a9a455dea83a25f656fcc5217ad513dac',1,'main.c']]], + ['print_5fxnum_24',['PRINT_XNUM',['../bootloader_8c.html#a2f5cc04cf9c85f5d2958b384e053053b',1,'bootloader.c']]], + ['processor_25',['The NEORV32 RISC-V Processor',['../md_README.html#autotoc_md0',1,'']]], + ['processor_20a_20the_20soc_26',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['project_20a_20an_20introduction_27',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['project_20status_28',['Project Status',['../md_README.html#autotoc_md3',1,'']]], + ['ptrspibuf_29',['ptrSpiBuf',['../structt__neorv32__spi.html#a487a6510820871ff8d0da7699463f6d9',1,'t_neorv32_spi']]], + ['pwm_5fcfg_5fcdiv_5flsb_30',['PWM_CFG_CDIV_LSB',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175acc7e31e4b3f0e7ab0a0306a107109b4f',1,'neorv32_pwm.h']]], + ['pwm_5fcfg_5fcdiv_5fmsb_31',['PWM_CFG_CDIV_MSB',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a6f741e102b7e15e946714360e81f4bb2',1,'neorv32_pwm.h']]], + ['pwm_5fcfg_5fduty_5flsb_32',['PWM_CFG_DUTY_LSB',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a9aa8249716b15c92368c93b36bf7db43',1,'neorv32_pwm.h']]], + ['pwm_5fcfg_5fduty_5fmsb_33',['PWM_CFG_DUTY_MSB',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175af5d9dcb5740c39cfe8f9bfb5c1b66341',1,'neorv32_pwm.h']]], + ['pwm_5fcfg_5fen_34',['PWM_CFG_EN',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a2b766bfa9653705025b745e0809c432a',1,'neorv32_pwm.h']]], + ['pwm_5fcfg_5fprsc_5flsb_35',['PWM_CFG_PRSC_LSB',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aefe2211fe39acffb40ca738639b3d5f5',1,'neorv32_pwm.h']]], + ['pwm_5fcfg_5fprsc_5fmsb_36',['PWM_CFG_PRSC_MSB',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aa100b419699cd3c6787a9168a3ffec3d',1,'neorv32_pwm.h']]] +]; diff --git a/sw/search/all_16.js b/sw/search/all_16.js new file mode 100644 index 0000000000..d4c0c774f1 --- /dev/null +++ b/sw/search/all_16.js @@ -0,0 +1,100 @@ +var searchData= +[ + ['ram_5fbuffer_0',['ram_buffer',['../demo__xip_2main_8c.html#acc95e55a622d79c2a398397d1f9b8033',1,'main.c']]], + ['read_5fbyte_1',['read_byte',['../demo__onewire_2main_8c.html#a951a31029af34715f20856eb82432637',1,'main.c']]], + ['read_5fmemory_2',['read_memory',['../bus__explorer_2main_8c.html#afc9b1ab3db46eccf51d55c715fa2fbd4',1,'main.c']]], + ['readme_3',['README',['../md_README.html',1,'']]], + ['record_4',['record',['../structrecord.html',1,'']]], + ['reg_5',['REG',['../structneorv32__cfs__t.html#a9bfa2b6f4938f42fb1ee3beaeb8cc32e',1,'neorv32_cfs_t']]], + ['repetition_5fcount_5ftest_6',['repetition_count_test',['../demo__trng_2main_8c.html#af37eae672fee5e81f00a1dbf51b7e417',1,'main.c']]], + ['reserved_7',['reserved',['../structneorv32__xip__t.html#aacb77d586c3caec518e8e0024cfe745c',1,'neorv32_xip_t']]], + ['reset_8',['RESET',['../structneorv32__wdt__t.html#a0a273e8ca2bd92547bf7727ec65a9449',1,'neorv32_wdt_t']]], + ['results_9',['3. FPGA Implementation Results',['../md_README.html#autotoc_md5',1,'']]], + ['risc_20v_20processor_10',['The NEORV32 RISC-V Processor',['../md_README.html#autotoc_md0',1,'']]], + ['riscv_5femulate_5ffadds_11',['riscv_emulate_fadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a9d676567276439875c9b1a15b892b555',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffclasss_12',['riscv_emulate_fclasss',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ae41a0bf9d28c35f4d6db7177ccf8ee06',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fsw_13',['riscv_emulate_fcvt_sw',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0f2260b7b5793a95c49670379fc89617',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fswu_14',['riscv_emulate_fcvt_swu',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a10a05bface37bff32c78ed0746845794',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fws_15',['riscv_emulate_fcvt_ws',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a292365fe41a7a661e61ae746306ba5e9',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fwus_16',['riscv_emulate_fcvt_wus',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aad9fc7337e09081cf8c5bff8c28776c8',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffdivs_17',['riscv_emulate_fdivs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aeaf46a17b671278be2bf804159827a40',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffeqs_18',['riscv_emulate_feqs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a7cb3c6570b911cd1dfb7b6e798cc1d21',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffles_19',['riscv_emulate_fles',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac5fdef0607602fa0bdb93b3535fd709e',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5fflts_20',['riscv_emulate_flts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2b802122d53a2ce517b3d39fec34d7e0',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmadds_21',['riscv_emulate_fmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a39212f2e2bb0f1752092a1732f93edf3',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmaxs_22',['riscv_emulate_fmaxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af9b16a32d2bb13c8af5a678271d74889',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmins_23',['riscv_emulate_fmins',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a872cd30fb61190bd1ac719d25b01f5a3',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmsubs_24',['riscv_emulate_fmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a05d0d5a8eb9422e93448efdeb679cabf',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmuls_25',['riscv_emulate_fmuls',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ad43e8bdf4a6fbe229d22d24680f2be80',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffnmadds_26',['riscv_emulate_fnmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac8bb4450b39854ab07839e8f3505361c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffnmsubs_27',['riscv_emulate_fnmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a833638b346722dfa9d7d5c8d60998ec8',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsgnjns_28',['riscv_emulate_fsgnjns',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0c985e626ed1d69314f4e3a0f1f58624',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsgnjs_29',['riscv_emulate_fsgnjs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a12498d635f422f607b9b83facf3050dd',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsgnjxs_30',['riscv_emulate_fsgnjxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a98caf7f310820052ae96ce0f45e6cd26',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsqrts_31',['riscv_emulate_fsqrts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a1ceb3450f1e5c62d3079cd0e93c03501',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsubs_32',['riscv_emulate_fsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ace5d95b855ec1aa8eacdb5bbeea58197',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffadds_33',['riscv_intrinsic_fadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a4b151fcb252fc7b894f247f5af6a1809',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffclasss_34',['riscv_intrinsic_fclasss',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3064a5c57b5f45d57c4d19eb798724f6',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fsw_35',['riscv_intrinsic_fcvt_sw',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2103eb86052f6f8e24a8a848ffc6528a',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fswu_36',['riscv_intrinsic_fcvt_swu',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a837b7330f9d568791687ae1384b8ef28',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fws_37',['riscv_intrinsic_fcvt_ws',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a523fa0fb6f521311c7f44692c586b3ee',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fwus_38',['riscv_intrinsic_fcvt_wus',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3bc6ee3059a7e99b187c4ea5e217715b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffdivs_39',['riscv_intrinsic_fdivs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ab6a9d15643e3085ff80c7883f183a42b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffeqs_40',['riscv_intrinsic_feqs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af4ddfae45807d4e41f758672ee14cf7b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffles_41',['riscv_intrinsic_fles',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#adb83fab39d91e9291da2b7b07830cf82',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5fflts_42',['riscv_intrinsic_flts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a85aa18294a58997db2c324184196669c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmadds_43',['riscv_intrinsic_fmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abbdb403cdeef414fa2f867b702d5f6eb',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmaxs_44',['riscv_intrinsic_fmaxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87c1ce499e5e43554cb0f407cf0d3f7f',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmins_45',['riscv_intrinsic_fmins',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abf7f9e466906306d9755fd5bc7946e3c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmsubs_46',['riscv_intrinsic_fmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a03aba9c70c5286dacebaeb0ef5219cc9',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmuls_47',['riscv_intrinsic_fmuls',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87a106e0d24a3183712e438d2bcbfa2d',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffnmadds_48',['riscv_intrinsic_fnmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa6473bc2d2721b57277b83a3ae0cfdb6',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffnmsubs_49',['riscv_intrinsic_fnmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a639fc7bd75933888540e9cceb67221a0',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsgnjns_50',['riscv_intrinsic_fsgnjns',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa4010772a986d03929ba7a43dfdcddd9',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsgnjs_51',['riscv_intrinsic_fsgnjs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aff3acd90bcfbda96945f95a0e0bae12b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsgnjxs_52',['riscv_intrinsic_fsgnjxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2235d91cdac03bf8071003a5c59b9dd0',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsqrts_53',['riscv_intrinsic_fsqrts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a17e2b7a399c956d548a609185084ea3c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsubs_54',['riscv_intrinsic_fsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af8473ba61abab8ae2e3ecbaf22d70e89',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['route_55',['ROUTE',['../structneorv32__slink__t.html#a0b2417a1a587da45909ce2a948f90e22',1,'neorv32_slink_t']]], + ['rte_5fservice_5fhandler_56',['rte_service_handler',['../processor__check_2main_8c.html#a349743a03307abb5130a3e89d903971b',1,'main.c']]], + ['rte_5ftrap_5fbreakpoint_57',['RTE_TRAP_BREAKPOINT',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f0_58',['RTE_TRAP_FIRQ_0',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f1_59',['RTE_TRAP_FIRQ_1',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f10_60',['RTE_TRAP_FIRQ_10',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f11_61',['RTE_TRAP_FIRQ_11',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f12_62',['RTE_TRAP_FIRQ_12',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f13_63',['RTE_TRAP_FIRQ_13',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f14_64',['RTE_TRAP_FIRQ_14',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f15_65',['RTE_TRAP_FIRQ_15',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f2_66',['RTE_TRAP_FIRQ_2',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f3_67',['RTE_TRAP_FIRQ_3',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f4_68',['RTE_TRAP_FIRQ_4',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f5_69',['RTE_TRAP_FIRQ_5',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f6_70',['RTE_TRAP_FIRQ_6',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f7_71',['RTE_TRAP_FIRQ_7',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f8_72',['RTE_TRAP_FIRQ_8',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f9_73',['RTE_TRAP_FIRQ_9',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fi_5faccess_74',['RTE_TRAP_I_ACCESS',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fi_5fillegal_75',['RTE_TRAP_I_ILLEGAL',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fi_5fmisaligned_76',['RTE_TRAP_I_MISALIGNED',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fl_5faccess_77',['RTE_TRAP_L_ACCESS',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fl_5fmisaligned_78',['RTE_TRAP_L_MISALIGNED',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmei_79',['RTE_TRAP_MEI',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmenv_5fcall_80',['RTE_TRAP_MENV_CALL',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmsi_81',['RTE_TRAP_MSI',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmti_82',['RTE_TRAP_MTI',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fs_5faccess_83',['RTE_TRAP_S_ACCESS',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fs_5fmisaligned_84',['RTE_TRAP_S_MISALIGNED',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fuenv_5fcall_85',['RTE_TRAP_UENV_CALL',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc',1,'neorv32_rte.h']]], + ['run_5faddsub_5ftests_86',['RUN_ADDSUB_TESTS',['../float__corner__test_2main_8c.html#a2d16b9e484b7af7897c7ae83f945ceca',1,'RUN_ADDSUB_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a2d16b9e484b7af7897c7ae83f945ceca',1,'RUN_ADDSUB_TESTS:&#160;main.c']]], + ['run_5fclassify_5ftests_87',['RUN_CLASSIFY_TESTS',['../float__corner__test_2main_8c.html#a7e134923925fa24fd1090281c3a416c3',1,'RUN_CLASSIFY_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a7e134923925fa24fd1090281c3a416c3',1,'RUN_CLASSIFY_TESTS:&#160;main.c']]], + ['run_5fcompare_5ftests_88',['RUN_COMPARE_TESTS',['../float__corner__test_2main_8c.html#a4ee0f6d28896a97d2c0cad866e77b874',1,'RUN_COMPARE_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a4ee0f6d28896a97d2c0cad866e77b874',1,'RUN_COMPARE_TESTS:&#160;main.c']]], + ['run_5fconv_5ftests_89',['RUN_CONV_TESTS',['../float__corner__test_2main_8c.html#aa3b6c4d49be7372de9e771a0475306ac',1,'RUN_CONV_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#aa3b6c4d49be7372de9e771a0475306ac',1,'RUN_CONV_TESTS:&#160;main.c']]], + ['run_5fcsr_5ftests_90',['RUN_CSR_TESTS',['../floating__point__test_2main_8c.html#a7ec330b668b5b24d666d7769ccecfee3',1,'main.c']]], + ['run_5fexc_5ftests_91',['RUN_EXC_TESTS',['../floating__point__test_2main_8c.html#a1a1af220e72c69b03d13b2df53650e10',1,'main.c']]], + ['run_5fminmax_5ftests_92',['RUN_MINMAX_TESTS',['../float__corner__test_2main_8c.html#aed386f612417aeeeac8b08db27d515e4',1,'RUN_MINMAX_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#aed386f612417aeeeac8b08db27d515e4',1,'RUN_MINMAX_TESTS:&#160;main.c']]], + ['run_5fmul_5ftests_93',['RUN_MUL_TESTS',['../float__corner__test_2main_8c.html#a97323ecaf1ae85e68a736b06bc3b58f8',1,'RUN_MUL_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a97323ecaf1ae85e68a736b06bc3b58f8',1,'RUN_MUL_TESTS:&#160;main.c']]], + ['run_5fsgninj_5ftests_94',['RUN_SGNINJ_TESTS',['../float__corner__test_2main_8c.html#a94f0b0908f48f383145ed61ef8eb0713',1,'RUN_SGNINJ_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a94f0b0908f48f383145ed61ef8eb0713',1,'RUN_SGNINJ_TESTS:&#160;main.c']]], + ['run_5ftiming_5ftests_95',['RUN_TIMING_TESTS',['../float__corner__test_2main_8c.html#a6969308bd3633928893a2666f1df66fc',1,'RUN_TIMING_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a6969308bd3633928893a2666f1df66fc',1,'RUN_TIMING_TESTS:&#160;main.c']]], + ['run_5funavail_5ftests_96',['RUN_UNAVAIL_TESTS',['../float__corner__test_2main_8c.html#a923de9c3e55322d85522740c0d0ff867',1,'RUN_UNAVAIL_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a923de9c3e55322d85522740c0d0ff867',1,'RUN_UNAVAIL_TESTS:&#160;main.c']]] +]; diff --git a/sw/search/all_17.js b/sw/search/all_17.js new file mode 100644 index 0000000000..314be00c32 --- /dev/null +++ b/sw/search/all_17.js @@ -0,0 +1,212 @@ +var searchData= +[ + ['s_20get_20it_20started_0',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]], + ['save_5fexe_1',['save_exe',['../bootloader_8c.html#ababfffe8e7036179e150ad3b9bda3a74',1,'bootloader.c']]], + ['scan_5fbus_2',['scan_bus',['../demo__onewire_2main_8c.html#ac07c9cfd80ac2e24be9dac6cf943b7de',1,'main.c']]], + ['scan_5ftwi_3',['scan_twi',['../demo__twi_2main_8c.html#aace46ee34e954f9ebee5873beb0785f1',1,'main.c']]], + ['sdi_5fctrl_5fcs_5factive_4',['SDI_CTRL_CS_ACTIVE',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5fen_5',['SDI_CTRL_EN',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ffifo_5flsb_6',['SDI_CTRL_FIFO_LSB',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ffifo_5fmsb_7',['SDI_CTRL_FIFO_MSB',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5frx_5favail_8',['SDI_CTRL_IRQ_RX_AVAIL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5frx_5ffull_9',['SDI_CTRL_IRQ_RX_FULL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5frx_5fhalf_10',['SDI_CTRL_IRQ_RX_HALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5ftx_5fempty_11',['SDI_CTRL_IRQ_TX_EMPTY',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5ftx_5fnhalf_12',['SDI_CTRL_IRQ_TX_NHALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5frx_5favail_13',['SDI_CTRL_RX_AVAIL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5frx_5ffull_14',['SDI_CTRL_RX_FULL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5frx_5fhalf_15',['SDI_CTRL_RX_HALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ftx_5fempty_16',['SDI_CTRL_TX_EMPTY',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ftx_5ffull_17',['SDI_CTRL_TX_FULL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ftx_5fnhalf_18',['SDI_CTRL_TX_NHALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9',1,'neorv32_sdi.h']]], + ['sdi_5ffirq_5fenable_19',['SDI_FIRQ_ENABLE',['../neorv32_8h.html#a30cf20b6d704c50cc5c46238bb43646f',1,'neorv32.h']]], + ['sdi_5ffirq_5fpending_20',['SDI_FIRQ_PENDING',['../neorv32_8h.html#a68611c0dfbe331739eff10230ac3fede',1,'neorv32.h']]], + ['sdi_5fget_21',['sdi_get',['../demo__sdi_2main_8c.html#aa25f620a5631e862252be1d5429e8585',1,'main.c']]], + ['sdi_5fput_22',['sdi_put',['../demo__sdi_2main_8c.html#ae3dc843520a800d7ba2b5d6be03d9c3d',1,'main.c']]], + ['sdi_5frte_5fid_23',['SDI_RTE_ID',['../neorv32_8h.html#aa0ff72ea560d7e1462787dc31bd467cf',1,'neorv32.h']]], + ['sdi_5ftrap_5fcode_24',['SDI_TRAP_CODE',['../neorv32_8h.html#a68925ca3f482f148caedd36118fd8d79',1,'neorv32.h']]], + ['seconds_25',['seconds',['../structdate__t.html#a1071948e7754cb415da9714d59a315bf',1,'date_t']]], + ['send_5ftwi_26',['send_twi',['../demo__twi_2main_8c.html#aa94edd4f55a3ac18913f661f4bc16fb1',1,'main.c']]], + ['set_5fcell_27',['set_cell',['../game__of__life_2main_8c.html#a5315eb56128f1ca40d9f4d477c345dd7',1,'main.c']]], + ['set_5fclock_28',['set_clock',['../demo__twi_2main_8c.html#acee0c1770467f85a150d072ac7e1252f',1,'main.c']]], + ['setup_5faccess_29',['setup_access',['../bus__explorer_2main_8c.html#a2b6196c2e97a7f7702c0068780304ec1',1,'main.c']]], + ['show_5f1wire_5fcommands_30',['show_1wire_commands',['../demo__onewire_2main_8c.html#a29d5831498c2eaf0415d6f01efb9e7ce',1,'main.c']]], + ['show_5farrays_31',['show_arrays',['../demo__dma_2main_8c.html#a8ad0c7bfd07edb6d42d86b166347206b',1,'main.c']]], + ['show_5fhelp_32',['show_help',['../demo__onewire_2main_8c.html#af25820ed386a66a0d6bb4dcdd2204704',1,'main.c']]], + ['silent_5fmode_33',['SILENT_MODE',['../atomic__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013',1,'SILENT_MODE:&#160;main.c'],['../float__corner__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013',1,'SILENT_MODE:&#160;main.c'],['../floating__point__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013',1,'SILENT_MODE:&#160;main.c']]], + ['sim_5firq_5ftrigger_34',['sim_irq_trigger',['../processor__check_2main_8c.html#ada24f2cd9d2d384265517f539711de62',1,'main.c']]], + ['slink_5fctrl_5fen_35',['SLINK_CTRL_EN',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5frx_5ffull_36',['SLINK_CTRL_IRQ_RX_FULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5frx_5fhalf_37',['SLINK_CTRL_IRQ_RX_HALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5frx_5fnempty_38',['SLINK_CTRL_IRQ_RX_NEMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5ftx_5fempty_39',['SLINK_CTRL_IRQ_TX_EMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5ftx_5fnfull_40',['SLINK_CTRL_IRQ_TX_NFULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5ftx_5fnhalf_41',['SLINK_CTRL_IRQ_TX_NHALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5fclr_42',['SLINK_CTRL_RX_CLR',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5fempty_43',['SLINK_CTRL_RX_EMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5ffifo_5flsb_44',['SLINK_CTRL_RX_FIFO_LSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5ffifo_5fmsb_45',['SLINK_CTRL_RX_FIFO_MSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5ffull_46',['SLINK_CTRL_RX_FULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5fhalf_47',['SLINK_CTRL_RX_HALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5flast_48',['SLINK_CTRL_RX_LAST',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5fclr_49',['SLINK_CTRL_TX_CLR',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5fempty_50',['SLINK_CTRL_TX_EMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5ffifo_5flsb_51',['SLINK_CTRL_TX_FIFO_LSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5ffifo_5fmsb_52',['SLINK_CTRL_TX_FIFO_MSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5ffull_53',['SLINK_CTRL_TX_FULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5fhalf_54',['SLINK_CTRL_TX_HALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78',1,'neorv32_slink.h']]], + ['slink_5ffifo_5fempty_55',['SLINK_FIFO_EMPTY',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c',1,'neorv32_slink.h']]], + ['slink_5ffifo_5ffull_56',['SLINK_FIFO_FULL',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211',1,'neorv32_slink.h']]], + ['slink_5ffifo_5fhalf_57',['SLINK_FIFO_HALF',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9',1,'neorv32_slink.h']]], + ['slink_5ffirq_5fhandler_58',['slink_firq_handler',['../demo__slink_2main_8c.html#a48c79e20ed1d4138d61b5593bdbe537a',1,'main.c']]], + ['slink_5froute_5fdst_5flsb_59',['SLINK_ROUTE_DST_LSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80',1,'neorv32_slink.h']]], + ['slink_5froute_5fdst_5fmsb_60',['SLINK_ROUTE_DST_MSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1',1,'neorv32_slink.h']]], + ['slink_5froute_5fsrc_5flsb_61',['SLINK_ROUTE_SRC_LSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2',1,'neorv32_slink.h']]], + ['slink_5froute_5fsrc_5fmsb_62',['SLINK_ROUTE_SRC_MSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983',1,'neorv32_slink.h']]], + ['slink_5frx_5ffirq_5fenable_63',['SLINK_RX_FIRQ_ENABLE',['../neorv32_8h.html#a8680ab1f14e512f21913572b35cbbf77',1,'neorv32.h']]], + ['slink_5frx_5ffirq_5fpending_64',['SLINK_RX_FIRQ_PENDING',['../neorv32_8h.html#a5c48d5c4effb47cdb019aa2da7c84526',1,'neorv32.h']]], + ['slink_5frx_5frte_5fid_65',['SLINK_RX_RTE_ID',['../neorv32_8h.html#a4fff18e72d10377cdcb8d2ac0a617a5d',1,'neorv32.h']]], + ['slink_5frx_5ftrap_5fcode_66',['SLINK_RX_TRAP_CODE',['../neorv32_8h.html#ab1fdaedb2c4c8753ef3be87c82568dda',1,'neorv32.h']]], + ['slink_5ftx_5ffirq_5fenable_67',['SLINK_TX_FIRQ_ENABLE',['../neorv32_8h.html#a232fe0eb5665373b6e2b464bdc228df2',1,'neorv32.h']]], + ['slink_5ftx_5ffirq_5fpending_68',['SLINK_TX_FIRQ_PENDING',['../neorv32_8h.html#ac8e98b2af75c8e31f9815dee3dcbaf8e',1,'neorv32.h']]], + ['slink_5ftx_5frte_5fid_69',['SLINK_TX_RTE_ID',['../neorv32_8h.html#a4e039d13b8d3f20453e1bb6b40512e43',1,'neorv32.h']]], + ['slink_5ftx_5ftrap_5fcode_70',['SLINK_TX_TRAP_CODE',['../neorv32_8h.html#a7fbe28901775e284d5700086f0b0bfcd',1,'neorv32.h']]], + ['soc_71',['SOC',['../structneorv32__sysinfo__t.html#ac43abe3b416da3a2895d1d06537a14c3',1,'neorv32_sysinfo_t']]], + ['soc_72',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['software_20ecosystem_73',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['software_20framework_20a_20the_20software_20ecosystem_74',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['spi_5fboot_5fbase_5faddr_75',['SPI_BOOT_BASE_ADDR',['../bootloader_8c.html#a418adcf57119600c3580fd2297d28de0',1,'bootloader.c']]], + ['spi_5fcs_76',['spi_cs',['../demo__spi_2main_8c.html#a6f94991b8943a141ed4124585222470d',1,'main.c']]], + ['spi_5fcs_5factive_77',['SPI_CS_ACTIVE',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fbusy_78',['SPI_CTRL_BUSY',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv0_79',['SPI_CTRL_CDIV0',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv1_80',['SPI_CTRL_CDIV1',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv2_81',['SPI_CTRL_CDIV2',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv3_82',['SPI_CTRL_CDIV3',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcpha_83',['SPI_CTRL_CPHA',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcpol_84',['SPI_CTRL_CPOL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fen_85',['SPI_CTRL_EN',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ffifo_5flsb_86',['SPI_CTRL_FIFO_LSB',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ffifo_5fmsb_87',['SPI_CTRL_FIFO_MSB',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fhighspeed_88',['SPI_CTRL_HIGHSPEED',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5fidle_89',['SPI_CTRL_IRQ_IDLE',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5frx_5favail_90',['SPI_CTRL_IRQ_RX_AVAIL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5ftx_5fempty_91',['SPI_CTRL_IRQ_TX_EMPTY',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5ftx_5fhalf_92',['SPI_CTRL_IRQ_TX_HALF',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fprsc0_93',['SPI_CTRL_PRSC0',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fprsc1_94',['SPI_CTRL_PRSC1',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fprsc2_95',['SPI_CTRL_PRSC2',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a',1,'neorv32_spi.h']]], + ['spi_5fctrl_5frx_5favail_96',['SPI_CTRL_RX_AVAIL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ftx_5fempty_97',['SPI_CTRL_TX_EMPTY',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ftx_5ffull_98',['SPI_CTRL_TX_FULL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ftx_5fnhalf_99',['SPI_CTRL_TX_NHALF',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4',1,'neorv32_spi.h']]], + ['spi_5fdata_5fcmd_100',['SPI_DATA_CMD',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6',1,'neorv32_spi.h']]], + ['spi_5fdata_5fcsen_101',['SPI_DATA_CSEN',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2',1,'neorv32_spi.h']]], + ['spi_5fdata_5flsb_102',['SPI_DATA_LSB',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4',1,'neorv32_spi.h']]], + ['spi_5fdata_5fmsb_103',['SPI_DATA_MSB',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600',1,'neorv32_spi.h']]], + ['spi_5fen_104',['SPI_EN',['../bootloader_8c.html#aea75cf0485ce0a4ea320eba994859686',1,'bootloader.c']]], + ['spi_5ffirq_5fenable_105',['SPI_FIRQ_ENABLE',['../neorv32_8h.html#ab8fcd3f80c373eb0f9d0fc6bf64ca626',1,'neorv32.h']]], + ['spi_5ffirq_5fpending_106',['SPI_FIRQ_PENDING',['../neorv32_8h.html#ab2f58f746febb29a9828447c733f8043',1,'neorv32.h']]], + ['spi_5fflash_5faddr_5fbytes_107',['SPI_FLASH_ADDR_BYTES',['../bootloader_8c.html#afe60a31c8561952f2f734fd67e6f7406',1,'bootloader.c']]], + ['spi_5fflash_5fcheck_108',['spi_flash_check',['../bootloader_8c.html#a1919595ed2232aebb3e774b916ab1662',1,'bootloader.c']]], + ['spi_5fflash_5fclk_5fprsc_109',['SPI_FLASH_CLK_PRSC',['../bootloader_8c.html#a709071a651213770b4efe6e6e055ec3d',1,'bootloader.c']]], + ['spi_5fflash_5fcmd_110',['SPI_FLASH_CMD',['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12e',1,'main.c']]], + ['spi_5fflash_5fcmd_5fenum_111',['SPI_FLASH_CMD_enum',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fed',1,'bootloader.c']]], + ['spi_5fflash_5fcmd_5fpage_5fprogram_112',['SPI_FLASH_CMD_PAGE_PROGRAM',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda31c8d698c551d081a0adeafb988ed49e',1,'bootloader.c']]], + ['spi_5fflash_5fcmd_5fread_113',['SPI_FLASH_CMD_READ',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda6c1994ba2cfd97e0c77dcdf8bbdfdfa6',1,'SPI_FLASH_CMD_READ:&#160;bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea6c1994ba2cfd97e0c77dcdf8bbdfdfa6',1,'SPI_FLASH_CMD_READ:&#160;main.c']]], + ['spi_5fflash_5fcmd_5fread_5fstatus_114',['SPI_FLASH_CMD_READ_STATUS',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda5fbc6551a10549b38e5ab4a76c38f214',1,'SPI_FLASH_CMD_READ_STATUS:&#160;bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea5fbc6551a10549b38e5ab4a76c38f214',1,'SPI_FLASH_CMD_READ_STATUS:&#160;main.c']]], + ['spi_5fflash_5fcmd_5fsector_5ferase_115',['SPI_FLASH_CMD_SECTOR_ERASE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedacd62141d6331f66e31bd252e2a92b836',1,'SPI_FLASH_CMD_SECTOR_ERASE:&#160;bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eacd62141d6331f66e31bd252e2a92b836',1,'SPI_FLASH_CMD_SECTOR_ERASE:&#160;main.c']]], + ['spi_5fflash_5fcmd_5fwake_116',['SPI_FLASH_CMD_WAKE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda25bf16cd42b1fd1d95e0957b5be137d2',1,'bootloader.c']]], + ['spi_5fflash_5fcmd_5fwrite_117',['SPI_FLASH_CMD_WRITE',['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea528cebc54176f6f4c0a8f7f16fb28ca1',1,'main.c']]], + ['spi_5fflash_5fcmd_5fwrite_5fdisable_118',['SPI_FLASH_CMD_WRITE_DISABLE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedaa91d3c1d788b21fc798a5976c9f0da77',1,'SPI_FLASH_CMD_WRITE_DISABLE:&#160;bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eaa91d3c1d788b21fc798a5976c9f0da77',1,'SPI_FLASH_CMD_WRITE_DISABLE:&#160;main.c']]], + ['spi_5fflash_5fcmd_5fwrite_5fenable_119',['SPI_FLASH_CMD_WRITE_ENABLE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda152e091e93778f217f8b766298351513',1,'SPI_FLASH_CMD_WRITE_ENABLE:&#160;bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea152e091e93778f217f8b766298351513',1,'SPI_FLASH_CMD_WRITE_ENABLE:&#160;main.c']]], + ['spi_5fflash_5fcs_120',['SPI_FLASH_CS',['../bootloader_8c.html#aa2132454aada86216009f3af206899b1',1,'bootloader.c']]], + ['spi_5fflash_5ferase_5fsector_121',['spi_flash_erase_sector',['../bootloader_8c.html#a0d877f0611dfcee32a483c8a3660eb1b',1,'bootloader.c']]], + ['spi_5fflash_5fread_5fbyte_122',['spi_flash_read_byte',['../bootloader_8c.html#a09e72e2debdd94929b2be4c7713d5e17',1,'bootloader.c']]], + ['spi_5fflash_5fread_5fstatus_123',['spi_flash_read_status',['../bootloader_8c.html#a005966cd0b32f3d5c041028c4b1c99f5',1,'bootloader.c']]], + ['spi_5fflash_5fsector_5fsize_124',['SPI_FLASH_SECTOR_SIZE',['../bootloader_8c.html#a00924a8ba223b2ca0e7031259b292c84',1,'bootloader.c']]], + ['spi_5fflash_5fsreg_125',['SPI_FLASH_SREG',['../demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08e',1,'main.c']]], + ['spi_5fflash_5fsreg_5fenum_126',['SPI_FLASH_SREG_enum',['../bootloader_8c.html#a97299f563ebc1fca4c663b025a15136f',1,'bootloader.c']]], + ['spi_5fflash_5fsreg_5fwel_127',['SPI_FLASH_SREG_WEL',['../demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08ea90f3b76faed13819ee13e574d1bff0c1',1,'main.c']]], + ['spi_5fflash_5fsreg_5fwip_128',['SPI_FLASH_SREG_WIP',['../demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08eac84de63bbea3989c71bcc92d1d01cfa4',1,'main.c']]], + ['spi_5fflash_5fwakeup_129',['spi_flash_wakeup',['../bootloader_8c.html#a1fbdccc60f05756213c9f3d64bac6d47',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5faddr_130',['spi_flash_write_addr',['../bootloader_8c.html#a6a8caddda6e729d747726471b0b0f742',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fbyte_131',['spi_flash_write_byte',['../bootloader_8c.html#a006c27b7d80897b78ab8cd83a391331f',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fdisable_132',['spi_flash_write_disable',['../bootloader_8c.html#a82d26a2d6293ed7fd44a5c622adfbd45',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fenable_133',['spi_flash_write_enable',['../bootloader_8c.html#a9642e28ef2baec5b356ad9a70970d0e6',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fword_134',['spi_flash_write_word',['../bootloader_8c.html#a717c72166af7c2ff7e73bd0b47128338',1,'bootloader.c']]], + ['spi_5firq_5fhandler_135',['spi_irq_handler',['../demo__spi__irq_2main_8c.html#a7e266cc5247c999948dacc2102bd184a',1,'main.c']]], + ['spi_5frte_5fid_136',['SPI_RTE_ID',['../neorv32_8h.html#a4c1cd9ec9f80da2080e5d0d35cc524dd',1,'neorv32.h']]], + ['spi_5fsetup_137',['spi_setup',['../demo__spi_2main_8c.html#a755192be6c3cf9904564b0eee99de445',1,'main.c']]], + ['spi_5ftrans_138',['spi_trans',['../demo__spi_2main_8c.html#a13e10b34fbbffca6c31f0ce25b3f8432',1,'main.c']]], + ['spi_5ftrap_5fcode_139',['SPI_TRAP_CODE',['../neorv32_8h.html#a83c212f1f5d8ee2a5921b3b2b19e9cc4',1,'neorv32.h']]], + ['src_5fbase_140',['SRC_BASE',['../structneorv32__dma__t.html#a3b214d1a373c7f15b374e113d7110b42',1,'neorv32_dma_t']]], + ['sreg_141',['SREG',['../structneorv32__crc__t.html#abf2b419f2aefdb6f2a6b81a02cb8612d',1,'neorv32_crc_t']]], + ['start_5fapp_142',['start_app',['../bootloader_8c.html#ae8de91537ac2782f0f0ebc3b2d4fb1df',1,'bootloader.c']]], + ['started_143',['Started',['../md_README.html#autotoc_md7',1,'5. Getting Started'],['../md_README.html#autotoc_md12',1,':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started']]], + ['status_144',['Project Status',['../md_README.html#autotoc_md3',1,'']]], + ['status_5fled_5fen_145',['STATUS_LED_EN',['../bootloader_8c.html#aa9696325b450773c7a87c991abca3a54',1,'bootloader.c']]], + ['status_5fled_5fpin_146',['STATUS_LED_PIN',['../bootloader_8c.html#a089a71f836911c71b3f73fdd3b4b890b',1,'bootloader.c']]], + ['stnolting_20github_20io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_147',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['stnolting_20github_20io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_148',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['stnolting_20github_20io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_149',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['stnolting_20github_20io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_150',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['stnolting_20github_20io_20neorv32_20ug_20user_20guide_20a_20let_20s_20get_20it_20started_151',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]], + ['str_152',['str',['../bootloader_8c.html#af6cf19e40e97afb5a7c29f7b439d091d',1,'bootloader.c']]], + ['subnormal_5fflush_153',['subnormal_flush',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a791f880781a1bcea1861471be7d1a851',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['subwords16_5ft_154',['subwords16_t',['../unionsubwords16__t.html',1,'']]], + ['subwords32_5ft_155',['subwords32_t',['../unionsubwords32__t.html',1,'']]], + ['subwords64_5ft_156',['subwords64_t',['../unionsubwords64__t.html',1,'']]], + ['sysinfo_5fcache_5fdata_5fblock_5fsize_5f0_157',['SYSINFO_CACHE_DATA_BLOCK_SIZE_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa8a2c7079b44f4255196de49d6d59afdb',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fdata_5fblock_5fsize_5f3_158',['SYSINFO_CACHE_DATA_BLOCK_SIZE_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaaec544d85ce3296ca9e97e833e20936e',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fdata_5fnum_5fblocks_5f0_159',['SYSINFO_CACHE_DATA_NUM_BLOCKS_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabb743d3ca41bf44aa6ff188ec898cfb8',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fdata_5fnum_5fblocks_5f3_160',['SYSINFO_CACHE_DATA_NUM_BLOCKS_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa5778928b290b3b1cba42412de4dabf96',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5finst_5fblock_5fsize_5f0_161',['SYSINFO_CACHE_INST_BLOCK_SIZE_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa1bdccae04b3bd84988297c16ffbefaf2',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5finst_5fblock_5fsize_5f3_162',['SYSINFO_CACHE_INST_BLOCK_SIZE_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf4a91f729e16adc72c2419d9ad3807e5',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5finst_5fnum_5fblocks_5f0_163',['SYSINFO_CACHE_INST_NUM_BLOCKS_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabd13283ebd48dee48aee2cff3a560fe9',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5finst_5fnum_5fblocks_5f3_164',['SYSINFO_CACHE_INST_NUM_BLOCKS_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa02f235d7d2fc30c4ae3a383a631d9060',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxbus_5fblock_5fsize_5f0_165',['SYSINFO_CACHE_XBUS_BLOCK_SIZE_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa3f6e68cdf6bb641902a9a6d32c1f9d9e',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxbus_5fblock_5fsize_5f3_166',['SYSINFO_CACHE_XBUS_BLOCK_SIZE_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa908c60a836b03129098cb70fe2a860a1',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxbus_5fnum_5fblocks_5f0_167',['SYSINFO_CACHE_XBUS_NUM_BLOCKS_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa73553a14d3425498be9d3802ca5f1459',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxbus_5fnum_5fblocks_5f3_168',['SYSINFO_CACHE_XBUS_NUM_BLOCKS_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaade7f119164ff2c3800b4464a65ca247b',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxip_5fblock_5fsize_5f0_169',['SYSINFO_CACHE_XIP_BLOCK_SIZE_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaea0a88adaa9d0b5e1f4e5cca630ed6f8',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxip_5fblock_5fsize_5f3_170',['SYSINFO_CACHE_XIP_BLOCK_SIZE_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa44d4d12c0395e924b8bf7dc40059bfba',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxip_5fnum_5fblocks_5f0_171',['SYSINFO_CACHE_XIP_NUM_BLOCKS_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa90ae265a72ea53d99b474798e721c317',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxip_5fnum_5fblocks_5f3_172',['SYSINFO_CACHE_XIP_NUM_BLOCKS_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf88eacb3ed63d5a048a554927812460b',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fmem_5fboot_173',['SYSINFO_MEM_BOOT',['../neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa0f4e1e1c9320949bdacd2bc7ba6179f7',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fmem_5fdmem_174',['SYSINFO_MEM_DMEM',['../neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa8a46c064e5a1339978a5fb1f41301894',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fmem_5fimem_175',['SYSINFO_MEM_IMEM',['../neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa807d9e70e78e2ba3d5bfb902cc1cdc53',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fmem_5fres_176',['SYSINFO_MEM_res',['../neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa1671eeca5b3a6d1c8069658e0b7bc182',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fbootloader_177',['SYSINFO_SOC_BOOTLOADER',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a6899a935ae8c4aef08d828f250342e9a',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fdcache_178',['SYSINFO_SOC_DCACHE',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a9823c2c0945997ed0d7e5eb473d81e41',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5ficache_179',['SYSINFO_SOC_ICACHE',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a124c4c2b101008b0e3f1d82efec11c26',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fimem_5from_180',['SYSINFO_SOC_IMEM_ROM',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aaeafc2591f2cc95e9ff1fdee1e1c26e8',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fcfs_181',['SYSINFO_SOC_IO_CFS',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ae725c2452eeb33e3230dcfb3450598e6',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fclint_182',['SYSINFO_SOC_IO_CLINT',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08adc914c065f5b51ae0881a6b62b54a3db',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fcrc_183',['SYSINFO_SOC_IO_CRC',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ab89821e2c61ccb9db6324ee503f9dfa6',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fdma_184',['SYSINFO_SOC_IO_DMA',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a24658727efef9747414b5da8f26de66d',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fgpio_185',['SYSINFO_SOC_IO_GPIO',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a62a2337b33a2f65b6efd5c91e699c2d1',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fgptmr_186',['SYSINFO_SOC_IO_GPTMR',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4aea6c006f9c999720b1dd6166a01afe',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fneoled_187',['SYSINFO_SOC_IO_NEOLED',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a164c5c9dc702b4b5fc71110fc047c7f1',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fonewire_188',['SYSINFO_SOC_IO_ONEWIRE',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aa8ec3b39b36f13ee4f97a72700e881a8',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fpwm_189',['SYSINFO_SOC_IO_PWM',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a8dc202143c3b13850bccf16380466399',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fsdi_190',['SYSINFO_SOC_IO_SDI',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a84088f6664a3dc19041dfad5b551ced9',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fslink_191',['SYSINFO_SOC_IO_SLINK',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a26b25f1b47f62e98ff0920544f56b57e',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fspi_192',['SYSINFO_SOC_IO_SPI',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4cf4b1a83a4b52efbf26eace21f5ab20',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5ftrng_193',['SYSINFO_SOC_IO_TRNG',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a44892276837b2b1bbe6ef9faa715ad5d',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5ftwd_194',['SYSINFO_SOC_IO_TWD',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3bbac94e7f1f021f14cefa929b79e9d9',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5ftwi_195',['SYSINFO_SOC_IO_TWI',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a179401244ac42bc4aac3108ca9bbb9c3',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fuart0_196',['SYSINFO_SOC_IO_UART0',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a244710794e00c93e91a7f13d533cb139',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fuart1_197',['SYSINFO_SOC_IO_UART1',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a52b0ca1ef2af5e9c9a0250440b2de9e5',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fwdt_198',['SYSINFO_SOC_IO_WDT',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08afc964f39427cbc4090a960967eada7be',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fxirq_199',['SYSINFO_SOC_IO_XIRQ',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ad1b8d38e3715485242756cd37b7c1fe9',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fmem_5fint_5fdmem_200',['SYSINFO_SOC_MEM_INT_DMEM',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a58ff6e112c09f798be014fdf84385135',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fmem_5fint_5fimem_201',['SYSINFO_SOC_MEM_INT_IMEM',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a1c2fbb0cc03a1df2e5e8a472f3f1ca57',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5focd_202',['SYSINFO_SOC_OCD',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3e50b1c24eec0f1811d5630e6dd33e93',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5focd_5fauth_203',['SYSINFO_SOC_OCD_AUTH',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a161826adba27e19186c5005626c160b8',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fxbus_204',['SYSINFO_SOC_XBUS',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08add6721803c9d79f1e50248927ba30e16',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fxbus_5fcache_205',['SYSINFO_SOC_XBUS_CACHE',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a579f26ab04d4fd9af8e419df465695ca',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fxip_206',['SYSINFO_SOC_XIP',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a516a2e254ae63e017caefbeed20f54e9',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fxip_5fcache_207',['SYSINFO_SOC_XIP_CACHE',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ac943fc33a2c1c25c3ab075228b87c0ef',1,'neorv32_sysinfo.h']]], + ['system_5ferror_208',['system_error',['../bootloader_8c.html#a3bdfe2f25b1bfb42f80624ffff22ab01',1,'bootloader.c']]] +]; diff --git a/sw/search/all_18.js b/sw/search/all_18.js new file mode 100644 index 0000000000..4ccedaa2b4 --- /dev/null +++ b/sw/search/all_18.js @@ -0,0 +1,108 @@ +var searchData= +[ + ['t_5fneorv32_5fspi_0',['t_neorv32_spi',['../structt__neorv32__spi.html',1,'']]], + ['test_5ffail_1',['test_fail',['../processor__check_2main_8c.html#a1e0a5d63896fa26a6c25c0012fc6b938',1,'main.c']]], + ['test_5fok_2',['test_ok',['../processor__check_2main_8c.html#ae61d39109b2747429ec3a3c1b5533598',1,'main.c']]], + ['testcases_3',['TESTCASES',['../demo__cfs_2main_8c.html#a906949f076e3e0d0082af3c3b1acb518',1,'main.c']]], + ['the_20core_4',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['the_20neorv32_20risc_20v_20processor_5',['The NEORV32 RISC-V Processor',['../md_README.html#autotoc_md0',1,'']]], + ['the_20soc_6',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['the_20software_20ecosystem_7',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['thres_8',['THRES',['../structneorv32__gptmr__t.html#a666ebcbea13dafcf1987629f3e0092ee',1,'neorv32_gptmr_t']]], + ['time_5fdec_5fhw_9',['time_dec_hw',['../demo__cfu_2main_8c.html#acb6dd9d6ab74ac94f174a11ff3ad76af',1,'main.c']]], + ['time_5fdec_5fsw_10',['time_dec_sw',['../demo__cfu_2main_8c.html#a2d3853c367c3bce99e787c0df445030a',1,'main.c']]], + ['time_5fenc_5fhw_11',['time_enc_hw',['../demo__cfu_2main_8c.html#a094212e3731a9aecbd278fac243de6ec',1,'main.c']]], + ['time_5fenc_5fsw_12',['time_enc_sw',['../demo__cfu_2main_8c.html#ad424a26173bd8d84b8d1cae94a55f248',1,'main.c']]], + ['tpol_13',['TPOL',['../structneorv32__xirq__t.html#a5fe0036a2cada585228b60aaa780e92a',1,'neorv32_xirq_t']]], + ['trap_5fcode_5fbreakpoint_14',['TRAP_CODE_BREAKPOINT',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f0_15',['TRAP_CODE_FIRQ_0',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f1_16',['TRAP_CODE_FIRQ_1',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f10_17',['TRAP_CODE_FIRQ_10',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f11_18',['TRAP_CODE_FIRQ_11',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f12_19',['TRAP_CODE_FIRQ_12',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f13_20',['TRAP_CODE_FIRQ_13',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f14_21',['TRAP_CODE_FIRQ_14',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f15_22',['TRAP_CODE_FIRQ_15',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f2_23',['TRAP_CODE_FIRQ_2',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f3_24',['TRAP_CODE_FIRQ_3',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f4_25',['TRAP_CODE_FIRQ_4',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f5_26',['TRAP_CODE_FIRQ_5',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f6_27',['TRAP_CODE_FIRQ_6',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f7_28',['TRAP_CODE_FIRQ_7',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f8_29',['TRAP_CODE_FIRQ_8',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f9_30',['TRAP_CODE_FIRQ_9',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fi_5faccess_31',['TRAP_CODE_I_ACCESS',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fi_5fillegal_32',['TRAP_CODE_I_ILLEGAL',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fi_5fmisaligned_33',['TRAP_CODE_I_MISALIGNED',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fl_5faccess_34',['TRAP_CODE_L_ACCESS',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fl_5fmisaligned_35',['TRAP_CODE_L_MISALIGNED',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmei_36',['TRAP_CODE_MEI',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmenv_5fcall_37',['TRAP_CODE_MENV_CALL',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmsi_38',['TRAP_CODE_MSI',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmti_39',['TRAP_CODE_MTI',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fs_5faccess_40',['TRAP_CODE_S_ACCESS',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fs_5fmisaligned_41',['TRAP_CODE_S_MISALIGNED',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fuenv_5fcall_42',['TRAP_CODE_UENV_CALL',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02',1,'neorv32_cpu_csr.h']]], + ['trap_5fhandler_5femulate_5famo_43',['trap_handler_emulate_amo',['../atomic__test_2main_8c.html#aafcbf639ae4f66e5dfe9dea511a59f9d',1,'main.c']]], + ['trap_5fhandler_5femulate_5funaligned_5flw_44',['trap_handler_emulate_unaligned_lw',['../demo__emulate__unaligned_2main_8c.html#a07da42351229525998965b219e827460',1,'main.c']]], + ['trigger_5fmodule_5fdummy_45',['trigger_module_dummy',['../processor__check_2main_8c.html#ac91bfdd45696444673dc7d6b1b644082',1,'main.c']]], + ['trng_5fctrl_5favail_46',['TRNG_CTRL_AVAIL',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aac0a6c8451985a61dc522509ded22695f',1,'neorv32_trng.h']]], + ['trng_5fctrl_5fen_47',['TRNG_CTRL_EN',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d',1,'neorv32_trng.h']]], + ['trng_5fctrl_5ffifo_5fclr_48',['TRNG_CTRL_FIFO_CLR',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac',1,'neorv32_trng.h']]], + ['trng_5fctrl_5ffifo_5flsb_49',['TRNG_CTRL_FIFO_LSB',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52',1,'neorv32_trng.h']]], + ['trng_5fctrl_5ffifo_5fmsb_50',['TRNG_CTRL_FIFO_MSB',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5',1,'neorv32_trng.h']]], + ['trng_5fctrl_5fsim_5fmode_51',['TRNG_CTRL_SIM_MODE',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5',1,'neorv32_trng.h']]], + ['trng_5fdata_5flsb_52',['TRNG_DATA_LSB',['../neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac2a7a79da7010342366ea97a2af2ebe6',1,'neorv32_trng.h']]], + ['trng_5fdata_5fmsb_53',['TRNG_DATA_MSB',['../neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac73221cb67facda1db8fc9591e2f6364',1,'neorv32_trng.h']]], + ['ttyp_54',['TTYP',['../structneorv32__xirq__t.html#ab7117c210b5f0a8ebc369eeba6a4a5bc',1,'neorv32_xirq_t']]], + ['ttype_55',['TTYPE',['../structneorv32__dma__t.html#a70c28642195765409d97b941e98f47ca',1,'neorv32_dma_t']]], + ['twd_5fctrl_5fbusy_56',['TWD_CTRL_BUSY',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a71eb18275ffd7138251049c39294f4f3',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fclr_5frx_57',['TWD_CTRL_CLR_RX',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a1a951d8cf167b79bffdd8f19033ba657',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fclr_5ftx_58',['TWD_CTRL_CLR_TX',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ab2d8eef73a9cc3de9bf99c5bf9c7114b',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fdev_5faddr0_59',['TWD_CTRL_DEV_ADDR0',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a3cc82a5ab8ad0ac4cff85b40d2ed6ffe',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fdev_5faddr6_60',['TWD_CTRL_DEV_ADDR6',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18abea8949a5164bd28f1504a34dadb17c2',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fen_61',['TWD_CTRL_EN',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aded9f8ad7a2e0217e73d8484246157b2',1,'neorv32_twd.h']]], + ['twd_5fctrl_5ffifo_5flsb_62',['TWD_CTRL_FIFO_LSB',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a943bbe073ea36da264cb16f5a9f2acc9',1,'neorv32_twd.h']]], + ['twd_5fctrl_5ffifo_5fmsb_63',['TWD_CTRL_FIFO_MSB',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af121649145e5403bf44246d416c26530',1,'neorv32_twd.h']]], + ['twd_5fctrl_5ffsel_64',['TWD_CTRL_FSEL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aef0fcc46f5595fa73fe547f0737f85e6',1,'neorv32_twd.h']]], + ['twd_5fctrl_5firq_5frx_5favail_65',['TWD_CTRL_IRQ_RX_AVAIL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad59552e7f3c7c747307f71e78ac1c00b',1,'neorv32_twd.h']]], + ['twd_5fctrl_5firq_5frx_5ffull_66',['TWD_CTRL_IRQ_RX_FULL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af6d6b5bda034fc7af54036c95b94c01a',1,'neorv32_twd.h']]], + ['twd_5fctrl_5firq_5ftx_5fempty_67',['TWD_CTRL_IRQ_TX_EMPTY',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a73bfda5ccd72ba0c8deed6d848013757',1,'neorv32_twd.h']]], + ['twd_5fctrl_5frx_5favail_68',['TWD_CTRL_RX_AVAIL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aaf31cc771b97f6b1f4d2da2347f43878',1,'neorv32_twd.h']]], + ['twd_5fctrl_5frx_5ffull_69',['TWD_CTRL_RX_FULL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad1360350bafec23f10e28ffddefa625a',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fsense_5fscl_70',['TWD_CTRL_SENSE_SCL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a8816adbecd0c929c88134e9e41efcf5c',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fsense_5fsda_71',['TWD_CTRL_SENSE_SDA',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18acc0cdd72b63e7a029e97ae942754958c',1,'neorv32_twd.h']]], + ['twd_5fctrl_5ftx_5fempty_72',['TWD_CTRL_TX_EMPTY',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a428ca1617d4bc287fbf03bfc74d12dfd',1,'neorv32_twd.h']]], + ['twd_5fctrl_5ftx_5ffull_73',['TWD_CTRL_TX_FULL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a243f36178c91f94ccc848399a3b715b5',1,'neorv32_twd.h']]], + ['twd_5fdata_5flsb_74',['TWD_DATA_LSB',['../neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a5f5e055b2d8ea968da1670251b70f824',1,'neorv32_twd.h']]], + ['twd_5fdata_5fmsb_75',['TWD_DATA_MSB',['../neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a8f40d28bfc00d40ba03560bf44d47829',1,'neorv32_twd.h']]], + ['twd_5ffirq_5fenable_76',['TWD_FIRQ_ENABLE',['../neorv32_8h.html#a7cd6e1c5a9213256b277d8ef74bfb564',1,'neorv32.h']]], + ['twd_5ffirq_5fpending_77',['TWD_FIRQ_PENDING',['../neorv32_8h.html#ab61a869973c8d027360f9c1f47fb5b01',1,'neorv32.h']]], + ['twd_5frte_5fid_78',['TWD_RTE_ID',['../neorv32_8h.html#ad00097ae9632a0f11c0dab96e272cff5',1,'neorv32.h']]], + ['twd_5ftrap_5fcode_79',['TWD_TRAP_CODE',['../neorv32_8h.html#a3dc1579e0bd1718b8f24cda6b54ae43a',1,'neorv32.h']]], + ['twi_5fctrl_5fbusy_80',['TWI_CTRL_BUSY',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv0_81',['TWI_CTRL_CDIV0',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv1_82',['TWI_CTRL_CDIV1',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv2_83',['TWI_CTRL_CDIV2',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv3_84',['TWI_CTRL_CDIV3',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fclkstr_85',['TWI_CTRL_CLKSTR',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fen_86',['TWI_CTRL_EN',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694',1,'neorv32_twi.h']]], + ['twi_5fctrl_5ffifo_5flsb_87',['TWI_CTRL_FIFO_LSB',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb',1,'neorv32_twi.h']]], + ['twi_5fctrl_5ffifo_5fmsb_88',['TWI_CTRL_FIFO_MSB',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fprsc0_89',['TWI_CTRL_PRSC0',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fprsc1_90',['TWI_CTRL_PRSC1',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fprsc2_91',['TWI_CTRL_PRSC2',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31',1,'neorv32_twi.h']]], + ['twi_5fctrl_5frx_5favail_92',['TWI_CTRL_RX_AVAIL',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fsense_5fscl_93',['TWI_CTRL_SENSE_SCL',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa51ea52c7ad18f1a8bcb6c2a979802107',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fsense_5fsda_94',['TWI_CTRL_SENSE_SDA',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaf715b63c5c3edbd1e61766df53c2dd6c',1,'neorv32_twi.h']]], + ['twi_5fctrl_5ftx_5ffull_95',['TWI_CTRL_TX_FULL',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fack_96',['TWI_DCMD_ACK',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fcmd_5fhi_97',['TWI_DCMD_CMD_HI',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fcmd_5flo_98',['TWI_DCMD_CMD_LO',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5flsb_99',['TWI_DCMD_LSB',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fmsb_100',['TWI_DCMD_MSB',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d',1,'neorv32_twi.h']]], + ['twi_5ffirq_5fenable_101',['TWI_FIRQ_ENABLE',['../neorv32_8h.html#a0913144fce247e24ccd0f178b9ac32b7',1,'neorv32.h']]], + ['twi_5ffirq_5fpending_102',['TWI_FIRQ_PENDING',['../neorv32_8h.html#a48b80113ca718fbdc50d75e1ec96a1ff',1,'neorv32.h']]], + ['twi_5frte_5fid_103',['TWI_RTE_ID',['../neorv32_8h.html#a1ac29f2f7bace5ba92b2b68a4541a60c',1,'neorv32.h']]], + ['twi_5ftrap_5fcode_104',['TWI_TRAP_CODE',['../neorv32_8h.html#a0afc1a759116d4d73a199ef769bced47',1,'neorv32.h']]] +]; diff --git a/sw/search/all_19.js b/sw/search/all_19.js new file mode 100644 index 0000000000..23f7ad8ab2 --- /dev/null +++ b/sw/search/all_19.js @@ -0,0 +1,70 @@ +var searchData= +[ + ['uart0_5frx_5ffirq_5fenable_0',['UART0_RX_FIRQ_ENABLE',['../neorv32_8h.html#a6b55ce6abe6b141000a6bb00949169e9',1,'neorv32.h']]], + ['uart0_5frx_5ffirq_5fpending_1',['UART0_RX_FIRQ_PENDING',['../neorv32_8h.html#a0b738b26abb2b951f1f5c5d9525d7701',1,'neorv32.h']]], + ['uart0_5frx_5frte_5fid_2',['UART0_RX_RTE_ID',['../neorv32_8h.html#ae8588cca20d5e36f74c5207c376389a1',1,'neorv32.h']]], + ['uart0_5frx_5ftrap_5fcode_3',['UART0_RX_TRAP_CODE',['../neorv32_8h.html#a7a849638eff31f2e1955bdc53d4fc84d',1,'neorv32.h']]], + ['uart0_5ftx_5ffirq_5fenable_4',['UART0_TX_FIRQ_ENABLE',['../neorv32_8h.html#aff756a395771f22c5f412f23f177ea7d',1,'neorv32.h']]], + ['uart0_5ftx_5ffirq_5fpending_5',['UART0_TX_FIRQ_PENDING',['../neorv32_8h.html#addbe29166bb77bc045ad0e3db68e57e9',1,'neorv32.h']]], + ['uart0_5ftx_5frte_5fid_6',['UART0_TX_RTE_ID',['../neorv32_8h.html#a9dc37695ca169bc0eb93898e7aeeee58',1,'neorv32.h']]], + ['uart0_5ftx_5ftrap_5fcode_7',['UART0_TX_TRAP_CODE',['../neorv32_8h.html#ab50df423fdba86bb83bc5d90a4c3bb20',1,'neorv32.h']]], + ['uart1_5frx_5ffirq_5fenable_8',['UART1_RX_FIRQ_ENABLE',['../neorv32_8h.html#a6c118c1784d8446360b00cde97437ca7',1,'neorv32.h']]], + ['uart1_5frx_5ffirq_5fpending_9',['UART1_RX_FIRQ_PENDING',['../neorv32_8h.html#a2e70d3a4e2973d224643813fcf315a20',1,'neorv32.h']]], + ['uart1_5frx_5frte_5fid_10',['UART1_RX_RTE_ID',['../neorv32_8h.html#ab1c351f5ea19ac9ea864155be9cc0b4b',1,'neorv32.h']]], + ['uart1_5frx_5ftrap_5fcode_11',['UART1_RX_TRAP_CODE',['../neorv32_8h.html#ad0b9eb2ee1f411d7fccdf4fe263214e1',1,'neorv32.h']]], + ['uart1_5ftx_5ffirq_5fenable_12',['UART1_TX_FIRQ_ENABLE',['../neorv32_8h.html#a0039bae3454a22e71d64e70d674f5d6a',1,'neorv32.h']]], + ['uart1_5ftx_5ffirq_5fpending_13',['UART1_TX_FIRQ_PENDING',['../neorv32_8h.html#ac4060532b7aa390623f54720460a2680',1,'neorv32.h']]], + ['uart1_5ftx_5frte_5fid_14',['UART1_TX_RTE_ID',['../neorv32_8h.html#a6af270d7ae8b1cde30e44eb9142491d3',1,'neorv32.h']]], + ['uart1_5ftx_5ftrap_5fcode_15',['UART1_TX_TRAP_CODE',['../neorv32_8h.html#a4cc50287c7a53982761a8116396ff7dd',1,'neorv32.h']]], + ['uart_5fbaud_16',['UART_BAUD',['../bootloader_8c.html#a1fac9153314479ad0ad495d752f0224a',1,'bootloader.c']]], + ['uart_5fctrl_5fbaud0_17',['UART_CTRL_BAUD0',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud1_18',['UART_CTRL_BAUD1',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud2_19',['UART_CTRL_BAUD2',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud3_20',['UART_CTRL_BAUD3',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud4_21',['UART_CTRL_BAUD4',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud5_22',['UART_CTRL_BAUD5',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud6_23',['UART_CTRL_BAUD6',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud7_24',['UART_CTRL_BAUD7',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud8_25',['UART_CTRL_BAUD8',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud9_26',['UART_CTRL_BAUD9',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fen_27',['UART_CTRL_EN',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fhwfc_5fen_28',['UART_CTRL_HWFC_EN',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5frx_5ffull_29',['UART_CTRL_IRQ_RX_FULL',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5frx_5fhalf_30',['UART_CTRL_IRQ_RX_HALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5frx_5fnempty_31',['UART_CTRL_IRQ_RX_NEMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5ftx_5fempty_32',['UART_CTRL_IRQ_TX_EMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5ftx_5fnhalf_33',['UART_CTRL_IRQ_TX_NHALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fprsc0_34',['UART_CTRL_PRSC0',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fprsc1_35',['UART_CTRL_PRSC1',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fprsc2_36',['UART_CTRL_PRSC2',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fclr_37',['UART_CTRL_RX_CLR',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5ffull_38',['UART_CTRL_RX_FULL',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fhalf_39',['UART_CTRL_RX_HALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fnempty_40',['UART_CTRL_RX_NEMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fover_41',['UART_CTRL_RX_OVER',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fsim_5fmode_42',['UART_CTRL_SIM_MODE',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fbusy_43',['UART_CTRL_TX_BUSY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fclr_44',['UART_CTRL_TX_CLR',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fempty_45',['UART_CTRL_TX_EMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5ffull_46',['UART_CTRL_TX_FULL',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fnhalf_47',['UART_CTRL_TX_NHALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9',1,'neorv32_uart.h']]], + ['uart_5fdata_5frtx_5flsb_48',['UART_DATA_RTX_LSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195',1,'neorv32_uart.h']]], + ['uart_5fdata_5frtx_5fmsb_49',['UART_DATA_RTX_MSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb',1,'neorv32_uart.h']]], + ['uart_5fdata_5frx_5ffifo_5fsize_5flsb_50',['UART_DATA_RX_FIFO_SIZE_LSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef',1,'neorv32_uart.h']]], + ['uart_5fdata_5frx_5ffifo_5fsize_5fmsb_51',['UART_DATA_RX_FIFO_SIZE_MSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225',1,'neorv32_uart.h']]], + ['uart_5fdata_5ftx_5ffifo_5fsize_5flsb_52',['UART_DATA_TX_FIFO_SIZE_LSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e',1,'neorv32_uart.h']]], + ['uart_5fdata_5ftx_5ffifo_5fsize_5fmsb_53',['UART_DATA_TX_FIFO_SIZE_MSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529',1,'neorv32_uart.h']]], + ['uart_5fen_54',['UART_EN',['../bootloader_8c.html#af1c2f103ac6e3183f08b39099fab2be9',1,'bootloader.c']]], + ['uart_5fget_5fexecutable_55',['uart_get_executable',['../demo__xip_2main_8c.html#a0458656f8a108ff31f4bbbd005f029a0',1,'main.c']]], + ['uart_5fget_5fword_56',['uart_get_word',['../demo__xip_2main_8c.html#a3043d09bdc155f57f45cd91e0cd4d15b',1,'main.c']]], + ['uart_5fhw_5fhandshake_5fen_57',['UART_HW_HANDSHAKE_EN',['../bootloader_8c.html#a20e93d623ce07939c3fdd53898f9d583',1,'bootloader.c']]], + ['ug_20user_20guide_20a_20let_20s_20get_20it_20started_58',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]], + ['uint16fifo_59',['uint16Fifo',['../structt__neorv32__spi.html#a71fb3f91af197e1abdbe97d62130ad0f',1,'t_neorv32_spi']]], + ['uint32read_60',['uint32Read',['../structt__neorv32__spi.html#a5750a54f8312ec2fed349eb9fbeff323',1,'t_neorv32_spi']]], + ['uint32total_61',['uint32Total',['../structt__neorv32__spi.html#aa4d96f72e57fb6930ab43de6fb0a85ae',1,'t_neorv32_spi']]], + ['uint32write_62',['uint32Write',['../structt__neorv32__spi.html#aa89b7a769e54e331798e4d68d02a7b43',1,'t_neorv32_spi']]], + ['uint8csn_63',['uint8Csn',['../structt__neorv32__spi.html#a435c266758a440d32de4344472e3514a',1,'t_neorv32_spi']]], + ['uint8isbusy_64',['uint8IsBusy',['../structt__neorv32__spi.html#a8ed31f9393bee5b963e08582b6c517ed',1,'t_neorv32_spi']]], + ['universe_65',['universe',['../game__of__life_2main_8c.html#ae0b5214cf0cd93049e9df8a95a09d826',1,'main.c']]], + ['user_20guide_20a_20let_20s_20get_20it_20started_66',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]] +]; diff --git a/sw/search/all_1a.js b/sw/search/all_1a.js new file mode 100644 index 0000000000..922a76a9be --- /dev/null +++ b/sw/search/all_1a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['v_20processor_0',['The NEORV32 RISC-V Processor',['../md_README.html#autotoc_md0',1,'']]], + ['vectored_5fglobal_5fhandler_1',['vectored_global_handler',['../processor__check_2main_8c.html#a9504ca74fdb80711a88d2a16d4cb4cf4',1,'main.c']]], + ['vectored_5firq_5ftable_2',['vectored_irq_table',['../processor__check_2main_8c.html#a0d695ebfaae3b4614ddb62640cbf8b7b',1,'main.c']]], + ['vectored_5fmei_5fhandler_3',['vectored_mei_handler',['../processor__check_2main_8c.html#a1a455bede4ab48f32d3ed0868e398044',1,'main.c']]], + ['verify_5fresult_4',['verify_result',['../float__corner__test_2main_8c.html#a941ef8d24fd8e8fe4536626b2ce72410',1,'verify_result(uint32_t num, uint32_t opa, uint32_t opb, uint32_t ref, uint32_t res):&#160;main.c'],['../floating__point__test_2main_8c.html#a941ef8d24fd8e8fe4536626b2ce72410',1,'verify_result(uint32_t num, uint32_t opa, uint32_t opb, uint32_t ref, uint32_t res):&#160;main.c']]] +]; diff --git a/sw/search/all_1b.js b/sw/search/all_1b.js new file mode 100644 index 0000000000..7e63778e40 --- /dev/null +++ b/sw/search/all_1b.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['wdt_5fctrl_5fdben_0',['WDT_CTRL_DBEN',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5fen_1',['WDT_CTRL_EN',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5flock_2',['WDT_CTRL_LOCK',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5frcause_5fhi_3',['WDT_CTRL_RCAUSE_HI',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5frcause_5flo_4',['WDT_CTRL_RCAUSE_LO',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5fsen_5',['WDT_CTRL_SEN',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5fstrict_6',['WDT_CTRL_STRICT',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5ftimeout_5flsb_7',['WDT_CTRL_TIMEOUT_LSB',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5ftimeout_5fmsb_8',['WDT_CTRL_TIMEOUT_MSB',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7',1,'neorv32_wdt.h']]], + ['wdt_5fpassword_9',['WDT_PASSWORD',['../neorv32__wdt_8h.html#af2a2bd9c74bdba1b46bd92025bd00ab6',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5facc_10',['WDT_RCAUSE_ACC',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a10999a782ffc2c26f601615f76121376',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5fext_11',['WDT_RCAUSE_EXT',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5focd_12',['WDT_RCAUSE_OCD',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5ftmo_13',['WDT_RCAUSE_TMO',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a7273d24bb65d3f40c1d289ce5cbc1a40',1,'neorv32_wdt.h']]], + ['wdt_5ftimeout_5fs_14',['WDT_TIMEOUT_S',['../demo__wdt_2main_8c.html#a01af3905e60b1869f669315f4a1297f5',1,'main.c']]], + ['weekday_15',['weekday',['../structdate__t.html#a44167cd71416886e55048310af6d4e1b',1,'date_t']]], + ['write_5fbyte_16',['write_byte',['../demo__onewire_2main_8c.html#a28283848f09bf8feebc860a51545f487',1,'main.c']]], + ['write_5fmemory_17',['write_memory',['../bus__explorer_2main_8c.html#a96729fb5279642ac56c8e6a513789b45',1,'main.c']]] +]; diff --git a/sw/search/all_1c.js b/sw/search/all_1c.js new file mode 100644 index 0000000000..647eb15a51 --- /dev/null +++ b/sw/search/all_1c.js @@ -0,0 +1,47 @@ +var searchData= +[ + ['xip_5fclk_5fprsc_0',['XIP_CLK_PRSC',['../demo__xip_2main_8c.html#aec72efe062dbdb149ae6d4f8b1be6793',1,'main.c']]], + ['xip_5fctrl_5fburst_5fen_1',['XIP_CTRL_BURST_EN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv0_2',['XIP_CTRL_CDIV0',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv1_3',['XIP_CTRL_CDIV1',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv2_4',['XIP_CTRL_CDIV2',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv3_5',['XIP_CTRL_CDIV3',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcpha_6',['XIP_CTRL_CPHA',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcpol_7',['XIP_CTRL_CPOL',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fen_8',['XIP_CTRL_EN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fhighspeed_9',['XIP_CTRL_HIGHSPEED',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fphy_5fbusy_10',['XIP_CTRL_PHY_BUSY',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fprsc0_11',['XIP_CTRL_PRSC0',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fprsc1_12',['XIP_CTRL_PRSC1',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fprsc2_13',['XIP_CTRL_PRSC2',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086',1,'neorv32_xip.h']]], + ['xip_5fctrl_5frd_5fcmd_5flsb_14',['XIP_CTRL_RD_CMD_LSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b',1,'neorv32_xip.h']]], + ['xip_5fctrl_5frd_5fcmd_5fmsb_15',['XIP_CTRL_RD_CMD_MSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fspi_5fcsen_16',['XIP_CTRL_SPI_CSEN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fspi_5fnbytes_5flsb_17',['XIP_CTRL_SPI_NBYTES_LSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fspi_5fnbytes_5fmsb_18',['XIP_CTRL_SPI_NBYTES_MSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fabytes_5flsb_19',['XIP_CTRL_XIP_ABYTES_LSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fabytes_5fmsb_20',['XIP_CTRL_XIP_ABYTES_MSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fbusy_21',['XIP_CTRL_XIP_BUSY',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fen_22',['XIP_CTRL_XIP_EN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937',1,'neorv32_xip.h']]], + ['xip_5fen_23',['XIP_EN',['../bootloader_8c.html#a2cf31934b909299fb93bb5eebdbc7c9e',1,'bootloader.c']]], + ['xip_5fflash_5faccess_5fcheck_24',['xip_flash_access_check',['../demo__xip_2main_8c.html#a23bd7bd7b0808d919fd09ac0a8258498',1,'main.c']]], + ['xip_5fflash_5ferase_5fsector_25',['xip_flash_erase_sector',['../demo__xip_2main_8c.html#a9e0b2714126b6699ddb65485c93293e4',1,'main.c']]], + ['xip_5fflash_5fprogram_26',['xip_flash_program',['../demo__xip_2main_8c.html#a4ddfa8fdc072cadeef18a4a10bc8b174',1,'main.c']]], + ['xip_5fmem_5fbase_5faddress_27',['XIP_MEM_BASE_ADDRESS',['../neorv32_8h.html#aa01bea676e878a9e87ca10ce2d91e51f',1,'neorv32.h']]], + ['xirq_5ffirq_5fenable_28',['XIRQ_FIRQ_ENABLE',['../neorv32_8h.html#afe0cb262d517c7da73d6b5dc78886334',1,'neorv32.h']]], + ['xirq_5ffirq_5fpending_29',['XIRQ_FIRQ_PENDING',['../neorv32_8h.html#a866768963f8648363dce40de9f34d61b',1,'neorv32.h']]], + ['xirq_5fhandler_5fch0_30',['xirq_handler_ch0',['../demo__xirq_2main_8c.html#a8874ccfc0b56171c359b5c2ceaf2bd80',1,'main.c']]], + ['xirq_5fhandler_5fch1_31',['xirq_handler_ch1',['../demo__xirq_2main_8c.html#abfe0c0bc47a683ba55df2aed63a12d4b',1,'main.c']]], + ['xirq_5fhandler_5fch2_32',['xirq_handler_ch2',['../demo__xirq_2main_8c.html#ae8e3b3236aa2303c2b5e6e421b72cf73',1,'main.c']]], + ['xirq_5fhandler_5fch3_33',['xirq_handler_ch3',['../demo__xirq_2main_8c.html#a99e9ae3088f39995c852b2c53ec21266',1,'main.c']]], + ['xirq_5frte_5fid_34',['XIRQ_RTE_ID',['../neorv32_8h.html#a95387d3482ec8e5c1d734805fdf64fa5',1,'neorv32.h']]], + ['xirq_5ftrap_5fcode_35',['XIRQ_TRAP_CODE',['../neorv32_8h.html#a16b9a7444833b5581df073661deb8f3a',1,'neorv32.h']]], + ['xirq_5ftrap_5fhandler0_36',['xirq_trap_handler0',['../processor__check_2main_8c.html#aa4fe70578c4dccabe1e31fae941378cb',1,'main.c']]], + ['xirq_5ftrap_5fhandler1_37',['xirq_trap_handler1',['../processor__check_2main_8c.html#a277cb06ef74e4cfe1ef783069f9b6527',1,'main.c']]], + ['xirq_5ftrigger_5fenum_38',['XIRQ_TRIGGER_enum',['../neorv32__xirq_8h.html#a19aaba6e0cfedfee3cf96f3ea5323151',1,'neorv32_xirq.h']]], + ['xstr_39',['xstr',['../bootloader_8c.html#aff6b53dd58cea43d24393a9a2f79e772',1,'bootloader.c']]], + ['xtea_5fdelta_40',['xtea_delta',['../demo__cfu_2main_8c.html#a26da64691624f3c899f2394a427d6593',1,'main.c']]], + ['xtea_5frounds_41',['XTEA_ROUNDS',['../demo__cfu_2main_8c.html#a36801eebef583b6c3438709144834e3e',1,'main.c']]], + ['xtea_5fsw_5fdecipher_42',['xtea_sw_decipher',['../demo__cfu_2main_8c.html#a0e980c5d81b1eca90b8073e54099bdb0',1,'main.c']]], + ['xtea_5fsw_5fencipher_43',['xtea_sw_encipher',['../demo__cfu_2main_8c.html#a8dc502bf508491eed1f39c4acf040efb',1,'main.c']]] +]; diff --git a/sw/search/all_1d.js b/sw/search/all_1d.js new file mode 100644 index 0000000000..e613d54073 --- /dev/null +++ b/sw/search/all_1d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['year_0',['year',['../structdate__t.html#aabab1b1efd94b69bfb28b639c612dd4f',1,'date_t']]] +]; diff --git a/sw/search/all_2.js b/sw/search/all_2.js new file mode 100644 index 0000000000..5446ba6c31 --- /dev/null +++ b/sw/search/all_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['3_20fpga_20implementation_20results_0',['3. FPGA Implementation Results',['../md_README.html#autotoc_md5',1,'']]] +]; diff --git a/sw/search/all_3.js b/sw/search/all_3.js new file mode 100644 index 0000000000..c0b02ef08a --- /dev/null +++ b/sw/search/all_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['4_20performance_0',['4. Performance',['../md_README.html#autotoc_md6',1,'']]] +]; diff --git a/sw/search/all_4.js b/sw/search/all_4.js new file mode 100644 index 0000000000..45ecc7f21c --- /dev/null +++ b/sw/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['5_20getting_20started_0',['5. Getting Started',['../md_README.html#autotoc_md7',1,'']]] +]; diff --git a/sw/search/all_5.js b/sw/search/all_5.js new file mode 100644 index 0000000000..1dd35b164d --- /dev/null +++ b/sw/search/all_5.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['_3aabacus_3a_20a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_0',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['_3acopyright_3a_20legal_1',[':copyright: Legal',['../md_README.html#autotoc_md13',1,'']]], + ['_3adesktop_5fcomputer_3a_20a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_2',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['_3afloppy_5fdisk_3a_20a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_3',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['_3amag_3a_20a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_4',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['_3arocket_3a_20a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20ug_20user_20guide_20a_20let_20s_20get_20it_20started_5',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]] +]; diff --git a/sw/search/all_6.js b/sw/search/all_6.js new file mode 100644 index 0000000000..15dd934c16 --- /dev/null +++ b/sw/search/all_6.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['_5f_5fcrt0_5fmax_5fheap_0',['__crt0_max_heap',['../neorv32_8h.html#aaa2cb9e7075a852870fd67eff2861b18',1,'neorv32.h']]], + ['_5f_5fheap_5fend_1',['__heap_end',['../neorv32_8h.html#ae6ef7c715931df8bdc331577da14119b',1,'neorv32.h']]], + ['_5f_5fheap_5fstart_2',['__heap_start',['../neorv32_8h.html#a0eaa3dcfb1db0c72534046feb9fa9b60',1,'neorv32.h']]], + ['_5f_5fneorv32_5frte_5fprint_5fhex_5fword_3',['__neorv32_rte_print_hex_word',['../neorv32__rte_8c.html#a01bf6c01f5a8cda2132b9ac98824edc1',1,'neorv32_rte.c']]], + ['_5f_5fneorv32_5frte_5fvector_5flut_4',['__neorv32_rte_vector_lut',['../neorv32__rte_8c.html#a2c8272b4628edddb943bcfad829b561a',1,'neorv32_rte.c']]], + ['_5f_5fneorv32_5fxirq_5fcore_5',['__neorv32_xirq_core',['../neorv32__xirq_8c.html#a14661d628dd31e6bfce89376c6614627',1,'neorv32_xirq.c']]], + ['_5f_5fneorv32_5fxirq_5fdummy_5fhandler_6',['__neorv32_xirq_dummy_handler',['../neorv32__xirq_8c.html#ae4d9362b23a1341c595a4cd239a87091',1,'neorv32_xirq.c']]], + ['_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_7',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_8',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['_5foverview_20neorv32_20project_20a_20an_20introduction_9',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_10',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]] +]; diff --git a/sw/search/all_7.js b/sw/search/all_7.js new file mode 100644 index 0000000000..3db0757f6d --- /dev/null +++ b/sw/search/all_7.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['a_20an_20introduction_0',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_1',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_2',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_3',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_4',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20ug_20user_20guide_20a_20let_20s_20get_20it_20started_5',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]], + ['a_20let_20s_20get_20it_20started_6',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]], + ['a_20the_20core_7',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['a_20the_20soc_8',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['a_20the_20software_20ecosystem_9',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['adaptive_5fproportion_5ftest_10',['adaptive_proportion_test',['../demo__trng_2main_8c.html#a23a91e6fe2cc44f3c29baf0d331e05db',1,'main.c']]], + ['amo_5fvar_11',['amo_var',['../atomic__test_2main_8c.html#a9141e95a5f98420ddf8a43e6d20ff6dc',1,'main.c']]], + ['an_20introduction_12',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['auto_5fboot_5ftimeout_13',['AUTO_BOOT_TIMEOUT',['../bootloader_8c.html#af6fcb607a9c320da869b72aa30893a69',1,'bootloader.c']]], + ['aux_5fprint_5fhex_5fbyte_14',['aux_print_hex_byte',['../bus__explorer_2main_8c.html#ac582208281cd6fce4eb61c234f312ef6',1,'aux_print_hex_byte(uint8_t byte):&#160;main.c'],['../demo__spi_2main_8c.html#ac582208281cd6fce4eb61c234f312ef6',1,'aux_print_hex_byte(uint8_t byte):&#160;main.c']]] +]; diff --git a/sw/search/all_8.js b/sw/search/all_8.js new file mode 100644 index 0000000000..66f55b731c --- /dev/null +++ b/sw/search/all_8.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['baud_5frate_0',['BAUD_RATE',['../atomic__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../bus__explorer_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__cfs_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__cfu_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__crc_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__dma_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__emulate__unaligned_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__gptmr_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__hpm_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__neopixel_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__newlib_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__onewire_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__pwm_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__sdi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__slink_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__spi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__spi__irq_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__trng_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__twi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__wdt_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__xip_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__xirq_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../float__corner__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../floating__point__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../game__of__life_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../hello__world_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c']]], + ['binary_5fvalue_1',['binary_value',['../unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606',1,'float_conv_t']]], + ['bootloader_2ec_2',['bootloader.c',['../bootloader_8c.html',1,'']]], + ['bootloader_5ftrap_5fhandler_3',['bootloader_trap_handler',['../bootloader_8c.html#af13b4b3d5e6597feacf331e6d16b08e9',1,'bootloader.c']]], + ['buffer_5fsize_4',['BUFFER_SIZE',['../demo__xip_2main_8c.html#a6b20d41d6252e9871430c242cb1a56e7',1,'main.c']]] +]; diff --git a/sw/search/all_9.js b/sw/search/all_9.js new file mode 100644 index 0000000000..1ddb129016 --- /dev/null +++ b/sw/search/all_9.js @@ -0,0 +1,257 @@ +var searchData= +[ + ['cache_0',['CACHE',['../structneorv32__sysinfo__t.html#ada99a36ccda38b254d5b6a84883101f6',1,'neorv32_sysinfo_t']]], + ['cell_5falive_1',['CELL_ALIVE',['../game__of__life_2main_8c.html#afa6488273e16792d9c3da5e40e3f572d',1,'main.c']]], + ['cell_5fdead_2',['CELL_DEAD',['../game__of__life_2main_8c.html#abe6bebcf1cb4f5b4d522c1706eb48663',1,'main.c']]], + ['cfs_5ffirq_5fenable_3',['CFS_FIRQ_ENABLE',['../neorv32_8h.html#ace79ee46daf3a1b689d9fe79dfcd6627',1,'neorv32.h']]], + ['cfs_5ffirq_5fpending_4',['CFS_FIRQ_PENDING',['../neorv32_8h.html#aae182648a2c23d070b9db0295388e001',1,'neorv32.h']]], + ['cfs_5frte_5fid_5',['CFS_RTE_ID',['../neorv32_8h.html#a095f41fbefaa7acc1bfdd65cd3ce06ea',1,'neorv32.h']]], + ['cfs_5ftrap_5fcode_6',['CFS_TRAP_CODE',['../neorv32_8h.html#aae6b2ae3fba20ff80bfb59735f179c26',1,'neorv32.h']]], + ['channel_5fcfg_7',['CHANNEL_CFG',['../structneorv32__pwm__t.html#a5df0cf6c7c250365db3ada8db7cc19e9',1,'neorv32_pwm_t']]], + ['channel_5fcfg_5fenum_8',['CHANNEL_CFG_enum',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175',1,'neorv32_pwm.h']]], + ['check_5fresult_9',['check_result',['../atomic__test_2main_8c.html#a4f4c6d8481b4100f90955ba5a70428a4',1,'main.c']]], + ['clear_5funiverse_10',['clear_universe',['../game__of__life_2main_8c.html#a819f10c5b644a07eeb069b6e7f12050e',1,'main.c']]], + ['clk_11',['CLK',['../structneorv32__sysinfo__t.html#a3f8ce96050fc0a680afa9b7fdf7cb35c',1,'neorv32_sysinfo_t']]], + ['clk_5fprsc_5f1024_12',['CLK_PRSC_1024',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17',1,'neorv32.h']]], + ['clk_5fprsc_5f128_13',['CLK_PRSC_128',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e',1,'neorv32.h']]], + ['clk_5fprsc_5f2_14',['CLK_PRSC_2',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05',1,'neorv32.h']]], + ['clk_5fprsc_5f2048_15',['CLK_PRSC_2048',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79',1,'neorv32.h']]], + ['clk_5fprsc_5f4_16',['CLK_PRSC_4',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1',1,'neorv32.h']]], + ['clk_5fprsc_5f4096_17',['CLK_PRSC_4096',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee',1,'neorv32.h']]], + ['clk_5fprsc_5f64_18',['CLK_PRSC_64',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da',1,'neorv32.h']]], + ['clk_5fprsc_5f8_19',['CLK_PRSC_8',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9',1,'neorv32.h']]], + ['compute_5frate_20',['compute_rate',['../demo__trng_2main_8c.html#abbde1237eed617466fb971a78c3acd1e',1,'main.c']]], + ['core_21',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['count_22',['COUNT',['../structneorv32__gptmr__t.html#a1abc5bae1dffc64006e965d4570da479',1,'neorv32_gptmr_t']]], + ['cpu_20a_20the_20core_23',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['crc_5fmode16_24',['CRC_MODE16',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f',1,'neorv32_crc.h']]], + ['crc_5fmode32_25',['CRC_MODE32',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa',1,'neorv32_crc.h']]], + ['crc_5fmode8_26',['CRC_MODE8',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a',1,'neorv32_crc.h']]], + ['csr_5fcfureg0_27',['CSR_CFUREG0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f',1,'neorv32_cpu_csr.h']]], + ['csr_5fcfureg1_28',['CSR_CFUREG1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8',1,'neorv32_cpu_csr.h']]], + ['csr_5fcfureg2_29',['CSR_CFUREG2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68',1,'neorv32_cpu_csr.h']]], + ['csr_5fcfureg3_30',['CSR_CFUREG3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf',1,'neorv32_cpu_csr.h']]], + ['csr_5fcycle_31',['CSR_CYCLE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e',1,'neorv32_cpu_csr.h']]], + ['csr_5fcycleh_32',['CSR_CYCLEH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db',1,'neorv32_cpu_csr.h']]], + ['csr_5fdcsr_33',['CSR_DCSR',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9',1,'neorv32_cpu_csr.h']]], + ['csr_5fdpc_34',['CSR_DPC',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b',1,'neorv32_cpu_csr.h']]], + ['csr_5fdscratch0_35',['CSR_DSCRATCH0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7',1,'neorv32_cpu_csr.h']]], + ['csr_5ffcsr_36',['CSR_FCSR',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_37',['CSR_FFLAGS',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fdz_38',['CSR_FFLAGS_DZ',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fnv_39',['CSR_FFLAGS_NV',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fnx_40',['CSR_FFLAGS_NX',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fof_41',['CSR_FFLAGS_OF',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fuf_42',['CSR_FFLAGS_UF',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819',1,'neorv32_cpu_csr.h']]], + ['csr_5ffrm_43',['CSR_FRM',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812',1,'neorv32_cpu_csr.h']]], + ['csr_5finstret_44',['CSR_INSTRET',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66',1,'neorv32_cpu_csr.h']]], + ['csr_5finstreth_45',['CSR_INSTRETH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153',1,'neorv32_cpu_csr.h']]], + ['csr_5fmarchid_46',['CSR_MARCHID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcause_47',['CSR_MCAUSE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmconfigptr_48',['CSR_MCONFIGPTR',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcounteren_49',['CSR_MCOUNTEREN',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcounteren_5fcy_50',['CSR_MCOUNTEREN_CY',['../neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a3d0c8ff6ba2c557cb5b5d353bdb95790',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcounteren_5fir_51',['CSR_MCOUNTEREN_IR',['../neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a97e36c94b71fa2f9a805bbe47b0bc1b5',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_52',['CSR_MCOUNTINHIBIT',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fcy_53',['CSR_MCOUNTINHIBIT_CY',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm10_54',['CSR_MCOUNTINHIBIT_HPM10',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm11_55',['CSR_MCOUNTINHIBIT_HPM11',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm12_56',['CSR_MCOUNTINHIBIT_HPM12',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm13_57',['CSR_MCOUNTINHIBIT_HPM13',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm14_58',['CSR_MCOUNTINHIBIT_HPM14',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm15_59',['CSR_MCOUNTINHIBIT_HPM15',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm16_60',['CSR_MCOUNTINHIBIT_HPM16',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm17_61',['CSR_MCOUNTINHIBIT_HPM17',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm18_62',['CSR_MCOUNTINHIBIT_HPM18',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm19_63',['CSR_MCOUNTINHIBIT_HPM19',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm20_64',['CSR_MCOUNTINHIBIT_HPM20',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm21_65',['CSR_MCOUNTINHIBIT_HPM21',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm22_66',['CSR_MCOUNTINHIBIT_HPM22',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm23_67',['CSR_MCOUNTINHIBIT_HPM23',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm24_68',['CSR_MCOUNTINHIBIT_HPM24',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm25_69',['CSR_MCOUNTINHIBIT_HPM25',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm26_70',['CSR_MCOUNTINHIBIT_HPM26',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm27_71',['CSR_MCOUNTINHIBIT_HPM27',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm28_72',['CSR_MCOUNTINHIBIT_HPM28',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm29_73',['CSR_MCOUNTINHIBIT_HPM29',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm3_74',['CSR_MCOUNTINHIBIT_HPM3',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm30_75',['CSR_MCOUNTINHIBIT_HPM30',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm31_76',['CSR_MCOUNTINHIBIT_HPM31',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm4_77',['CSR_MCOUNTINHIBIT_HPM4',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm5_78',['CSR_MCOUNTINHIBIT_HPM5',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm6_79',['CSR_MCOUNTINHIBIT_HPM6',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm7_80',['CSR_MCOUNTINHIBIT_HPM7',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm8_81',['CSR_MCOUNTINHIBIT_HPM8',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm9_82',['CSR_MCOUNTINHIBIT_HPM9',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fir_83',['CSR_MCOUNTINHIBIT_IR',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcycle_84',['CSR_MCYCLE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcycleh_85',['CSR_MCYCLEH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmenvcfg_86',['CSR_MENVCFG',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98',1,'neorv32_cpu_csr.h']]], + ['csr_5fmenvcfgh_87',['CSR_MENVCFGH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmepc_88',['CSR_MEPC',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhartid_89',['CSR_MHARTID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter10_90',['CSR_MHPMCOUNTER10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter10h_91',['CSR_MHPMCOUNTER10H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter11_92',['CSR_MHPMCOUNTER11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter11h_93',['CSR_MHPMCOUNTER11H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter12_94',['CSR_MHPMCOUNTER12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter12h_95',['CSR_MHPMCOUNTER12H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter13_96',['CSR_MHPMCOUNTER13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter13h_97',['CSR_MHPMCOUNTER13H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter14_98',['CSR_MHPMCOUNTER14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter14h_99',['CSR_MHPMCOUNTER14H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter15_100',['CSR_MHPMCOUNTER15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter15h_101',['CSR_MHPMCOUNTER15H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter3_102',['CSR_MHPMCOUNTER3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter3h_103',['CSR_MHPMCOUNTER3H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter4_104',['CSR_MHPMCOUNTER4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter4h_105',['CSR_MHPMCOUNTER4H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter5_106',['CSR_MHPMCOUNTER5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter5h_107',['CSR_MHPMCOUNTER5H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter6_108',['CSR_MHPMCOUNTER6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter6h_109',['CSR_MHPMCOUNTER6H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter7_110',['CSR_MHPMCOUNTER7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter7h_111',['CSR_MHPMCOUNTER7H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter8_112',['CSR_MHPMCOUNTER8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter8h_113',['CSR_MHPMCOUNTER8H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter9_114',['CSR_MHPMCOUNTER9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter9h_115',['CSR_MHPMCOUNTER9H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent10_116',['CSR_MHPMEVENT10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent11_117',['CSR_MHPMEVENT11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent12_118',['CSR_MHPMEVENT12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent13_119',['CSR_MHPMEVENT13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent14_120',['CSR_MHPMEVENT14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent15_121',['CSR_MHPMEVENT15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent3_122',['CSR_MHPMEVENT3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent4_123',['CSR_MHPMEVENT4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent5_124',['CSR_MHPMEVENT5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent6_125',['CSR_MHPMEVENT6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent7_126',['CSR_MHPMEVENT7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent8_127',['CSR_MHPMEVENT8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent9_128',['CSR_MHPMEVENT9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_129',['CSR_MIE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq0e_130',['CSR_MIE_FIRQ0E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq10e_131',['CSR_MIE_FIRQ10E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq11e_132',['CSR_MIE_FIRQ11E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq12e_133',['CSR_MIE_FIRQ12E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq13e_134',['CSR_MIE_FIRQ13E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq14e_135',['CSR_MIE_FIRQ14E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq15e_136',['CSR_MIE_FIRQ15E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq1e_137',['CSR_MIE_FIRQ1E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq2e_138',['CSR_MIE_FIRQ2E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq3e_139',['CSR_MIE_FIRQ3E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq4e_140',['CSR_MIE_FIRQ4E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq5e_141',['CSR_MIE_FIRQ5E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq6e_142',['CSR_MIE_FIRQ6E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq7e_143',['CSR_MIE_FIRQ7E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq8e_144',['CSR_MIE_FIRQ8E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq9e_145',['CSR_MIE_FIRQ9E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5fmeie_146',['CSR_MIE_MEIE',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5fmsie_147',['CSR_MIE_MSIE',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5fmtie_148',['CSR_MIE_MTIE',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083',1,'neorv32_cpu_csr.h']]], + ['csr_5fmimpid_149',['CSR_MIMPID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd',1,'neorv32_cpu_csr.h']]], + ['csr_5fminstret_150',['CSR_MINSTRET',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb',1,'neorv32_cpu_csr.h']]], + ['csr_5fminstreth_151',['CSR_MINSTRETH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_152',['CSR_MIP',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq0p_153',['CSR_MIP_FIRQ0P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq10p_154',['CSR_MIP_FIRQ10P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq11p_155',['CSR_MIP_FIRQ11P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq12p_156',['CSR_MIP_FIRQ12P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq13p_157',['CSR_MIP_FIRQ13P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq14p_158',['CSR_MIP_FIRQ14P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq15p_159',['CSR_MIP_FIRQ15P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq1p_160',['CSR_MIP_FIRQ1P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq2p_161',['CSR_MIP_FIRQ2P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq3p_162',['CSR_MIP_FIRQ3P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq4p_163',['CSR_MIP_FIRQ4P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq5p_164',['CSR_MIP_FIRQ5P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq6p_165',['CSR_MIP_FIRQ6P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq7p_166',['CSR_MIP_FIRQ7P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq8p_167',['CSR_MIP_FIRQ8P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq9p_168',['CSR_MIP_FIRQ9P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5fmeip_169',['CSR_MIP_MEIP',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5fmsip_170',['CSR_MIP_MSIP',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5fmtip_171',['CSR_MIP_MTIP',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_172',['CSR_MISA',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fb_173',['CSR_MISA_B',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fc_174',['CSR_MISA_C',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fe_175',['CSR_MISA_E',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fi_176',['CSR_MISA_I',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fm_177',['CSR_MISA_M',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fmxl_5fhi_178',['CSR_MISA_MXL_HI',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fmxl_5flo_179',['CSR_MISA_MXL_LO',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fu_180',['CSR_MISA_U',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fx_181',['CSR_MISA_X',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193',1,'neorv32_cpu_csr.h']]], + ['csr_5fmscratch_182',['CSR_MSCRATCH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_183',['CSR_MSTATUS',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmie_184',['CSR_MSTATUS_MIE',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmpie_185',['CSR_MSTATUS_MPIE',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmpp_5fh_186',['CSR_MSTATUS_MPP_H',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmpp_5fl_187',['CSR_MSTATUS_MPP_L',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmprv_188',['CSR_MSTATUS_MPRV',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5ftw_189',['CSR_MSTATUS_TW',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatush_190',['CSR_MSTATUSH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067',1,'neorv32_cpu_csr.h']]], + ['csr_5fmtinst_191',['CSR_MTINST',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmtval_192',['CSR_MTVAL',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmtvec_193',['CSR_MTVEC',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21',1,'neorv32_cpu_csr.h']]], + ['csr_5fmvendorid_194',['CSR_MVENDORID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_195',['CSR_MXISA',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fclkgate_196',['CSR_MXISA_CLKGATE',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a35543f2ac5cde6e142bca6791b7b36b1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5ffastmul_197',['CSR_MXISA_FASTMUL',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5ffastshift_198',['CSR_MXISA_FASTSHIFT',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fis_5fsim_199',['CSR_MXISA_IS_SIM',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5frfhwrst_200',['CSR_MXISA_RFHWRST',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fsdext_201',['CSR_MXISA_SDEXT',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fsdtrig_202',['CSR_MXISA_SDTRIG',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fsmpmp_203',['CSR_MXISA_SMPMP',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzalrsc_204',['CSR_MXISA_ZALRSC',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adf45adc0bcbec0c1ffa944099257a947',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzba_205',['CSR_MXISA_ZBA',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adfc9122d93a71bf6df178022a52d22c4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzbb_206',['CSR_MXISA_ZBB',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a815cbe0149cba2a69025f6bec9946a85',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzbkb_207',['CSR_MXISA_ZBKB',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adb26c1e5bf6ae112625621dddd331735',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzbkc_208',['CSR_MXISA_ZBKC',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac9e87153c096d656b40cb7abdf3afd55',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzbkx_209',['CSR_MXISA_ZBKX',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a34519a66e749d63dc5bc7c145c297b64',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzbs_210',['CSR_MXISA_ZBS',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a469e8e449f0e442df531c8cf2c4f35c5',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzfinx_211',['CSR_MXISA_ZFINX',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzicntr_212',['CSR_MXISA_ZICNTR',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzicond_213',['CSR_MXISA_ZICOND',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzicsr_214',['CSR_MXISA_ZICSR',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzifencei_215',['CSR_MXISA_ZIFENCEI',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzihpm_216',['CSR_MXISA_ZIHPM',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzkn_217',['CSR_MXISA_ZKN',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad7e7454a30c82c3d91acbc8c259e8c25',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzknd_218',['CSR_MXISA_ZKND',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48f1de7f79a0633644ae02c463d49375',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzkne_219',['CSR_MXISA_ZKNE',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a216ec44d5be3b158acb7e033e352bad1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzknh_220',['CSR_MXISA_ZKNH',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5fe8e591901e0fd7ba6706c70e9c76ec',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzks_221',['CSR_MXISA_ZKS',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a2649bee3397c74ada7b72677308f38c0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzksed_222',['CSR_MXISA_ZKSED',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a43213190abb77304a78c15196c90a044',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzksh_223',['CSR_MXISA_ZKSH',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5e4bf05830b66410bbf2ef2c68e5fd18',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzkt_224',['CSR_MXISA_ZKT',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a31788af612f04bc6b2a2bd15c1fb63c1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzmmul_225',['CSR_MXISA_ZMMUL',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzxcfu_226',['CSR_MXISA_ZXCFU',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr0_227',['CSR_PMPADDR0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr1_228',['CSR_PMPADDR1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr10_229',['CSR_PMPADDR10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr11_230',['CSR_PMPADDR11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr12_231',['CSR_PMPADDR12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr13_232',['CSR_PMPADDR13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr14_233',['CSR_PMPADDR14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr15_234',['CSR_PMPADDR15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr2_235',['CSR_PMPADDR2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr3_236',['CSR_PMPADDR3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr4_237',['CSR_PMPADDR4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr5_238',['CSR_PMPADDR5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr6_239',['CSR_PMPADDR6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr7_240',['CSR_PMPADDR7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr8_241',['CSR_PMPADDR8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr9_242',['CSR_PMPADDR9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg0_243',['CSR_PMPCFG0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg1_244',['CSR_PMPCFG1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg2_245',['CSR_PMPCFG2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg3_246',['CSR_PMPCFG3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850',1,'neorv32_cpu_csr.h']]], + ['csr_5ftdata1_247',['CSR_TDATA1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57',1,'neorv32_cpu_csr.h']]], + ['csr_5ftdata2_248',['CSR_TDATA2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc',1,'neorv32_cpu_csr.h']]], + ['csr_5ftinfo_249',['CSR_TINFO',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b',1,'neorv32_cpu_csr.h']]], + ['csr_5ftselect_250',['CSR_TSELECT',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d',1,'neorv32_cpu_csr.h']]], + ['ctrl_251',['CTRL',['../structneorv32__dma__t.html#a8480d6ad3ba5063cdf21dca286711569',1,'neorv32_dma_t::CTRL'],['../structneorv32__gptmr__t.html#a3c477ccb24ed12122d9d90244431c7e9',1,'neorv32_gptmr_t::CTRL'],['../structneorv32__neoled__t.html#adfe7618c002ff88dd22e65fcedfd6139',1,'neorv32_neoled_t::CTRL'],['../structneorv32__onewire__t.html#a310df3bab43e4438417b2ff948f4712a',1,'neorv32_onewire_t::CTRL'],['../structneorv32__sdi__t.html#af494f25cbcd8478cf384eb868e447303',1,'neorv32_sdi_t::CTRL'],['../structneorv32__slink__t.html#a39ece6aeeea6982002e164902a1e784f',1,'neorv32_slink_t::CTRL'],['../structneorv32__spi__t.html#a34fa748f0e3ceb75822c0a5553bd0420',1,'neorv32_spi_t::CTRL'],['../structneorv32__trng__t.html#ae2ff37ce30fb85ef59d9012534bc7e67',1,'neorv32_trng_t::CTRL'],['../structneorv32__twd__t.html#acff774cf759c304daf68d709b41b781a',1,'neorv32_twd_t::CTRL'],['../structneorv32__twi__t.html#a148a1c681a2632881b25ee41652b5304',1,'neorv32_twi_t::CTRL'],['../structneorv32__uart__t.html#a0a6227aeea38335d2b9a9da46b35451b',1,'neorv32_uart_t::CTRL'],['../structneorv32__wdt__t.html#a6ae41e28d08b0f06118c499f52b56f41',1,'neorv32_wdt_t::CTRL'],['../structneorv32__xip__t.html#a7ead9d6a4f784d766a6b2755c6d35235',1,'neorv32_xip_t::CTRL']]], + ['cypher_5fdata_5fhw_252',['cypher_data_hw',['../demo__cfu_2main_8c.html#a9ad2780a4cfe0d9cb4f1a846a92063ae',1,'main.c']]], + ['cypher_5fdata_5fsw_253',['cypher_data_sw',['../demo__cfu_2main_8c.html#a33b2d9298edf94c5961e67a59c371d00',1,'main.c']]] +]; diff --git a/sw/search/all_a.js b/sw/search/all_a.js new file mode 100644 index 0000000000..c454da2b15 --- /dev/null +++ b/sw/search/all_a.js @@ -0,0 +1,50 @@ +var searchData= +[ + ['data_0',['DATA',['../structneorv32__crc__t.html#a47f286612848f597859aaef0d2d5da4d',1,'neorv32_crc_t::DATA'],['../structneorv32__neoled__t.html#a995fb1d63a9dfb3f20d715932781c1de',1,'neorv32_neoled_t::DATA'],['../structneorv32__sdi__t.html#a3ea6903c0924d0a1b633b6a2b0ae44f1',1,'neorv32_sdi_t::DATA'],['../structneorv32__slink__t.html#a8af7d4ea9787cf94c599c82133c6aa74',1,'neorv32_slink_t::DATA'],['../structneorv32__spi__t.html#a3901bad351213e34820197a33d589f1e',1,'neorv32_spi_t::DATA'],['../structneorv32__trng__t.html#acf3f269a8097b731cd82e0d6660e16b5',1,'neorv32_trng_t::DATA'],['../structneorv32__twd__t.html#a0ce59594f8c1aa8cffc78a384c6f6257',1,'neorv32_twd_t::DATA'],['../structneorv32__uart__t.html#a38eec82aae9ed522a0d2afb9a9560036',1,'neorv32_uart_t::DATA']]], + ['data_5fblock_1',['data_block',['../demo__emulate__unaligned_2main_8c.html#a556f675911f865ead06c36072b1b9c3b',1,'main.c']]], + ['data_5fhi_2',['DATA_HI',['../structneorv32__xip__t.html#a516ab9c075ef6d1fb741e243db7703b2',1,'neorv32_xip_t']]], + ['data_5flast_3',['DATA_LAST',['../structneorv32__slink__t.html#ada8f10141d2161b83a5a367722ed6a77',1,'neorv32_slink_t']]], + ['data_5flo_4',['DATA_LO',['../structneorv32__xip__t.html#ad64048bb3544e712b1c668c2ef343ccb',1,'neorv32_xip_t']]], + ['data_5fnum_5',['DATA_NUM',['../demo__cfu_2main_8c.html#ac637695e266f3af7799e352b374412ad',1,'main.c']]], + ['date_5ft_6',['date_t',['../structdate__t.html',1,'']]], + ['day_7',['day',['../structdate__t.html#a482ad87226bae7841dfec63e035aeace',1,'date_t']]], + ['dcmd_8',['DCMD',['../structneorv32__onewire__t.html#ab8f4e61ac777c55cd1e5805eb03d3d4b',1,'neorv32_onewire_t::DCMD'],['../structneorv32__twi__t.html#ae311e0827bdb178c6dd8c4535b80d5cb',1,'neorv32_twi_t::DCMD']]], + ['debug_5finfo_9',['DEBUG_INFO',['../demo__emulate__unaligned_2main_8c.html#a4407b4d6eae3ba7fe9538b1242a7e165',1,'main.c']]], + ['dma_5fcmd_5fb2b_10',['DMA_CMD_B2B',['../neorv32__dma_8h.html#a5e01d4454c97eb8e4ecd1455090bbfa9',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fb2sw_11',['DMA_CMD_B2SW',['../neorv32__dma_8h.html#adfecb3debff251070e4f6eb809412129',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fb2uw_12',['DMA_CMD_B2UW',['../neorv32__dma_8h.html#aeb63f99217f14d1ddde35c1f6c104e72',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fdst_5fconst_13',['DMA_CMD_DST_CONST',['../neorv32__dma_8h.html#a6a0ce532aad39e6489e9d52bcb6f4cd2',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fdst_5finc_14',['DMA_CMD_DST_INC',['../neorv32__dma_8h.html#a61caa2602c6b148af55d990e3c0ae6be',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fendian_15',['DMA_CMD_ENDIAN',['../neorv32__dma_8h.html#a18fb7faa0a35f562821ca854d7c648b4',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fsrc_5fconst_16',['DMA_CMD_SRC_CONST',['../neorv32__dma_8h.html#ae380022d8b8fb70da91f0892f2bc32c8',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fsrc_5finc_17',['DMA_CMD_SRC_INC',['../neorv32__dma_8h.html#acc081d58b53d1eddd2bff35b128d7da2',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fw2w_18',['DMA_CMD_W2W',['../neorv32__dma_8h.html#a13a16ba8d6daf9c82312bf4d392d15a8',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fauto_19',['DMA_CTRL_AUTO',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fbusy_20',['DMA_CTRL_BUSY',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fdone_21',['DMA_CTRL_DONE',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fen_22',['DMA_CTRL_EN',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ferror_5frd_23',['DMA_CTRL_ERROR_RD',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ferror_5fwr_24',['DMA_CTRL_ERROR_WR',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffence_25',['DMA_CTRL_FENCE',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffirq_5fsel_5flsb_26',['DMA_CTRL_FIRQ_SEL_LSB',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffirq_5fsel_5fmsb_27',['DMA_CTRL_FIRQ_SEL_MSB',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffirq_5ftype_28',['DMA_CTRL_FIRQ_TYPE',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe',1,'neorv32_dma.h']]], + ['dma_5ffirq_5fenable_29',['DMA_FIRQ_ENABLE',['../neorv32_8h.html#ace46f95dec73b33bf2535eb653bf8f65',1,'neorv32.h']]], + ['dma_5ffirq_5fhandler_30',['dma_firq_handler',['../demo__dma_2main_8c.html#aefcc5abb86a652587ff69be120a66487',1,'main.c']]], + ['dma_5ffirq_5fpending_31',['DMA_FIRQ_PENDING',['../neorv32_8h.html#a1fa2b25383e6d05cf26f3517091ddbbf',1,'neorv32.h']]], + ['dma_5frte_5fid_32',['DMA_RTE_ID',['../neorv32_8h.html#a568b54ba7dfdae736d8d685dc4d32113',1,'neorv32.h']]], + ['dma_5fstatus_5fbusy_33',['DMA_STATUS_BUSY',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d',1,'neorv32_dma.h']]], + ['dma_5fstatus_5ferr_5frd_34',['DMA_STATUS_ERR_RD',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492',1,'neorv32_dma.h']]], + ['dma_5fstatus_5ferr_5fwr_35',['DMA_STATUS_ERR_WR',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8',1,'neorv32_dma.h']]], + ['dma_5fstatus_5fidle_36',['DMA_STATUS_IDLE',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f',1,'neorv32_dma.h']]], + ['dma_5ftrap_5fcode_37',['DMA_TRAP_CODE',['../neorv32_8h.html#ad2e81443af8a4ce2db3a4e3c1a8fb784',1,'neorv32.h']]], + ['dma_5fttype_5fdst_5finc_38',['DMA_TTYPE_DST_INC',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da',1,'neorv32_dma.h']]], + ['dma_5fttype_5fendian_39',['DMA_TTYPE_ENDIAN',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802',1,'neorv32_dma.h']]], + ['dma_5fttype_5fnum_5flsb_40',['DMA_TTYPE_NUM_LSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450',1,'neorv32_dma.h']]], + ['dma_5fttype_5fnum_5fmsb_41',['DMA_TTYPE_NUM_MSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd',1,'neorv32_dma.h']]], + ['dma_5fttype_5fqsel_5flsb_42',['DMA_TTYPE_QSEL_LSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2',1,'neorv32_dma.h']]], + ['dma_5fttype_5fqsel_5fmsb_43',['DMA_TTYPE_QSEL_MSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5',1,'neorv32_dma.h']]], + ['dma_5fttype_5fsrc_5finc_44',['DMA_TTYPE_SRC_INC',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec',1,'neorv32_dma.h']]], + ['dst_5fbase_45',['DST_BASE',['../structneorv32__dma__t.html#aee8a6cf3cbd9fe3c5995f046ffb9a1c0',1,'neorv32_dma_t']]], + ['dump_5fmemory_46',['dump_memory',['../bus__explorer_2main_8c.html#a6405739c6012158151eb082c31c312da',1,'main.c']]] +]; diff --git a/sw/search/all_b.js b/sw/search/all_b.js new file mode 100644 index 0000000000..a12d091e74 --- /dev/null +++ b/sw/search/all_b.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['ecosystem_0',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['eie_1',['EIE',['../structneorv32__xirq__t.html#aef3c2b491207abd68bf6392f97096a74',1,'neorv32_xirq_t']]], + ['error_5fchecksum_2',['ERROR_CHECKSUM',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a471ebe6c0766abc6fa4e82a09bfdb985',1,'bootloader.c']]], + ['error_5fcodes_5fenum_3',['ERROR_CODES_enum',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088',1,'bootloader.c']]], + ['error_5fflash_4',['ERROR_FLASH',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a684d6723fa25e7651e13d99fb249363c',1,'bootloader.c']]], + ['error_5fmessage_5',['error_message',['../bootloader_8c.html#a6fea855ffe2fa0cd5ea9f98c0d5adc4d',1,'bootloader.c']]], + ['error_5fsignature_6',['ERROR_SIGNATURE',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088ad41014563cb3ca69ab69b94d43e97caa',1,'bootloader.c']]], + ['error_5fsize_7',['ERROR_SIZE',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a2d77ed1c715fb969a1faa01c71625f2d',1,'bootloader.c']]], + ['esc_8',['ESC',['../structneorv32__xirq__t.html#ae4f7f3f41210ff329b6f82d5dfada88a',1,'neorv32_xirq_t']]], + ['exe_5favailable_9',['exe_available',['../bootloader_8c.html#a0f9fcfdf758260b9b79b6eda063dd87a',1,'bootloader.c']]], + ['exe_5fbase_5faddr_10',['EXE_BASE_ADDR',['../bootloader_8c.html#a18936dc79b9e5aa84df016b046a6b977',1,'bootloader.c']]], + ['exe_5foffset_5fchecksum_11',['EXE_OFFSET_CHECKSUM',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febabc27a855096a70dca0f8bc148a123be4',1,'bootloader.c']]], + ['exe_5foffset_5fdata_12',['EXE_OFFSET_DATA',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febaea032c54a21057710ef2021638972ce6',1,'bootloader.c']]], + ['exe_5foffset_5fsignature_13',['EXE_OFFSET_SIGNATURE',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feba61100996f309c45b8b628ade2e3acc7f',1,'bootloader.c']]], + ['exe_5foffset_5fsize_14',['EXE_OFFSET_SIZE',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febacc430caa4bff2fef4568c757893fe2fe',1,'bootloader.c']]], + ['exe_5fsignature_15',['EXE_SIGNATURE',['../bootloader_8c.html#a0035ad41f622dbfc2412318a8ed39257',1,'EXE_SIGNATURE:&#160;bootloader.c'],['../demo__xip_2main_8c.html#a0035ad41f622dbfc2412318a8ed39257',1,'EXE_SIGNATURE:&#160;main.c']]], + ['exe_5fstream_5fflash_16',['EXE_STREAM_FLASH',['../bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83a98526cd8f81d570c57d98193b32cf114',1,'bootloader.c']]], + ['exe_5fstream_5fsource_5fenum_17',['EXE_STREAM_SOURCE_enum',['../bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83',1,'bootloader.c']]], + ['exe_5fstream_5fuart_18',['EXE_STREAM_UART',['../bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83ab149261ddf3f08e44e9d2538e384f58f',1,'bootloader.c']]] +]; diff --git a/sw/search/all_c.js b/sw/search/all_c.js new file mode 100644 index 0000000000..e0b5a3e998 --- /dev/null +++ b/sw/search/all_c.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['features_0',['Features',['../md_README.html#autotoc_md4',1,'2. Features'],['../md_README.html#autotoc_md2',1,'Key Features']]], + ['flash_5fabytes_1',['FLASH_ABYTES',['../demo__xip_2main_8c.html#af9b3c37c806499fc435302f5bce6a122',1,'main.c']]], + ['flash_5fbase_2',['FLASH_BASE',['../demo__xip_2main_8c.html#a23a9099a5f8fc9c6e253c0eecb2be8db',1,'main.c']]], + ['flash_5fsreg_5fbusy_3',['FLASH_SREG_BUSY',['../bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa133cd87673ce9a612da494583e03dae9',1,'bootloader.c']]], + ['flash_5fsreg_5fwel_4',['FLASH_SREG_WEL',['../bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa22e8c983d74430ea0930e37781e88bf9',1,'bootloader.c']]], + ['float_5fconv_5ft_5',['float_conv_t',['../unionfloat__conv__t.html',1,'']]], + ['float_5fvalue_6',['float_value',['../unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788',1,'float_conv_t']]], + ['fpga_20implementation_20results_7',['3. FPGA Implementation Results',['../md_README.html#autotoc_md5',1,'']]], + ['framework_20a_20the_20software_20ecosystem_8',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]] +]; diff --git a/sw/search/all_d.js b/sw/search/all_d.js new file mode 100644 index 0000000000..324d1d8a61 --- /dev/null +++ b/sw/search/all_d.js @@ -0,0 +1,32 @@ +var searchData= +[ + ['gen_5fdelay_0',['GEN_DELAY',['../game__of__life_2main_8c.html#a3f33bf77abbf35c245956489f8f7e3a7',1,'main.c']]], + ['generate_5fhistogram_1',['generate_histogram',['../demo__trng_2main_8c.html#a4e49f5e3feb4bd5755f919cd3310b506',1,'main.c']]], + ['get_20it_20started_2',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]], + ['get_5fcell_3',['get_cell',['../game__of__life_2main_8c.html#a6bd541a19c62ea9ec620eaad3f218d16',1,'main.c']]], + ['get_5fexe_4',['get_exe',['../bootloader_8c.html#ac18819795adb6dbdd52b0587e7fbb569',1,'bootloader.c']]], + ['get_5fexe_5fword_5',['get_exe_word',['../bootloader_8c.html#ac58d9f7dc79a549bde1cb50f619c19af',1,'bootloader.c']]], + ['get_5fneighborhood_6',['get_neighborhood',['../game__of__life_2main_8c.html#a977190adaa24a3f49fca1540b51d25a0',1,'main.c']]], + ['get_5ftest_5fvector_7',['get_test_vector',['../float__corner__test_2main_8c.html#a73c70bd0fb6d695cb113eaeb50923e3e',1,'get_test_vector(void):&#160;main.c'],['../floating__point__test_2main_8c.html#a73c70bd0fb6d695cb113eaeb50923e3e',1,'get_test_vector(void):&#160;main.c']]], + ['getting_20started_8',['5. Getting Started',['../md_README.html#autotoc_md7',1,'']]], + ['getting_5fexe_9',['getting_exe',['../bootloader_8c.html#a5fa6b109bf211d1768f84c9d38eef240',1,'bootloader.c']]], + ['github_20io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_10',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['github_20io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_11',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['github_20io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_12',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['github_20io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_13',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['github_20io_20neorv32_20ug_20user_20guide_20a_20let_20s_20get_20it_20started_14',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]], + ['global_5ftrap_5fhandler_15',['global_trap_handler',['../processor__check_2main_8c.html#a9a64ce0ee69c4c32cecc8b2b2746604c',1,'main.c']]], + ['gptmr_5fctrl_5fen_16',['GPTMR_CTRL_EN',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5firq_5fclr_17',['GPTMR_CTRL_IRQ_CLR',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5firq_5fpnd_18',['GPTMR_CTRL_IRQ_PND',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fmode_19',['GPTMR_CTRL_MODE',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fprsc0_20',['GPTMR_CTRL_PRSC0',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fprsc1_21',['GPTMR_CTRL_PRSC1',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fprsc2_22',['GPTMR_CTRL_PRSC2',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833',1,'neorv32_gptmr.h']]], + ['gptmr_5ffirq_5fenable_23',['GPTMR_FIRQ_ENABLE',['../neorv32_8h.html#a0a59186908b498cb92273b7767966e26',1,'neorv32.h']]], + ['gptmr_5ffirq_5fhandler_24',['gptmr_firq_handler',['../demo__gptmr_2main_8c.html#a2bd89412466a65329711bfd5c29199c9',1,'main.c']]], + ['gptmr_5ffirq_5fpending_25',['GPTMR_FIRQ_PENDING',['../neorv32_8h.html#a4a3164d123ddddd07750f868e67d82d8',1,'neorv32.h']]], + ['gptmr_5frte_5fid_26',['GPTMR_RTE_ID',['../neorv32_8h.html#aac38deeef36de0a474ab238a3054f860',1,'neorv32.h']]], + ['gptmr_5ftrap_5fcode_27',['GPTMR_TRAP_CODE',['../neorv32_8h.html#a445543c36d1f78477aa8ea4841c720a1',1,'neorv32.h']]], + ['guide_20a_20let_20s_20get_20it_20started_28',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]] +]; diff --git a/sw/search/all_e.js b/sw/search/all_e.js new file mode 100644 index 0000000000..11e235521b --- /dev/null +++ b/sw/search/all_e.js @@ -0,0 +1,29 @@ +var searchData= +[ + ['hexdump_0',['hexdump',['../bus__explorer_2main_8c.html#a02640a99db37b8d92b9edffc9720a210',1,'main.c']]], + ['hours_1',['hours',['../structdate__t.html#a39a23695634a2814d827984f4eea54eb',1,'date_t']]], + ['hpmcnt_5fevent_5fbranch_2',['HPMCNT_EVENT_BRANCH',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fbranched_3',['HPMCNT_EVENT_BRANCHED',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fcompr_4',['HPMCNT_EVENT_COMPR',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fcy_5',['HPMCNT_EVENT_CY',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fir_6',['HPMCNT_EVENT_IR',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fload_7',['HPMCNT_EVENT_LOAD',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fstore_8',['HPMCNT_EVENT_STORE',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5ftm_9',['HPMCNT_EVENT_TM',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5ftrap_10',['HPMCNT_EVENT_TRAP',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fwait_5falu_11',['HPMCNT_EVENT_WAIT_ALU',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fwait_5fdis_12',['HPMCNT_EVENT_WAIT_DIS',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fwait_5flsu_13',['HPMCNT_EVENT_WAIT_LSU',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b',1,'neorv32_cpu_csr.h']]], + ['href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_14',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_15',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['href_20https_3a_20stnolting_20github_20io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_16',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_17',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['href_20https_3a_20stnolting_20github_20io_20neorv32_20ug_20user_20guide_20a_20let_20s_20get_20it_20started_18',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]], + ['hsv2rgb_19',['hsv2rgb',['../demo__neopixel_2main_8c.html#a2736ec755f9e10c80bf66f727f870ffc',1,'main.c']]], + ['https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_20',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_21',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['https_3a_20stnolting_20github_20io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_22',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['https_3a_20stnolting_20github_20io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_23',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['https_3a_20stnolting_20github_20io_20neorv32_20ug_20user_20guide_20a_20let_20s_20get_20it_20started_24',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]], + ['hw_5fbreakpoint_5fhandler_25',['hw_breakpoint_handler',['../processor__check_2main_8c.html#a31d9e432f6a368e6222f5e0907eeb6f4',1,'main.c']]] +]; diff --git a/sw/search/all_f.js b/sw/search/all_f.js new file mode 100644 index 0000000000..ed0bc11256 --- /dev/null +++ b/sw/search/all_f.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['implementation_20results_0',['3. FPGA Implementation Results',['../md_README.html#autotoc_md5',1,'']]], + ['input_1',['INPUT',['../structneorv32__gpio__t.html#a208ee622d43fee3574072f19a98c8808',1,'neorv32_gpio_t']]], + ['input_5fdata_2',['input_data',['../demo__cfu_2main_8c.html#a2e2ccb9136736a673dbef71f207e97a0',1,'main.c']]], + ['introduction_3',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_4',[':abacus: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu&quot; &gt;NEORV32 CPU&lt;/a&gt; - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_5',[':desktop_computer: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_neorv32_processor_soc&quot; &gt;NEORV32 Processor&lt;/a&gt; - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_6',[':mag: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_overview&quot; &gt;NEORV32 Project&lt;/a&gt; - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_7',[':floppy_disk: &lt;a href=&quot;https://stnolting.github.io/neorv32/#_software_framework&quot; &gt;Software Framework&lt;/a&gt; - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['io_20neorv32_20ug_20user_20guide_20a_20let_20s_20get_20it_20started_8',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]], + ['io_5fbase_5faddress_9',['IO_BASE_ADDRESS',['../neorv32_8h.html#a1eb0cb7fed7e154e15cb4009880a879c',1,'neorv32.h']]], + ['it_20started_10',[':rocket: &lt;a href=&quot;https://stnolting.github.io/neorv32/ug/&quot; &gt;User Guide&lt;/a&gt; - Let&apos;s Get It Started',['../md_README.html#autotoc_md12',1,'']]] +]; diff --git a/sw/search/classes_0.js b/sw/search/classes_0.js new file mode 100644 index 0000000000..17705b744a --- /dev/null +++ b/sw/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['date_5ft_0',['date_t',['../structdate__t.html',1,'']]] +]; diff --git a/sw/search/classes_1.js b/sw/search/classes_1.js new file mode 100644 index 0000000000..089b78ab05 --- /dev/null +++ b/sw/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['float_5fconv_5ft_0',['float_conv_t',['../unionfloat__conv__t.html',1,'']]] +]; diff --git a/sw/search/classes_2.js b/sw/search/classes_2.js new file mode 100644 index 0000000000..62d9900bb1 --- /dev/null +++ b/sw/search/classes_2.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['neorv32_5fcfs_5ft_0',['neorv32_cfs_t',['../structneorv32__cfs__t.html',1,'']]], + ['neorv32_5fclint_5ft_1',['neorv32_clint_t',['../structneorv32__clint__t.html',1,'']]], + ['neorv32_5fcrc_5ft_2',['neorv32_crc_t',['../structneorv32__crc__t.html',1,'']]], + ['neorv32_5fdma_5ft_3',['neorv32_dma_t',['../structneorv32__dma__t.html',1,'']]], + ['neorv32_5fgpio_5ft_4',['neorv32_gpio_t',['../structneorv32__gpio__t.html',1,'']]], + ['neorv32_5fgptmr_5ft_5',['neorv32_gptmr_t',['../structneorv32__gptmr__t.html',1,'']]], + ['neorv32_5fneoled_5ft_6',['neorv32_neoled_t',['../structneorv32__neoled__t.html',1,'']]], + ['neorv32_5fonewire_5ft_7',['neorv32_onewire_t',['../structneorv32__onewire__t.html',1,'']]], + ['neorv32_5fpwm_5ft_8',['neorv32_pwm_t',['../structneorv32__pwm__t.html',1,'']]], + ['neorv32_5fsdi_5ft_9',['neorv32_sdi_t',['../structneorv32__sdi__t.html',1,'']]], + ['neorv32_5fslink_5ft_10',['neorv32_slink_t',['../structneorv32__slink__t.html',1,'']]], + ['neorv32_5fspi_5ft_11',['neorv32_spi_t',['../structneorv32__spi__t.html',1,'']]], + ['neorv32_5fsysinfo_5ft_12',['neorv32_sysinfo_t',['../structneorv32__sysinfo__t.html',1,'']]], + ['neorv32_5ftrng_5ft_13',['neorv32_trng_t',['../structneorv32__trng__t.html',1,'']]], + ['neorv32_5ftwd_5ft_14',['neorv32_twd_t',['../structneorv32__twd__t.html',1,'']]], + ['neorv32_5ftwi_5ft_15',['neorv32_twi_t',['../structneorv32__twi__t.html',1,'']]], + ['neorv32_5fuart_5ft_16',['neorv32_uart_t',['../structneorv32__uart__t.html',1,'']]], + ['neorv32_5fwdt_5ft_17',['neorv32_wdt_t',['../structneorv32__wdt__t.html',1,'']]], + ['neorv32_5fxip_5ft_18',['neorv32_xip_t',['../structneorv32__xip__t.html',1,'']]], + ['neorv32_5fxirq_5ft_19',['neorv32_xirq_t',['../structneorv32__xirq__t.html',1,'']]] +]; diff --git a/sw/search/classes_3.js b/sw/search/classes_3.js new file mode 100644 index 0000000000..6ef84e426d --- /dev/null +++ b/sw/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['record_0',['record',['../structrecord.html',1,'']]] +]; diff --git a/sw/search/classes_4.js b/sw/search/classes_4.js new file mode 100644 index 0000000000..8321706b36 --- /dev/null +++ b/sw/search/classes_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['subwords16_5ft_0',['subwords16_t',['../unionsubwords16__t.html',1,'']]], + ['subwords32_5ft_1',['subwords32_t',['../unionsubwords32__t.html',1,'']]], + ['subwords64_5ft_2',['subwords64_t',['../unionsubwords64__t.html',1,'']]] +]; diff --git a/sw/search/classes_5.js b/sw/search/classes_5.js new file mode 100644 index 0000000000..1dc259cfb2 --- /dev/null +++ b/sw/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['t_5fneorv32_5fspi_0',['t_neorv32_spi',['../structt__neorv32__spi.html',1,'']]] +]; diff --git a/sw/search/close.svg b/sw/search/close.svg new file mode 100644 index 0000000000..337d6cc132 --- /dev/null +++ b/sw/search/close.svg @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + viewBox="0 0 11 11" + height="11" + width="11" + id="svg2" + version="1.1"> + <defs + id="defs6" /> + <path + id="path12" + d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z " + style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" /> +</svg> diff --git a/sw/search/defines_0.js b/sw/search/defines_0.js new file mode 100644 index 0000000000..33ed6086d0 --- /dev/null +++ b/sw/search/defines_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['auto_5fboot_5ftimeout_0',['AUTO_BOOT_TIMEOUT',['../bootloader_8c.html#af6fcb607a9c320da869b72aa30893a69',1,'bootloader.c']]] +]; diff --git a/sw/search/defines_1.js b/sw/search/defines_1.js new file mode 100644 index 0000000000..d381dfcc85 --- /dev/null +++ b/sw/search/defines_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['baud_5frate_0',['BAUD_RATE',['../atomic__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../bus__explorer_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__cfs_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__cfu_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__crc_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__dma_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__emulate__unaligned_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__gptmr_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__hpm_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__neopixel_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__newlib_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__onewire_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__pwm_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__sdi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__slink_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__spi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__spi__irq_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__trng_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__twi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__wdt_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__xip_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../demo__xirq_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../float__corner__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../floating__point__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../game__of__life_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c'],['../hello__world_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE:&#160;main.c']]], + ['buffer_5fsize_1',['BUFFER_SIZE',['../demo__xip_2main_8c.html#a6b20d41d6252e9871430c242cb1a56e7',1,'main.c']]] +]; diff --git a/sw/search/defines_10.js b/sw/search/defines_10.js new file mode 100644 index 0000000000..b96b4efdea --- /dev/null +++ b/sw/search/defines_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['wdt_5fpassword_0',['WDT_PASSWORD',['../neorv32__wdt_8h.html#af2a2bd9c74bdba1b46bd92025bd00ab6',1,'neorv32_wdt.h']]], + ['wdt_5ftimeout_5fs_1',['WDT_TIMEOUT_S',['../demo__wdt_2main_8c.html#a01af3905e60b1869f669315f4a1297f5',1,'main.c']]] +]; diff --git a/sw/search/defines_11.js b/sw/search/defines_11.js new file mode 100644 index 0000000000..bb6db3ec9b --- /dev/null +++ b/sw/search/defines_11.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['xip_5fclk_5fprsc_0',['XIP_CLK_PRSC',['../demo__xip_2main_8c.html#aec72efe062dbdb149ae6d4f8b1be6793',1,'main.c']]], + ['xip_5fen_1',['XIP_EN',['../bootloader_8c.html#a2cf31934b909299fb93bb5eebdbc7c9e',1,'bootloader.c']]], + ['xip_5fmem_5fbase_5faddress_2',['XIP_MEM_BASE_ADDRESS',['../neorv32_8h.html#aa01bea676e878a9e87ca10ce2d91e51f',1,'neorv32.h']]], + ['xirq_5ffirq_5fenable_3',['XIRQ_FIRQ_ENABLE',['../neorv32_8h.html#afe0cb262d517c7da73d6b5dc78886334',1,'neorv32.h']]], + ['xirq_5ffirq_5fpending_4',['XIRQ_FIRQ_PENDING',['../neorv32_8h.html#a866768963f8648363dce40de9f34d61b',1,'neorv32.h']]], + ['xirq_5frte_5fid_5',['XIRQ_RTE_ID',['../neorv32_8h.html#a95387d3482ec8e5c1d734805fdf64fa5',1,'neorv32.h']]], + ['xirq_5ftrap_5fcode_6',['XIRQ_TRAP_CODE',['../neorv32_8h.html#a16b9a7444833b5581df073661deb8f3a',1,'neorv32.h']]], + ['xstr_7',['xstr',['../bootloader_8c.html#aff6b53dd58cea43d24393a9a2f79e772',1,'bootloader.c']]], + ['xtea_5frounds_8',['XTEA_ROUNDS',['../demo__cfu_2main_8c.html#a36801eebef583b6c3438709144834e3e',1,'main.c']]] +]; diff --git a/sw/search/defines_2.js b/sw/search/defines_2.js new file mode 100644 index 0000000000..a05b8ec2f4 --- /dev/null +++ b/sw/search/defines_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['cell_5falive_0',['CELL_ALIVE',['../game__of__life_2main_8c.html#afa6488273e16792d9c3da5e40e3f572d',1,'main.c']]], + ['cell_5fdead_1',['CELL_DEAD',['../game__of__life_2main_8c.html#abe6bebcf1cb4f5b4d522c1706eb48663',1,'main.c']]], + ['cfs_5ffirq_5fenable_2',['CFS_FIRQ_ENABLE',['../neorv32_8h.html#ace79ee46daf3a1b689d9fe79dfcd6627',1,'neorv32.h']]], + ['cfs_5ffirq_5fpending_3',['CFS_FIRQ_PENDING',['../neorv32_8h.html#aae182648a2c23d070b9db0295388e001',1,'neorv32.h']]], + ['cfs_5frte_5fid_4',['CFS_RTE_ID',['../neorv32_8h.html#a095f41fbefaa7acc1bfdd65cd3ce06ea',1,'neorv32.h']]], + ['cfs_5ftrap_5fcode_5',['CFS_TRAP_CODE',['../neorv32_8h.html#aae6b2ae3fba20ff80bfb59735f179c26',1,'neorv32.h']]] +]; diff --git a/sw/search/defines_3.js b/sw/search/defines_3.js new file mode 100644 index 0000000000..df151d2df5 --- /dev/null +++ b/sw/search/defines_3.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['data_5fnum_0',['DATA_NUM',['../demo__cfu_2main_8c.html#ac637695e266f3af7799e352b374412ad',1,'main.c']]], + ['debug_5finfo_1',['DEBUG_INFO',['../demo__emulate__unaligned_2main_8c.html#a4407b4d6eae3ba7fe9538b1242a7e165',1,'main.c']]], + ['dma_5fcmd_5fb2b_2',['DMA_CMD_B2B',['../neorv32__dma_8h.html#a5e01d4454c97eb8e4ecd1455090bbfa9',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fb2sw_3',['DMA_CMD_B2SW',['../neorv32__dma_8h.html#adfecb3debff251070e4f6eb809412129',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fb2uw_4',['DMA_CMD_B2UW',['../neorv32__dma_8h.html#aeb63f99217f14d1ddde35c1f6c104e72',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fdst_5fconst_5',['DMA_CMD_DST_CONST',['../neorv32__dma_8h.html#a6a0ce532aad39e6489e9d52bcb6f4cd2',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fdst_5finc_6',['DMA_CMD_DST_INC',['../neorv32__dma_8h.html#a61caa2602c6b148af55d990e3c0ae6be',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fendian_7',['DMA_CMD_ENDIAN',['../neorv32__dma_8h.html#a18fb7faa0a35f562821ca854d7c648b4',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fsrc_5fconst_8',['DMA_CMD_SRC_CONST',['../neorv32__dma_8h.html#ae380022d8b8fb70da91f0892f2bc32c8',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fsrc_5finc_9',['DMA_CMD_SRC_INC',['../neorv32__dma_8h.html#acc081d58b53d1eddd2bff35b128d7da2',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fw2w_10',['DMA_CMD_W2W',['../neorv32__dma_8h.html#a13a16ba8d6daf9c82312bf4d392d15a8',1,'neorv32_dma.h']]], + ['dma_5ffirq_5fenable_11',['DMA_FIRQ_ENABLE',['../neorv32_8h.html#ace46f95dec73b33bf2535eb653bf8f65',1,'neorv32.h']]], + ['dma_5ffirq_5fpending_12',['DMA_FIRQ_PENDING',['../neorv32_8h.html#a1fa2b25383e6d05cf26f3517091ddbbf',1,'neorv32.h']]], + ['dma_5frte_5fid_13',['DMA_RTE_ID',['../neorv32_8h.html#a568b54ba7dfdae736d8d685dc4d32113',1,'neorv32.h']]], + ['dma_5ftrap_5fcode_14',['DMA_TRAP_CODE',['../neorv32_8h.html#ad2e81443af8a4ce2db3a4e3c1a8fb784',1,'neorv32.h']]] +]; diff --git a/sw/search/defines_4.js b/sw/search/defines_4.js new file mode 100644 index 0000000000..d208589ed0 --- /dev/null +++ b/sw/search/defines_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['exe_5fbase_5faddr_0',['EXE_BASE_ADDR',['../bootloader_8c.html#a18936dc79b9e5aa84df016b046a6b977',1,'bootloader.c']]], + ['exe_5fsignature_1',['EXE_SIGNATURE',['../bootloader_8c.html#a0035ad41f622dbfc2412318a8ed39257',1,'EXE_SIGNATURE:&#160;bootloader.c'],['../demo__xip_2main_8c.html#a0035ad41f622dbfc2412318a8ed39257',1,'EXE_SIGNATURE:&#160;main.c']]] +]; diff --git a/sw/search/defines_5.js b/sw/search/defines_5.js new file mode 100644 index 0000000000..c614565b25 --- /dev/null +++ b/sw/search/defines_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['flash_5fabytes_0',['FLASH_ABYTES',['../demo__xip_2main_8c.html#af9b3c37c806499fc435302f5bce6a122',1,'main.c']]], + ['flash_5fbase_1',['FLASH_BASE',['../demo__xip_2main_8c.html#a23a9099a5f8fc9c6e253c0eecb2be8db',1,'main.c']]] +]; diff --git a/sw/search/defines_6.js b/sw/search/defines_6.js new file mode 100644 index 0000000000..59cec1265e --- /dev/null +++ b/sw/search/defines_6.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['gen_5fdelay_0',['GEN_DELAY',['../game__of__life_2main_8c.html#a3f33bf77abbf35c245956489f8f7e3a7',1,'main.c']]], + ['gptmr_5ffirq_5fenable_1',['GPTMR_FIRQ_ENABLE',['../neorv32_8h.html#a0a59186908b498cb92273b7767966e26',1,'neorv32.h']]], + ['gptmr_5ffirq_5fpending_2',['GPTMR_FIRQ_PENDING',['../neorv32_8h.html#a4a3164d123ddddd07750f868e67d82d8',1,'neorv32.h']]], + ['gptmr_5frte_5fid_3',['GPTMR_RTE_ID',['../neorv32_8h.html#aac38deeef36de0a474ab238a3054f860',1,'neorv32.h']]], + ['gptmr_5ftrap_5fcode_4',['GPTMR_TRAP_CODE',['../neorv32_8h.html#a445543c36d1f78477aa8ea4841c720a1',1,'neorv32.h']]] +]; diff --git a/sw/search/defines_7.js b/sw/search/defines_7.js new file mode 100644 index 0000000000..d6cd67517a --- /dev/null +++ b/sw/search/defines_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['io_5fbase_5faddress_0',['IO_BASE_ADDRESS',['../neorv32_8h.html#a1eb0cb7fed7e154e15cb4009880a879c',1,'neorv32.h']]] +]; diff --git a/sw/search/defines_8.js b/sw/search/defines_8.js new file mode 100644 index 0000000000..8ee2799d94 --- /dev/null +++ b/sw/search/defines_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['max_5fduty_0',['MAX_DUTY',['../demo__pwm_2main_8c.html#a2351f30f0895b552e5fe9944d69e645d',1,'main.c']]], + ['max_5fintensity_1',['MAX_INTENSITY',['../demo__neopixel_2main_8c.html#a1d1d5e7ff16f25b68fdf779befd298f7',1,'main.c']]] +]; diff --git a/sw/search/defines_9.js b/sw/search/defines_9.js new file mode 100644 index 0000000000..99c8dbbf51 --- /dev/null +++ b/sw/search/defines_9.js @@ -0,0 +1,61 @@ +var searchData= +[ + ['neoled_5ffirq_5fenable_0',['NEOLED_FIRQ_ENABLE',['../neorv32_8h.html#a8d0409818600c0b2acfe8253e8f027b8',1,'neorv32.h']]], + ['neoled_5ffirq_5fpending_1',['NEOLED_FIRQ_PENDING',['../neorv32_8h.html#aded7d7f5f4ba3a6d90f9a29e62a8cfab',1,'neorv32.h']]], + ['neoled_5frte_5fid_2',['NEOLED_RTE_ID',['../neorv32_8h.html#aca6cfc3f580c4dfe1e213009ee450c58',1,'neorv32.h']]], + ['neoled_5ftrap_5fcode_3',['NEOLED_TRAP_CODE',['../neorv32_8h.html#ab4a2ac455d7426992de6877ea7325f21',1,'neorv32.h']]], + ['neorv32_5fbootrom_5fbase_4',['NEORV32_BOOTROM_BASE',['../neorv32_8h.html#a9af9742516d8f0e43cee33882ea41157',1,'neorv32.h']]], + ['neorv32_5fcfs_5',['NEORV32_CFS',['../neorv32__cfs_8h.html#a6c101b306bd096f78d351e39b308d3e2',1,'neorv32_cfs.h']]], + ['neorv32_5fcfs_5fbase_6',['NEORV32_CFS_BASE',['../neorv32_8h.html#a41d6f97daef61641da96b9f72f6b272f',1,'neorv32.h']]], + ['neorv32_5fcfu_5fr3_5finstr_7',['neorv32_cfu_r3_instr',['../neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c',1,'neorv32_cpu_cfu.h']]], + ['neorv32_5fcfu_5fr4_5finstr_8',['neorv32_cfu_r4_instr',['../neorv32__cpu__cfu_8h.html#a046a640f7f4a7b1b99a824fb325e2079',1,'neorv32_cpu_cfu.h']]], + ['neorv32_5fclint_9',['NEORV32_CLINT',['../neorv32__clint_8h.html#aa85ecb43f16fa798c5e583f08d29ca3e',1,'neorv32_clint.h']]], + ['neorv32_5fclint_5fbase_10',['NEORV32_CLINT_BASE',['../neorv32_8h.html#ab1522f52c3c24ba2245dfa2783932d42',1,'neorv32.h']]], + ['neorv32_5fcrc_11',['NEORV32_CRC',['../neorv32__crc_8h.html#a110962d2b370f9d7997e459d9fd34271',1,'neorv32_crc.h']]], + ['neorv32_5fcrc_5fbase_12',['NEORV32_CRC_BASE',['../neorv32_8h.html#a0e2377055bdc0f416b5ae4385610600d',1,'neorv32.h']]], + ['neorv32_5fdm_5fbase_13',['NEORV32_DM_BASE',['../neorv32_8h.html#a9bf0149681677f7d87abf8f62e2d9a3d',1,'neorv32.h']]], + ['neorv32_5fdma_14',['NEORV32_DMA',['../neorv32__dma_8h.html#a0dcb61a0e0d2b45beb7818015adc8639',1,'neorv32_dma.h']]], + ['neorv32_5fdma_5fbase_15',['NEORV32_DMA_BASE',['../neorv32_8h.html#aa8d3a83ffad1e71f0832a5da78d62008',1,'neorv32.h']]], + ['neorv32_5fgpio_16',['NEORV32_GPIO',['../neorv32__gpio_8h.html#a1e35bbf26b9d1aa5373af0b9468eb445',1,'neorv32_gpio.h']]], + ['neorv32_5fgpio_5fbase_17',['NEORV32_GPIO_BASE',['../neorv32_8h.html#a7fd1e24d4de2eed7bf9cd5391562c7f4',1,'neorv32.h']]], + ['neorv32_5fgptmr_18',['NEORV32_GPTMR',['../neorv32__gptmr_8h.html#a9e047791588ff21fc4dc1b06456bdfd2',1,'neorv32_gptmr.h']]], + ['neorv32_5fgptmr_5fbase_19',['NEORV32_GPTMR_BASE',['../neorv32_8h.html#a0991b1a5ba1e8c3550eb9770d43589d0',1,'neorv32.h']]], + ['neorv32_5fheap_5fbegin_5fc_20',['neorv32_heap_begin_c',['../neorv32_8h.html#aca22a64c8c580dfde1676732d97ead7c',1,'neorv32.h']]], + ['neorv32_5fheap_5fend_5fc_21',['neorv32_heap_end_c',['../neorv32_8h.html#ac8b656bd05c05176638ea3f922228ca5',1,'neorv32.h']]], + ['neorv32_5fheap_5fsize_5fc_22',['neorv32_heap_size_c',['../neorv32_8h.html#a32904e45632a47e21f7c9d873720cdc5',1,'neorv32.h']]], + ['neorv32_5fneoled_23',['NEORV32_NEOLED',['../neorv32__neoled_8h.html#a3ccc1097bc70f92235d693b612fa994a',1,'neorv32_neoled.h']]], + ['neorv32_5fneoled_5fbase_24',['NEORV32_NEOLED_BASE',['../neorv32_8h.html#a559fdce92e8af5efc426c8fc48d14f99',1,'neorv32.h']]], + ['neorv32_5fonewire_25',['NEORV32_ONEWIRE',['../neorv32__onewire_8h.html#a6f119e35d7ac01f110987508ff3becc9',1,'neorv32_onewire.h']]], + ['neorv32_5fonewire_5fbase_26',['NEORV32_ONEWIRE_BASE',['../neorv32_8h.html#a8d0b612e52b77395a05d4f18af6fcf00',1,'neorv32.h']]], + ['neorv32_5fpwm_27',['NEORV32_PWM',['../neorv32__pwm_8h.html#ad4cb534c29e26fa56c10bef7afab8f51',1,'neorv32_pwm.h']]], + ['neorv32_5fpwm_5fbase_28',['NEORV32_PWM_BASE',['../neorv32_8h.html#afef7a6b121a788560b29e2ee2a58c725',1,'neorv32.h']]], + ['neorv32_5frte_5fnum_5ftraps_29',['NEORV32_RTE_NUM_TRAPS',['../neorv32__rte_8h.html#ad14a1ca41df1e9300bfd01aef07dce59',1,'neorv32_rte.h']]], + ['neorv32_5fsdi_30',['NEORV32_SDI',['../neorv32__sdi_8h.html#afd0921633d6523d9b7235055e9bbf928',1,'neorv32_sdi.h']]], + ['neorv32_5fsdi_5fbase_31',['NEORV32_SDI_BASE',['../neorv32_8h.html#a9b316ec038bd94ada42c9dab57a0a3cb',1,'neorv32.h']]], + ['neorv32_5fslink_32',['NEORV32_SLINK',['../neorv32__slink_8h.html#a6380d894432de119a20993096db534df',1,'neorv32_slink.h']]], + ['neorv32_5fslink_5fbase_33',['NEORV32_SLINK_BASE',['../neorv32_8h.html#ab5e6dc57886cd5ed98b86f22fc37d7cc',1,'neorv32.h']]], + ['neorv32_5fspi_34',['NEORV32_SPI',['../neorv32__spi_8h.html#a5f3afc4e268670c54d90df67fa38ca22',1,'neorv32_spi.h']]], + ['neorv32_5fspi_5fbase_35',['NEORV32_SPI_BASE',['../neorv32_8h.html#aa466dc5eace7351bd438606f0f7475a7',1,'neorv32.h']]], + ['neorv32_5fsysinfo_36',['NEORV32_SYSINFO',['../neorv32__sysinfo_8h.html#a140e23434ef7e85b2b38d8ae9695227b',1,'neorv32_sysinfo.h']]], + ['neorv32_5fsysinfo_5fbase_37',['NEORV32_SYSINFO_BASE',['../neorv32_8h.html#a5aa936f38782232c7ed3eab1283ee536',1,'neorv32.h']]], + ['neorv32_5ftrng_38',['NEORV32_TRNG',['../neorv32__trng_8h.html#a9794ff3746eb5321ad9c2bf522ea26dd',1,'neorv32_trng.h']]], + ['neorv32_5ftrng_5fbase_39',['NEORV32_TRNG_BASE',['../neorv32_8h.html#ab4846cd153e8a23deec45d81cc8372a2',1,'neorv32.h']]], + ['neorv32_5ftwd_40',['NEORV32_TWD',['../neorv32__twd_8h.html#ac9995cfc63846945ac26992148cd9401',1,'neorv32_twd.h']]], + ['neorv32_5ftwd_5fbase_41',['NEORV32_TWD_BASE',['../neorv32_8h.html#a8ac9e39bd62e9c5d7bcde0d44716b958',1,'neorv32.h']]], + ['neorv32_5ftwi_42',['NEORV32_TWI',['../neorv32__twi_8h.html#a2769c2fe5e0de01b12fe4a5fad029768',1,'neorv32_twi.h']]], + ['neorv32_5ftwi_5fbase_43',['NEORV32_TWI_BASE',['../neorv32_8h.html#a4a741408a4bb0938e03b99555306db9c',1,'neorv32.h']]], + ['neorv32_5fuart0_44',['NEORV32_UART0',['../neorv32__uart_8h.html#a4c880a6b27e46f459e750425258b1bdb',1,'neorv32_uart.h']]], + ['neorv32_5fuart0_5fbase_45',['NEORV32_UART0_BASE',['../neorv32_8h.html#a000b37f710043fe21e49b2fdbc039d94',1,'neorv32.h']]], + ['neorv32_5fuart1_46',['NEORV32_UART1',['../neorv32__uart_8h.html#aa2a9ded4523f001bf69935c80247fa2d',1,'neorv32_uart.h']]], + ['neorv32_5fuart1_5fbase_47',['NEORV32_UART1_BASE',['../neorv32_8h.html#a26a1defe18ce222b8b4ed1c760344700',1,'neorv32.h']]], + ['neorv32_5fwdt_48',['NEORV32_WDT',['../neorv32__wdt_8h.html#a78615b08cd799063011606d084fef46c',1,'neorv32_wdt.h']]], + ['neorv32_5fwdt_5fbase_49',['NEORV32_WDT_BASE',['../neorv32_8h.html#a3012986cdd5748ee96bcc74cd7108dea',1,'neorv32.h']]], + ['neorv32_5fxip_50',['NEORV32_XIP',['../neorv32__xip_8h.html#a3d6f138a347c16883b51069428eb7c1e',1,'neorv32_xip.h']]], + ['neorv32_5fxip_5fbase_51',['NEORV32_XIP_BASE',['../neorv32_8h.html#ae0978315beac8399f96f520bda81c7fe',1,'neorv32.h']]], + ['neorv32_5fxirq_52',['NEORV32_XIRQ',['../neorv32__xirq_8h.html#a0c0886139e9837867202e5f6a83307c4',1,'neorv32_xirq.h']]], + ['neorv32_5fxirq_5fbase_53',['NEORV32_XIRQ_BASE',['../neorv32_8h.html#a942a897be2d4ae6820bee0f7bb3a0ff1',1,'neorv32.h']]], + ['num_5fcells_5fx_54',['NUM_CELLS_X',['../game__of__life_2main_8c.html#a78c5b500f0f057bcaedf6fedeca7c537',1,'main.c']]], + ['num_5fcells_5fy_55',['NUM_CELLS_Y',['../game__of__life_2main_8c.html#aed77778557404b38bebb05b5830368b4',1,'main.c']]], + ['num_5fleds_5f24bit_56',['NUM_LEDS_24BIT',['../demo__neopixel_2main_8c.html#aa1dddb8d6b3b4d2f19afc3c09e2ff572',1,'main.c']]], + ['num_5ftest_5fcases_57',['NUM_TEST_CASES',['../atomic__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e',1,'NUM_TEST_CASES:&#160;main.c'],['../float__corner__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e',1,'NUM_TEST_CASES:&#160;main.c'],['../floating__point__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e',1,'NUM_TEST_CASES:&#160;main.c']]] +]; diff --git a/sw/search/defines_a.js b/sw/search/defines_a.js new file mode 100644 index 0000000000..26b4983d3e --- /dev/null +++ b/sw/search/defines_a.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['onewire_5ffirq_5fenable_0',['ONEWIRE_FIRQ_ENABLE',['../neorv32_8h.html#a8bb1918679e32e898af2d485cfa44afb',1,'neorv32.h']]], + ['onewire_5ffirq_5fpending_1',['ONEWIRE_FIRQ_PENDING',['../neorv32_8h.html#a3853ef999f99ca062e6025038811d0f0',1,'neorv32.h']]], + ['onewire_5frte_5fid_2',['ONEWIRE_RTE_ID',['../neorv32_8h.html#a142f4a1c754edfab292706618d427b94',1,'neorv32.h']]], + ['onewire_5ftrap_5fcode_3',['ONEWIRE_TRAP_CODE',['../neorv32_8h.html#a3e7aaa405a7d1fcd71a36c4b6b5a4081',1,'neorv32.h']]] +]; diff --git a/sw/search/defines_b.js b/sw/search/defines_b.js new file mode 100644 index 0000000000..f4cd315920 --- /dev/null +++ b/sw/search/defines_b.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['print_5fgetc_0',['PRINT_GETC',['../bootloader_8c.html#a999b04603115ce08b0cb33e333312480',1,'bootloader.c']]], + ['print_5fputc_1',['PRINT_PUTC',['../bootloader_8c.html#aa7afbe8348ebd1a876a4d247553292e9',1,'bootloader.c']]], + ['print_5ftext_2',['PRINT_TEXT',['../bootloader_8c.html#a0e5a66f68ecc7a6f42088f349707e852',1,'bootloader.c']]], + ['print_5fxnum_3',['PRINT_XNUM',['../bootloader_8c.html#a2f5cc04cf9c85f5d2958b384e053053b',1,'bootloader.c']]] +]; diff --git a/sw/search/defines_c.js b/sw/search/defines_c.js new file mode 100644 index 0000000000..b9ad18f545 --- /dev/null +++ b/sw/search/defines_c.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['run_5faddsub_5ftests_0',['RUN_ADDSUB_TESTS',['../float__corner__test_2main_8c.html#a2d16b9e484b7af7897c7ae83f945ceca',1,'RUN_ADDSUB_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a2d16b9e484b7af7897c7ae83f945ceca',1,'RUN_ADDSUB_TESTS:&#160;main.c']]], + ['run_5fclassify_5ftests_1',['RUN_CLASSIFY_TESTS',['../float__corner__test_2main_8c.html#a7e134923925fa24fd1090281c3a416c3',1,'RUN_CLASSIFY_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a7e134923925fa24fd1090281c3a416c3',1,'RUN_CLASSIFY_TESTS:&#160;main.c']]], + ['run_5fcompare_5ftests_2',['RUN_COMPARE_TESTS',['../float__corner__test_2main_8c.html#a4ee0f6d28896a97d2c0cad866e77b874',1,'RUN_COMPARE_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a4ee0f6d28896a97d2c0cad866e77b874',1,'RUN_COMPARE_TESTS:&#160;main.c']]], + ['run_5fconv_5ftests_3',['RUN_CONV_TESTS',['../float__corner__test_2main_8c.html#aa3b6c4d49be7372de9e771a0475306ac',1,'RUN_CONV_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#aa3b6c4d49be7372de9e771a0475306ac',1,'RUN_CONV_TESTS:&#160;main.c']]], + ['run_5fcsr_5ftests_4',['RUN_CSR_TESTS',['../floating__point__test_2main_8c.html#a7ec330b668b5b24d666d7769ccecfee3',1,'main.c']]], + ['run_5fexc_5ftests_5',['RUN_EXC_TESTS',['../floating__point__test_2main_8c.html#a1a1af220e72c69b03d13b2df53650e10',1,'main.c']]], + ['run_5fminmax_5ftests_6',['RUN_MINMAX_TESTS',['../float__corner__test_2main_8c.html#aed386f612417aeeeac8b08db27d515e4',1,'RUN_MINMAX_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#aed386f612417aeeeac8b08db27d515e4',1,'RUN_MINMAX_TESTS:&#160;main.c']]], + ['run_5fmul_5ftests_7',['RUN_MUL_TESTS',['../float__corner__test_2main_8c.html#a97323ecaf1ae85e68a736b06bc3b58f8',1,'RUN_MUL_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a97323ecaf1ae85e68a736b06bc3b58f8',1,'RUN_MUL_TESTS:&#160;main.c']]], + ['run_5fsgninj_5ftests_8',['RUN_SGNINJ_TESTS',['../float__corner__test_2main_8c.html#a94f0b0908f48f383145ed61ef8eb0713',1,'RUN_SGNINJ_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a94f0b0908f48f383145ed61ef8eb0713',1,'RUN_SGNINJ_TESTS:&#160;main.c']]], + ['run_5ftiming_5ftests_9',['RUN_TIMING_TESTS',['../float__corner__test_2main_8c.html#a6969308bd3633928893a2666f1df66fc',1,'RUN_TIMING_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a6969308bd3633928893a2666f1df66fc',1,'RUN_TIMING_TESTS:&#160;main.c']]], + ['run_5funavail_5ftests_10',['RUN_UNAVAIL_TESTS',['../float__corner__test_2main_8c.html#a923de9c3e55322d85522740c0d0ff867',1,'RUN_UNAVAIL_TESTS:&#160;main.c'],['../floating__point__test_2main_8c.html#a923de9c3e55322d85522740c0d0ff867',1,'RUN_UNAVAIL_TESTS:&#160;main.c']]] +]; diff --git a/sw/search/defines_d.js b/sw/search/defines_d.js new file mode 100644 index 0000000000..d459ef152a --- /dev/null +++ b/sw/search/defines_d.js @@ -0,0 +1,29 @@ +var searchData= +[ + ['sdi_5ffirq_5fenable_0',['SDI_FIRQ_ENABLE',['../neorv32_8h.html#a30cf20b6d704c50cc5c46238bb43646f',1,'neorv32.h']]], + ['sdi_5ffirq_5fpending_1',['SDI_FIRQ_PENDING',['../neorv32_8h.html#a68611c0dfbe331739eff10230ac3fede',1,'neorv32.h']]], + ['sdi_5frte_5fid_2',['SDI_RTE_ID',['../neorv32_8h.html#aa0ff72ea560d7e1462787dc31bd467cf',1,'neorv32.h']]], + ['sdi_5ftrap_5fcode_3',['SDI_TRAP_CODE',['../neorv32_8h.html#a68925ca3f482f148caedd36118fd8d79',1,'neorv32.h']]], + ['silent_5fmode_4',['SILENT_MODE',['../atomic__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013',1,'SILENT_MODE:&#160;main.c'],['../float__corner__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013',1,'SILENT_MODE:&#160;main.c'],['../floating__point__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013',1,'SILENT_MODE:&#160;main.c']]], + ['slink_5frx_5ffirq_5fenable_5',['SLINK_RX_FIRQ_ENABLE',['../neorv32_8h.html#a8680ab1f14e512f21913572b35cbbf77',1,'neorv32.h']]], + ['slink_5frx_5ffirq_5fpending_6',['SLINK_RX_FIRQ_PENDING',['../neorv32_8h.html#a5c48d5c4effb47cdb019aa2da7c84526',1,'neorv32.h']]], + ['slink_5frx_5frte_5fid_7',['SLINK_RX_RTE_ID',['../neorv32_8h.html#a4fff18e72d10377cdcb8d2ac0a617a5d',1,'neorv32.h']]], + ['slink_5frx_5ftrap_5fcode_8',['SLINK_RX_TRAP_CODE',['../neorv32_8h.html#ab1fdaedb2c4c8753ef3be87c82568dda',1,'neorv32.h']]], + ['slink_5ftx_5ffirq_5fenable_9',['SLINK_TX_FIRQ_ENABLE',['../neorv32_8h.html#a232fe0eb5665373b6e2b464bdc228df2',1,'neorv32.h']]], + ['slink_5ftx_5ffirq_5fpending_10',['SLINK_TX_FIRQ_PENDING',['../neorv32_8h.html#ac8e98b2af75c8e31f9815dee3dcbaf8e',1,'neorv32.h']]], + ['slink_5ftx_5frte_5fid_11',['SLINK_TX_RTE_ID',['../neorv32_8h.html#a4e039d13b8d3f20453e1bb6b40512e43',1,'neorv32.h']]], + ['slink_5ftx_5ftrap_5fcode_12',['SLINK_TX_TRAP_CODE',['../neorv32_8h.html#a7fbe28901775e284d5700086f0b0bfcd',1,'neorv32.h']]], + ['spi_5fboot_5fbase_5faddr_13',['SPI_BOOT_BASE_ADDR',['../bootloader_8c.html#a418adcf57119600c3580fd2297d28de0',1,'bootloader.c']]], + ['spi_5fen_14',['SPI_EN',['../bootloader_8c.html#aea75cf0485ce0a4ea320eba994859686',1,'bootloader.c']]], + ['spi_5ffirq_5fenable_15',['SPI_FIRQ_ENABLE',['../neorv32_8h.html#ab8fcd3f80c373eb0f9d0fc6bf64ca626',1,'neorv32.h']]], + ['spi_5ffirq_5fpending_16',['SPI_FIRQ_PENDING',['../neorv32_8h.html#ab2f58f746febb29a9828447c733f8043',1,'neorv32.h']]], + ['spi_5fflash_5faddr_5fbytes_17',['SPI_FLASH_ADDR_BYTES',['../bootloader_8c.html#afe60a31c8561952f2f734fd67e6f7406',1,'bootloader.c']]], + ['spi_5fflash_5fclk_5fprsc_18',['SPI_FLASH_CLK_PRSC',['../bootloader_8c.html#a709071a651213770b4efe6e6e055ec3d',1,'bootloader.c']]], + ['spi_5fflash_5fcs_19',['SPI_FLASH_CS',['../bootloader_8c.html#aa2132454aada86216009f3af206899b1',1,'bootloader.c']]], + ['spi_5fflash_5fsector_5fsize_20',['SPI_FLASH_SECTOR_SIZE',['../bootloader_8c.html#a00924a8ba223b2ca0e7031259b292c84',1,'bootloader.c']]], + ['spi_5frte_5fid_21',['SPI_RTE_ID',['../neorv32_8h.html#a4c1cd9ec9f80da2080e5d0d35cc524dd',1,'neorv32.h']]], + ['spi_5ftrap_5fcode_22',['SPI_TRAP_CODE',['../neorv32_8h.html#a83c212f1f5d8ee2a5921b3b2b19e9cc4',1,'neorv32.h']]], + ['status_5fled_5fen_23',['STATUS_LED_EN',['../bootloader_8c.html#aa9696325b450773c7a87c991abca3a54',1,'bootloader.c']]], + ['status_5fled_5fpin_24',['STATUS_LED_PIN',['../bootloader_8c.html#a089a71f836911c71b3f73fdd3b4b890b',1,'bootloader.c']]], + ['str_25',['str',['../bootloader_8c.html#af6cf19e40e97afb5a7c29f7b439d091d',1,'bootloader.c']]] +]; diff --git a/sw/search/defines_e.js b/sw/search/defines_e.js new file mode 100644 index 0000000000..716dc34fc4 --- /dev/null +++ b/sw/search/defines_e.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['testcases_0',['TESTCASES',['../demo__cfs_2main_8c.html#a906949f076e3e0d0082af3c3b1acb518',1,'main.c']]], + ['twd_5ffirq_5fenable_1',['TWD_FIRQ_ENABLE',['../neorv32_8h.html#a7cd6e1c5a9213256b277d8ef74bfb564',1,'neorv32.h']]], + ['twd_5ffirq_5fpending_2',['TWD_FIRQ_PENDING',['../neorv32_8h.html#ab61a869973c8d027360f9c1f47fb5b01',1,'neorv32.h']]], + ['twd_5frte_5fid_3',['TWD_RTE_ID',['../neorv32_8h.html#ad00097ae9632a0f11c0dab96e272cff5',1,'neorv32.h']]], + ['twd_5ftrap_5fcode_4',['TWD_TRAP_CODE',['../neorv32_8h.html#a3dc1579e0bd1718b8f24cda6b54ae43a',1,'neorv32.h']]], + ['twi_5ffirq_5fenable_5',['TWI_FIRQ_ENABLE',['../neorv32_8h.html#a0913144fce247e24ccd0f178b9ac32b7',1,'neorv32.h']]], + ['twi_5ffirq_5fpending_6',['TWI_FIRQ_PENDING',['../neorv32_8h.html#a48b80113ca718fbdc50d75e1ec96a1ff',1,'neorv32.h']]], + ['twi_5frte_5fid_7',['TWI_RTE_ID',['../neorv32_8h.html#a1ac29f2f7bace5ba92b2b68a4541a60c',1,'neorv32.h']]], + ['twi_5ftrap_5fcode_8',['TWI_TRAP_CODE',['../neorv32_8h.html#a0afc1a759116d4d73a199ef769bced47',1,'neorv32.h']]] +]; diff --git a/sw/search/defines_f.js b/sw/search/defines_f.js new file mode 100644 index 0000000000..05bac95a4d --- /dev/null +++ b/sw/search/defines_f.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['uart0_5frx_5ffirq_5fenable_0',['UART0_RX_FIRQ_ENABLE',['../neorv32_8h.html#a6b55ce6abe6b141000a6bb00949169e9',1,'neorv32.h']]], + ['uart0_5frx_5ffirq_5fpending_1',['UART0_RX_FIRQ_PENDING',['../neorv32_8h.html#a0b738b26abb2b951f1f5c5d9525d7701',1,'neorv32.h']]], + ['uart0_5frx_5frte_5fid_2',['UART0_RX_RTE_ID',['../neorv32_8h.html#ae8588cca20d5e36f74c5207c376389a1',1,'neorv32.h']]], + ['uart0_5frx_5ftrap_5fcode_3',['UART0_RX_TRAP_CODE',['../neorv32_8h.html#a7a849638eff31f2e1955bdc53d4fc84d',1,'neorv32.h']]], + ['uart0_5ftx_5ffirq_5fenable_4',['UART0_TX_FIRQ_ENABLE',['../neorv32_8h.html#aff756a395771f22c5f412f23f177ea7d',1,'neorv32.h']]], + ['uart0_5ftx_5ffirq_5fpending_5',['UART0_TX_FIRQ_PENDING',['../neorv32_8h.html#addbe29166bb77bc045ad0e3db68e57e9',1,'neorv32.h']]], + ['uart0_5ftx_5frte_5fid_6',['UART0_TX_RTE_ID',['../neorv32_8h.html#a9dc37695ca169bc0eb93898e7aeeee58',1,'neorv32.h']]], + ['uart0_5ftx_5ftrap_5fcode_7',['UART0_TX_TRAP_CODE',['../neorv32_8h.html#ab50df423fdba86bb83bc5d90a4c3bb20',1,'neorv32.h']]], + ['uart1_5frx_5ffirq_5fenable_8',['UART1_RX_FIRQ_ENABLE',['../neorv32_8h.html#a6c118c1784d8446360b00cde97437ca7',1,'neorv32.h']]], + ['uart1_5frx_5ffirq_5fpending_9',['UART1_RX_FIRQ_PENDING',['../neorv32_8h.html#a2e70d3a4e2973d224643813fcf315a20',1,'neorv32.h']]], + ['uart1_5frx_5frte_5fid_10',['UART1_RX_RTE_ID',['../neorv32_8h.html#ab1c351f5ea19ac9ea864155be9cc0b4b',1,'neorv32.h']]], + ['uart1_5frx_5ftrap_5fcode_11',['UART1_RX_TRAP_CODE',['../neorv32_8h.html#ad0b9eb2ee1f411d7fccdf4fe263214e1',1,'neorv32.h']]], + ['uart1_5ftx_5ffirq_5fenable_12',['UART1_TX_FIRQ_ENABLE',['../neorv32_8h.html#a0039bae3454a22e71d64e70d674f5d6a',1,'neorv32.h']]], + ['uart1_5ftx_5ffirq_5fpending_13',['UART1_TX_FIRQ_PENDING',['../neorv32_8h.html#ac4060532b7aa390623f54720460a2680',1,'neorv32.h']]], + ['uart1_5ftx_5frte_5fid_14',['UART1_TX_RTE_ID',['../neorv32_8h.html#a6af270d7ae8b1cde30e44eb9142491d3',1,'neorv32.h']]], + ['uart1_5ftx_5ftrap_5fcode_15',['UART1_TX_TRAP_CODE',['../neorv32_8h.html#a4cc50287c7a53982761a8116396ff7dd',1,'neorv32.h']]], + ['uart_5fbaud_16',['UART_BAUD',['../bootloader_8c.html#a1fac9153314479ad0ad495d752f0224a',1,'bootloader.c']]], + ['uart_5fen_17',['UART_EN',['../bootloader_8c.html#af1c2f103ac6e3183f08b39099fab2be9',1,'bootloader.c']]], + ['uart_5fhw_5fhandshake_5fen_18',['UART_HW_HANDSHAKE_EN',['../bootloader_8c.html#a20e93d623ce07939c3fdd53898f9d583',1,'bootloader.c']]] +]; diff --git a/sw/search/enums_0.js b/sw/search/enums_0.js new file mode 100644 index 0000000000..b1047a7463 --- /dev/null +++ b/sw/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['channel_5fcfg_5fenum_0',['CHANNEL_CFG_enum',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175',1,'neorv32_pwm.h']]] +]; diff --git a/sw/search/enums_1.js b/sw/search/enums_1.js new file mode 100644 index 0000000000..2e35050ee5 --- /dev/null +++ b/sw/search/enums_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['error_5fcodes_5fenum_0',['ERROR_CODES_enum',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088',1,'bootloader.c']]], + ['exe_5fstream_5fsource_5fenum_1',['EXE_STREAM_SOURCE_enum',['../bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83',1,'bootloader.c']]] +]; diff --git a/sw/search/enums_2.js b/sw/search/enums_2.js new file mode 100644 index 0000000000..b7b120bdc8 --- /dev/null +++ b/sw/search/enums_2.js @@ -0,0 +1,47 @@ +var searchData= +[ + ['neorv32_5fclock_5fprsc_5fenum_0',['NEORV32_CLOCK_PRSC_enum',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73',1,'neorv32.h']]], + ['neorv32_5fcrc_5fmode_5fenum_1',['NEORV32_CRC_MODE_enum',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447',1,'neorv32_crc.h']]], + ['neorv32_5fcsr_5fenum_2',['NEORV32_CSR_enum',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5ffflags_5fenum_3',['NEORV32_CSR_FFLAGS_enum',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204b',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmcounteren_5fenum_4',['NEORV32_CSR_MCOUNTEREN_enum',['../neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmcountinhibit_5fenum_5',['NEORV32_CSR_MCOUNTINHIBIT_enum',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfe',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmie_5fenum_6',['NEORV32_CSR_MIE_enum',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmip_5fenum_7',['NEORV32_CSR_MIP_enum',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmisa_5fenum_8',['NEORV32_CSR_MISA_enum',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830c',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmstatus_5fenum_9',['NEORV32_CSR_MSTATUS_enum',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fxisa_5fenum_10',['NEORV32_CSR_XISA_enum',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fdma_5fctrl_5fenum_11',['NEORV32_DMA_CTRL_enum',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4',1,'neorv32_dma.h']]], + ['neorv32_5fdma_5fstatus_5fenum_12',['NEORV32_DMA_STATUS_enum',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74b',1,'neorv32_dma.h']]], + ['neorv32_5fdma_5fttype_5fenum_13',['NEORV32_DMA_TTYPE_enum',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9',1,'neorv32_dma.h']]], + ['neorv32_5fexception_5fcodes_5fenum_14',['NEORV32_EXCEPTION_CODES_enum',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fexecutable_5fenum_15',['NEORV32_EXECUTABLE_enum',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feb',1,'bootloader.c']]], + ['neorv32_5fgptmr_5fctrl_5fenum_16',['NEORV32_GPTMR_CTRL_enum',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988',1,'neorv32_gptmr.h']]], + ['neorv32_5fhpmcnt_5fevent_5fenum_17',['NEORV32_HPMCNT_EVENT_enum',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfe',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fneoled_5fctrl_5fenum_18',['NEORV32_NEOLED_CTRL_enum',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412',1,'neorv32_neoled.h']]], + ['neorv32_5fonewire_5fctrl_5fenum_19',['NEORV32_ONEWIRE_CTRL_enum',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831',1,'neorv32_onewire.h']]], + ['neorv32_5fonewire_5fdcmd_5fenum_20',['NEORV32_ONEWIRE_DCMD_enum',['../neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26',1,'neorv32_onewire.h']]], + ['neorv32_5fpmp_5fmodes_5fenum_21',['NEORV32_PMP_MODES_enum',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fpmpcfg_5fattributes_5fenum_22',['NEORV32_PMPCFG_ATTRIBUTES_enum',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930ea',1,'neorv32_cpu_csr.h']]], + ['neorv32_5frte_5ftrap_5fenum_23',['NEORV32_RTE_TRAP_enum',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a',1,'neorv32_rte.h']]], + ['neorv32_5fsdi_5fctrl_5fenum_24',['NEORV32_SDI_CTRL_enum',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6',1,'neorv32_sdi.h']]], + ['neorv32_5fslink_5fctrl_5fenum_25',['NEORV32_SLINK_CTRL_enum',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1',1,'neorv32_slink.h']]], + ['neorv32_5fslink_5froute_5fenum_26',['NEORV32_SLINK_ROUTE_enum',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45',1,'neorv32_slink.h']]], + ['neorv32_5fslink_5fstatus_5fenum_27',['NEORV32_SLINK_STATUS_enum',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bf',1,'neorv32_slink.h']]], + ['neorv32_5fspi_5fctrl_5fenum_28',['NEORV32_SPI_CTRL_enum',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3b',1,'neorv32_spi.h']]], + ['neorv32_5fspi_5fdata_5fenum_29',['NEORV32_SPI_DATA_enum',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8',1,'neorv32_spi.h']]], + ['neorv32_5fsysinfo_5fcache_5fenum_30',['NEORV32_SYSINFO_CACHE_enum',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1ea',1,'neorv32_sysinfo.h']]], + ['neorv32_5fsysinfo_5fmem_5fenum_31',['NEORV32_SYSINFO_MEM_enum',['../neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5f',1,'neorv32_sysinfo.h']]], + ['neorv32_5fsysinfo_5fsoc_5fenum_32',['NEORV32_SYSINFO_SOC_enum',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08',1,'neorv32_sysinfo.h']]], + ['neorv32_5ftrng_5fctrl_5fenum_33',['NEORV32_TRNG_CTRL_enum',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1a',1,'neorv32_trng.h']]], + ['neorv32_5ftrng_5fdata_5fenum_34',['NEORV32_TRNG_DATA_enum',['../neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2',1,'neorv32_trng.h']]], + ['neorv32_5ftwd_5fctrl_5fenum_35',['NEORV32_TWD_CTRL_enum',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18',1,'neorv32_twd.h']]], + ['neorv32_5ftwd_5fdata_5fenum_36',['NEORV32_TWD_DATA_enum',['../neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8',1,'neorv32_twd.h']]], + ['neorv32_5ftwi_5fctrl_5fenum_37',['NEORV32_TWI_CTRL_enum',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafa',1,'neorv32_twi.h']]], + ['neorv32_5ftwi_5fdcmd_5fenum_38',['NEORV32_TWI_DCMD_enum',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8',1,'neorv32_twi.h']]], + ['neorv32_5fuart_5fctrl_5fenum_39',['NEORV32_UART_CTRL_enum',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afc',1,'neorv32_uart.h']]], + ['neorv32_5fuart_5fdata_5fenum_40',['NEORV32_UART_DATA_enum',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2',1,'neorv32_uart.h']]], + ['neorv32_5fwdt_5fctrl_5fenum_41',['NEORV32_WDT_CTRL_enum',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23e',1,'neorv32_wdt.h']]], + ['neorv32_5fwdt_5frcause_5fenum_42',['NEORV32_WDT_RCAUSE_enum',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049',1,'neorv32_wdt.h']]], + ['neorv32_5fxip_5fctrl_5fenum_43',['NEORV32_XIP_CTRL_enum',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceb',1,'neorv32_xip.h']]] +]; diff --git a/sw/search/enums_3.js b/sw/search/enums_3.js new file mode 100644 index 0000000000..8e1c48fc01 --- /dev/null +++ b/sw/search/enums_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['spi_5fflash_5fcmd_0',['SPI_FLASH_CMD',['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12e',1,'main.c']]], + ['spi_5fflash_5fcmd_5fenum_1',['SPI_FLASH_CMD_enum',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fed',1,'bootloader.c']]], + ['spi_5fflash_5fsreg_2',['SPI_FLASH_SREG',['../demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08e',1,'main.c']]], + ['spi_5fflash_5fsreg_5fenum_3',['SPI_FLASH_SREG_enum',['../bootloader_8c.html#a97299f563ebc1fca4c663b025a15136f',1,'bootloader.c']]] +]; diff --git a/sw/search/enums_4.js b/sw/search/enums_4.js new file mode 100644 index 0000000000..83f7879796 --- /dev/null +++ b/sw/search/enums_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['xirq_5ftrigger_5fenum_0',['XIRQ_TRIGGER_enum',['../neorv32__xirq_8h.html#a19aaba6e0cfedfee3cf96f3ea5323151',1,'neorv32_xirq.h']]] +]; diff --git a/sw/search/enumvalues_0.js b/sw/search/enumvalues_0.js new file mode 100644 index 0000000000..4b74b5778d --- /dev/null +++ b/sw/search/enumvalues_0.js @@ -0,0 +1,238 @@ +var searchData= +[ + ['clk_5fprsc_5f1024_0',['CLK_PRSC_1024',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17',1,'neorv32.h']]], + ['clk_5fprsc_5f128_1',['CLK_PRSC_128',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e',1,'neorv32.h']]], + ['clk_5fprsc_5f2_2',['CLK_PRSC_2',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05',1,'neorv32.h']]], + ['clk_5fprsc_5f2048_3',['CLK_PRSC_2048',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79',1,'neorv32.h']]], + ['clk_5fprsc_5f4_4',['CLK_PRSC_4',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1',1,'neorv32.h']]], + ['clk_5fprsc_5f4096_5',['CLK_PRSC_4096',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee',1,'neorv32.h']]], + ['clk_5fprsc_5f64_6',['CLK_PRSC_64',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da',1,'neorv32.h']]], + ['clk_5fprsc_5f8_7',['CLK_PRSC_8',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9',1,'neorv32.h']]], + ['crc_5fmode16_8',['CRC_MODE16',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f',1,'neorv32_crc.h']]], + ['crc_5fmode32_9',['CRC_MODE32',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa',1,'neorv32_crc.h']]], + ['crc_5fmode8_10',['CRC_MODE8',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a',1,'neorv32_crc.h']]], + ['csr_5fcfureg0_11',['CSR_CFUREG0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f',1,'neorv32_cpu_csr.h']]], + ['csr_5fcfureg1_12',['CSR_CFUREG1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8',1,'neorv32_cpu_csr.h']]], + ['csr_5fcfureg2_13',['CSR_CFUREG2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68',1,'neorv32_cpu_csr.h']]], + ['csr_5fcfureg3_14',['CSR_CFUREG3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf',1,'neorv32_cpu_csr.h']]], + ['csr_5fcycle_15',['CSR_CYCLE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e',1,'neorv32_cpu_csr.h']]], + ['csr_5fcycleh_16',['CSR_CYCLEH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db',1,'neorv32_cpu_csr.h']]], + ['csr_5fdcsr_17',['CSR_DCSR',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9',1,'neorv32_cpu_csr.h']]], + ['csr_5fdpc_18',['CSR_DPC',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b',1,'neorv32_cpu_csr.h']]], + ['csr_5fdscratch0_19',['CSR_DSCRATCH0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7',1,'neorv32_cpu_csr.h']]], + ['csr_5ffcsr_20',['CSR_FCSR',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_21',['CSR_FFLAGS',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fdz_22',['CSR_FFLAGS_DZ',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fnv_23',['CSR_FFLAGS_NV',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fnx_24',['CSR_FFLAGS_NX',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fof_25',['CSR_FFLAGS_OF',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fuf_26',['CSR_FFLAGS_UF',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819',1,'neorv32_cpu_csr.h']]], + ['csr_5ffrm_27',['CSR_FRM',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812',1,'neorv32_cpu_csr.h']]], + ['csr_5finstret_28',['CSR_INSTRET',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66',1,'neorv32_cpu_csr.h']]], + ['csr_5finstreth_29',['CSR_INSTRETH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153',1,'neorv32_cpu_csr.h']]], + ['csr_5fmarchid_30',['CSR_MARCHID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcause_31',['CSR_MCAUSE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmconfigptr_32',['CSR_MCONFIGPTR',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcounteren_33',['CSR_MCOUNTEREN',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcounteren_5fcy_34',['CSR_MCOUNTEREN_CY',['../neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a3d0c8ff6ba2c557cb5b5d353bdb95790',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcounteren_5fir_35',['CSR_MCOUNTEREN_IR',['../neorv32__cpu__csr_8h.html#a6d3c6aaee79b679e954c54563d7ee500a97e36c94b71fa2f9a805bbe47b0bc1b5',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_36',['CSR_MCOUNTINHIBIT',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fcy_37',['CSR_MCOUNTINHIBIT_CY',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm10_38',['CSR_MCOUNTINHIBIT_HPM10',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm11_39',['CSR_MCOUNTINHIBIT_HPM11',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm12_40',['CSR_MCOUNTINHIBIT_HPM12',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm13_41',['CSR_MCOUNTINHIBIT_HPM13',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm14_42',['CSR_MCOUNTINHIBIT_HPM14',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm15_43',['CSR_MCOUNTINHIBIT_HPM15',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm16_44',['CSR_MCOUNTINHIBIT_HPM16',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm17_45',['CSR_MCOUNTINHIBIT_HPM17',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm18_46',['CSR_MCOUNTINHIBIT_HPM18',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm19_47',['CSR_MCOUNTINHIBIT_HPM19',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm20_48',['CSR_MCOUNTINHIBIT_HPM20',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm21_49',['CSR_MCOUNTINHIBIT_HPM21',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm22_50',['CSR_MCOUNTINHIBIT_HPM22',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm23_51',['CSR_MCOUNTINHIBIT_HPM23',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm24_52',['CSR_MCOUNTINHIBIT_HPM24',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm25_53',['CSR_MCOUNTINHIBIT_HPM25',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm26_54',['CSR_MCOUNTINHIBIT_HPM26',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm27_55',['CSR_MCOUNTINHIBIT_HPM27',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm28_56',['CSR_MCOUNTINHIBIT_HPM28',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm29_57',['CSR_MCOUNTINHIBIT_HPM29',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm3_58',['CSR_MCOUNTINHIBIT_HPM3',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm30_59',['CSR_MCOUNTINHIBIT_HPM30',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm31_60',['CSR_MCOUNTINHIBIT_HPM31',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm4_61',['CSR_MCOUNTINHIBIT_HPM4',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm5_62',['CSR_MCOUNTINHIBIT_HPM5',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm6_63',['CSR_MCOUNTINHIBIT_HPM6',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm7_64',['CSR_MCOUNTINHIBIT_HPM7',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm8_65',['CSR_MCOUNTINHIBIT_HPM8',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm9_66',['CSR_MCOUNTINHIBIT_HPM9',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fir_67',['CSR_MCOUNTINHIBIT_IR',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcycle_68',['CSR_MCYCLE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcycleh_69',['CSR_MCYCLEH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmenvcfg_70',['CSR_MENVCFG',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98',1,'neorv32_cpu_csr.h']]], + ['csr_5fmenvcfgh_71',['CSR_MENVCFGH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmepc_72',['CSR_MEPC',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhartid_73',['CSR_MHARTID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter10_74',['CSR_MHPMCOUNTER10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter10h_75',['CSR_MHPMCOUNTER10H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter11_76',['CSR_MHPMCOUNTER11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter11h_77',['CSR_MHPMCOUNTER11H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter12_78',['CSR_MHPMCOUNTER12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter12h_79',['CSR_MHPMCOUNTER12H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter13_80',['CSR_MHPMCOUNTER13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter13h_81',['CSR_MHPMCOUNTER13H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter14_82',['CSR_MHPMCOUNTER14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter14h_83',['CSR_MHPMCOUNTER14H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter15_84',['CSR_MHPMCOUNTER15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter15h_85',['CSR_MHPMCOUNTER15H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter3_86',['CSR_MHPMCOUNTER3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter3h_87',['CSR_MHPMCOUNTER3H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter4_88',['CSR_MHPMCOUNTER4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter4h_89',['CSR_MHPMCOUNTER4H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter5_90',['CSR_MHPMCOUNTER5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter5h_91',['CSR_MHPMCOUNTER5H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter6_92',['CSR_MHPMCOUNTER6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter6h_93',['CSR_MHPMCOUNTER6H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter7_94',['CSR_MHPMCOUNTER7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter7h_95',['CSR_MHPMCOUNTER7H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter8_96',['CSR_MHPMCOUNTER8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter8h_97',['CSR_MHPMCOUNTER8H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter9_98',['CSR_MHPMCOUNTER9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter9h_99',['CSR_MHPMCOUNTER9H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent10_100',['CSR_MHPMEVENT10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent11_101',['CSR_MHPMEVENT11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent12_102',['CSR_MHPMEVENT12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent13_103',['CSR_MHPMEVENT13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent14_104',['CSR_MHPMEVENT14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent15_105',['CSR_MHPMEVENT15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent3_106',['CSR_MHPMEVENT3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent4_107',['CSR_MHPMEVENT4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent5_108',['CSR_MHPMEVENT5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent6_109',['CSR_MHPMEVENT6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent7_110',['CSR_MHPMEVENT7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent8_111',['CSR_MHPMEVENT8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent9_112',['CSR_MHPMEVENT9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_113',['CSR_MIE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq0e_114',['CSR_MIE_FIRQ0E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq10e_115',['CSR_MIE_FIRQ10E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq11e_116',['CSR_MIE_FIRQ11E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq12e_117',['CSR_MIE_FIRQ12E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq13e_118',['CSR_MIE_FIRQ13E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq14e_119',['CSR_MIE_FIRQ14E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq15e_120',['CSR_MIE_FIRQ15E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq1e_121',['CSR_MIE_FIRQ1E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq2e_122',['CSR_MIE_FIRQ2E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq3e_123',['CSR_MIE_FIRQ3E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq4e_124',['CSR_MIE_FIRQ4E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq5e_125',['CSR_MIE_FIRQ5E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq6e_126',['CSR_MIE_FIRQ6E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq7e_127',['CSR_MIE_FIRQ7E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq8e_128',['CSR_MIE_FIRQ8E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq9e_129',['CSR_MIE_FIRQ9E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5fmeie_130',['CSR_MIE_MEIE',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5fmsie_131',['CSR_MIE_MSIE',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5fmtie_132',['CSR_MIE_MTIE',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083',1,'neorv32_cpu_csr.h']]], + ['csr_5fmimpid_133',['CSR_MIMPID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd',1,'neorv32_cpu_csr.h']]], + ['csr_5fminstret_134',['CSR_MINSTRET',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb',1,'neorv32_cpu_csr.h']]], + ['csr_5fminstreth_135',['CSR_MINSTRETH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_136',['CSR_MIP',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq0p_137',['CSR_MIP_FIRQ0P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq10p_138',['CSR_MIP_FIRQ10P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq11p_139',['CSR_MIP_FIRQ11P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq12p_140',['CSR_MIP_FIRQ12P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq13p_141',['CSR_MIP_FIRQ13P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq14p_142',['CSR_MIP_FIRQ14P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq15p_143',['CSR_MIP_FIRQ15P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq1p_144',['CSR_MIP_FIRQ1P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq2p_145',['CSR_MIP_FIRQ2P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq3p_146',['CSR_MIP_FIRQ3P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq4p_147',['CSR_MIP_FIRQ4P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq5p_148',['CSR_MIP_FIRQ5P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq6p_149',['CSR_MIP_FIRQ6P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq7p_150',['CSR_MIP_FIRQ7P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq8p_151',['CSR_MIP_FIRQ8P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq9p_152',['CSR_MIP_FIRQ9P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5fmeip_153',['CSR_MIP_MEIP',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5fmsip_154',['CSR_MIP_MSIP',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5fmtip_155',['CSR_MIP_MTIP',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_156',['CSR_MISA',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fb_157',['CSR_MISA_B',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fc_158',['CSR_MISA_C',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fe_159',['CSR_MISA_E',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fi_160',['CSR_MISA_I',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fm_161',['CSR_MISA_M',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fmxl_5fhi_162',['CSR_MISA_MXL_HI',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fmxl_5flo_163',['CSR_MISA_MXL_LO',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fu_164',['CSR_MISA_U',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fx_165',['CSR_MISA_X',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193',1,'neorv32_cpu_csr.h']]], + ['csr_5fmscratch_166',['CSR_MSCRATCH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_167',['CSR_MSTATUS',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmie_168',['CSR_MSTATUS_MIE',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmpie_169',['CSR_MSTATUS_MPIE',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmpp_5fh_170',['CSR_MSTATUS_MPP_H',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmpp_5fl_171',['CSR_MSTATUS_MPP_L',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmprv_172',['CSR_MSTATUS_MPRV',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5ftw_173',['CSR_MSTATUS_TW',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatush_174',['CSR_MSTATUSH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067',1,'neorv32_cpu_csr.h']]], + ['csr_5fmtinst_175',['CSR_MTINST',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmtval_176',['CSR_MTVAL',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmtvec_177',['CSR_MTVEC',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21',1,'neorv32_cpu_csr.h']]], + ['csr_5fmvendorid_178',['CSR_MVENDORID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_179',['CSR_MXISA',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fclkgate_180',['CSR_MXISA_CLKGATE',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a35543f2ac5cde6e142bca6791b7b36b1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5ffastmul_181',['CSR_MXISA_FASTMUL',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5ffastshift_182',['CSR_MXISA_FASTSHIFT',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fis_5fsim_183',['CSR_MXISA_IS_SIM',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5frfhwrst_184',['CSR_MXISA_RFHWRST',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fsdext_185',['CSR_MXISA_SDEXT',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fsdtrig_186',['CSR_MXISA_SDTRIG',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fsmpmp_187',['CSR_MXISA_SMPMP',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzalrsc_188',['CSR_MXISA_ZALRSC',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adf45adc0bcbec0c1ffa944099257a947',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzba_189',['CSR_MXISA_ZBA',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adfc9122d93a71bf6df178022a52d22c4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzbb_190',['CSR_MXISA_ZBB',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a815cbe0149cba2a69025f6bec9946a85',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzbkb_191',['CSR_MXISA_ZBKB',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387adb26c1e5bf6ae112625621dddd331735',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzbkc_192',['CSR_MXISA_ZBKC',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac9e87153c096d656b40cb7abdf3afd55',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzbkx_193',['CSR_MXISA_ZBKX',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a34519a66e749d63dc5bc7c145c297b64',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzbs_194',['CSR_MXISA_ZBS',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a469e8e449f0e442df531c8cf2c4f35c5',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzfinx_195',['CSR_MXISA_ZFINX',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzicntr_196',['CSR_MXISA_ZICNTR',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzicond_197',['CSR_MXISA_ZICOND',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzicsr_198',['CSR_MXISA_ZICSR',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzifencei_199',['CSR_MXISA_ZIFENCEI',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzihpm_200',['CSR_MXISA_ZIHPM',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzkn_201',['CSR_MXISA_ZKN',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad7e7454a30c82c3d91acbc8c259e8c25',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzknd_202',['CSR_MXISA_ZKND',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48f1de7f79a0633644ae02c463d49375',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzkne_203',['CSR_MXISA_ZKNE',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a216ec44d5be3b158acb7e033e352bad1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzknh_204',['CSR_MXISA_ZKNH',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5fe8e591901e0fd7ba6706c70e9c76ec',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzks_205',['CSR_MXISA_ZKS',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a2649bee3397c74ada7b72677308f38c0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzksed_206',['CSR_MXISA_ZKSED',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a43213190abb77304a78c15196c90a044',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzksh_207',['CSR_MXISA_ZKSH',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a5e4bf05830b66410bbf2ef2c68e5fd18',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzkt_208',['CSR_MXISA_ZKT',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a31788af612f04bc6b2a2bd15c1fb63c1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzmmul_209',['CSR_MXISA_ZMMUL',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzxcfu_210',['CSR_MXISA_ZXCFU',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr0_211',['CSR_PMPADDR0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr1_212',['CSR_PMPADDR1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr10_213',['CSR_PMPADDR10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr11_214',['CSR_PMPADDR11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr12_215',['CSR_PMPADDR12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr13_216',['CSR_PMPADDR13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr14_217',['CSR_PMPADDR14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr15_218',['CSR_PMPADDR15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr2_219',['CSR_PMPADDR2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr3_220',['CSR_PMPADDR3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr4_221',['CSR_PMPADDR4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr5_222',['CSR_PMPADDR5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr6_223',['CSR_PMPADDR6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr7_224',['CSR_PMPADDR7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr8_225',['CSR_PMPADDR8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr9_226',['CSR_PMPADDR9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg0_227',['CSR_PMPCFG0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg1_228',['CSR_PMPCFG1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg2_229',['CSR_PMPCFG2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg3_230',['CSR_PMPCFG3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850',1,'neorv32_cpu_csr.h']]], + ['csr_5ftdata1_231',['CSR_TDATA1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57',1,'neorv32_cpu_csr.h']]], + ['csr_5ftdata2_232',['CSR_TDATA2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc',1,'neorv32_cpu_csr.h']]], + ['csr_5ftinfo_233',['CSR_TINFO',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b',1,'neorv32_cpu_csr.h']]], + ['csr_5ftselect_234',['CSR_TSELECT',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d',1,'neorv32_cpu_csr.h']]] +]; diff --git a/sw/search/enumvalues_1.js b/sw/search/enumvalues_1.js new file mode 100644 index 0000000000..e7a8b04b0c --- /dev/null +++ b/sw/search/enumvalues_1.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['dma_5fctrl_5fauto_0',['DMA_CTRL_AUTO',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fbusy_1',['DMA_CTRL_BUSY',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fdone_2',['DMA_CTRL_DONE',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fen_3',['DMA_CTRL_EN',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ferror_5frd_4',['DMA_CTRL_ERROR_RD',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ferror_5fwr_5',['DMA_CTRL_ERROR_WR',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffence_6',['DMA_CTRL_FENCE',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffirq_5fsel_5flsb_7',['DMA_CTRL_FIRQ_SEL_LSB',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffirq_5fsel_5fmsb_8',['DMA_CTRL_FIRQ_SEL_MSB',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffirq_5ftype_9',['DMA_CTRL_FIRQ_TYPE',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe',1,'neorv32_dma.h']]], + ['dma_5fstatus_5fbusy_10',['DMA_STATUS_BUSY',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d',1,'neorv32_dma.h']]], + ['dma_5fstatus_5ferr_5frd_11',['DMA_STATUS_ERR_RD',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492',1,'neorv32_dma.h']]], + ['dma_5fstatus_5ferr_5fwr_12',['DMA_STATUS_ERR_WR',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8',1,'neorv32_dma.h']]], + ['dma_5fstatus_5fidle_13',['DMA_STATUS_IDLE',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f',1,'neorv32_dma.h']]], + ['dma_5fttype_5fdst_5finc_14',['DMA_TTYPE_DST_INC',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da',1,'neorv32_dma.h']]], + ['dma_5fttype_5fendian_15',['DMA_TTYPE_ENDIAN',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802',1,'neorv32_dma.h']]], + ['dma_5fttype_5fnum_5flsb_16',['DMA_TTYPE_NUM_LSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450',1,'neorv32_dma.h']]], + ['dma_5fttype_5fnum_5fmsb_17',['DMA_TTYPE_NUM_MSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd',1,'neorv32_dma.h']]], + ['dma_5fttype_5fqsel_5flsb_18',['DMA_TTYPE_QSEL_LSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2',1,'neorv32_dma.h']]], + ['dma_5fttype_5fqsel_5fmsb_19',['DMA_TTYPE_QSEL_MSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5',1,'neorv32_dma.h']]], + ['dma_5fttype_5fsrc_5finc_20',['DMA_TTYPE_SRC_INC',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec',1,'neorv32_dma.h']]] +]; diff --git a/sw/search/enumvalues_2.js b/sw/search/enumvalues_2.js new file mode 100644 index 0000000000..e6f7c9021e --- /dev/null +++ b/sw/search/enumvalues_2.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['error_5fchecksum_0',['ERROR_CHECKSUM',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a471ebe6c0766abc6fa4e82a09bfdb985',1,'bootloader.c']]], + ['error_5fflash_1',['ERROR_FLASH',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a684d6723fa25e7651e13d99fb249363c',1,'bootloader.c']]], + ['error_5fsignature_2',['ERROR_SIGNATURE',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088ad41014563cb3ca69ab69b94d43e97caa',1,'bootloader.c']]], + ['error_5fsize_3',['ERROR_SIZE',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a2d77ed1c715fb969a1faa01c71625f2d',1,'bootloader.c']]], + ['exe_5foffset_5fchecksum_4',['EXE_OFFSET_CHECKSUM',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febabc27a855096a70dca0f8bc148a123be4',1,'bootloader.c']]], + ['exe_5foffset_5fdata_5',['EXE_OFFSET_DATA',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febaea032c54a21057710ef2021638972ce6',1,'bootloader.c']]], + ['exe_5foffset_5fsignature_6',['EXE_OFFSET_SIGNATURE',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feba61100996f309c45b8b628ade2e3acc7f',1,'bootloader.c']]], + ['exe_5foffset_5fsize_7',['EXE_OFFSET_SIZE',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febacc430caa4bff2fef4568c757893fe2fe',1,'bootloader.c']]], + ['exe_5fstream_5fflash_8',['EXE_STREAM_FLASH',['../bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83a98526cd8f81d570c57d98193b32cf114',1,'bootloader.c']]], + ['exe_5fstream_5fuart_9',['EXE_STREAM_UART',['../bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83ab149261ddf3f08e44e9d2538e384f58f',1,'bootloader.c']]] +]; diff --git a/sw/search/enumvalues_3.js b/sw/search/enumvalues_3.js new file mode 100644 index 0000000000..0df0a5b234 --- /dev/null +++ b/sw/search/enumvalues_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['flash_5fsreg_5fbusy_0',['FLASH_SREG_BUSY',['../bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa133cd87673ce9a612da494583e03dae9',1,'bootloader.c']]], + ['flash_5fsreg_5fwel_1',['FLASH_SREG_WEL',['../bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa22e8c983d74430ea0930e37781e88bf9',1,'bootloader.c']]] +]; diff --git a/sw/search/enumvalues_4.js b/sw/search/enumvalues_4.js new file mode 100644 index 0000000000..8d51681688 --- /dev/null +++ b/sw/search/enumvalues_4.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['gptmr_5fctrl_5fen_0',['GPTMR_CTRL_EN',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5firq_5fclr_1',['GPTMR_CTRL_IRQ_CLR',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5firq_5fpnd_2',['GPTMR_CTRL_IRQ_PND',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fmode_3',['GPTMR_CTRL_MODE',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fprsc0_4',['GPTMR_CTRL_PRSC0',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fprsc1_5',['GPTMR_CTRL_PRSC1',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fprsc2_6',['GPTMR_CTRL_PRSC2',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833',1,'neorv32_gptmr.h']]] +]; diff --git a/sw/search/enumvalues_5.js b/sw/search/enumvalues_5.js new file mode 100644 index 0000000000..8580a871a3 --- /dev/null +++ b/sw/search/enumvalues_5.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['hpmcnt_5fevent_5fbranch_0',['HPMCNT_EVENT_BRANCH',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fbranched_1',['HPMCNT_EVENT_BRANCHED',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fcompr_2',['HPMCNT_EVENT_COMPR',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fcy_3',['HPMCNT_EVENT_CY',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fir_4',['HPMCNT_EVENT_IR',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fload_5',['HPMCNT_EVENT_LOAD',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fstore_6',['HPMCNT_EVENT_STORE',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5ftm_7',['HPMCNT_EVENT_TM',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5ftrap_8',['HPMCNT_EVENT_TRAP',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fwait_5falu_9',['HPMCNT_EVENT_WAIT_ALU',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fwait_5fdis_10',['HPMCNT_EVENT_WAIT_DIS',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fwait_5flsu_11',['HPMCNT_EVENT_WAIT_LSU',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b',1,'neorv32_cpu_csr.h']]] +]; diff --git a/sw/search/enumvalues_6.js b/sw/search/enumvalues_6.js new file mode 100644 index 0000000000..9f98fd6357 --- /dev/null +++ b/sw/search/enumvalues_6.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['neoled_5fctrl_5fbufs_5f0_0',['NEOLED_CTRL_BUFS_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fbufs_5f1_1',['NEOLED_CTRL_BUFS_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fbufs_5f2_2',['NEOLED_CTRL_BUFS_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fbufs_5f3_3',['NEOLED_CTRL_BUFS_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fen_4',['NEOLED_CTRL_EN',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5firq_5fconf_5',['NEOLED_CTRL_IRQ_CONF',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fmode_6',['NEOLED_CTRL_MODE',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fprsc0_7',['NEOLED_CTRL_PRSC0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fprsc1_8',['NEOLED_CTRL_PRSC1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fprsc2_9',['NEOLED_CTRL_PRSC2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fstrobe_10',['NEOLED_CTRL_STROBE',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f0_11',['NEOLED_CTRL_T_ONE_H_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f1_12',['NEOLED_CTRL_T_ONE_H_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f2_13',['NEOLED_CTRL_T_ONE_H_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f3_14',['NEOLED_CTRL_T_ONE_H_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f4_15',['NEOLED_CTRL_T_ONE_H_4',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f0_16',['NEOLED_CTRL_T_TOT_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f1_17',['NEOLED_CTRL_T_TOT_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f2_18',['NEOLED_CTRL_T_TOT_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f3_19',['NEOLED_CTRL_T_TOT_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f4_20',['NEOLED_CTRL_T_TOT_4',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f0_21',['NEOLED_CTRL_T_ZERO_H_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f1_22',['NEOLED_CTRL_T_ZERO_H_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f2_23',['NEOLED_CTRL_T_ZERO_H_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f3_24',['NEOLED_CTRL_T_ZERO_H_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f4_25',['NEOLED_CTRL_T_ZERO_H_4',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5fbusy_26',['NEOLED_CTRL_TX_BUSY',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5fempty_27',['NEOLED_CTRL_TX_EMPTY',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5ffull_28',['NEOLED_CTRL_TX_FULL',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5fhalf_29',['NEOLED_CTRL_TX_HALF',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73',1,'neorv32_neoled.h']]] +]; diff --git a/sw/search/enumvalues_7.js b/sw/search/enumvalues_7.js new file mode 100644 index 0000000000..ac29833abe --- /dev/null +++ b/sw/search/enumvalues_7.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['onewire_5fctrl_5fbusy_0',['ONEWIRE_CTRL_BUSY',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclear_1',['ONEWIRE_CTRL_CLEAR',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831adfe5373712e0c02da3aa5dfd8ca5e51e',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv0_2',['ONEWIRE_CTRL_CLKDIV0',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv7_3',['ONEWIRE_CTRL_CLKDIV7',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fen_4',['ONEWIRE_CTRL_EN',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5ffifo_5flsb_5',['ONEWIRE_CTRL_FIFO_LSB',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a3903370331c6ae15cd37381bc64b6016',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5ffifo_5fmsb_6',['ONEWIRE_CTRL_FIFO_MSB',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a101cd15b58450d9740ab92bb5c40ba63',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fprsc0_7',['ONEWIRE_CTRL_PRSC0',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fprsc1_8',['ONEWIRE_CTRL_PRSC1',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5frx_5favail_9',['ONEWIRE_CTRL_RX_AVAIL',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a74d1259bee8e3e1d18cc69a2d8ce4749',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fsense_10',['ONEWIRE_CTRL_SENSE',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5ftx_5ffull_11',['ONEWIRE_CTRL_TX_FULL',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a5db9e3557d447c62039ad3437caa9884',1,'neorv32_onewire.h']]], + ['onewire_5fdcmd_5fcmd_5fhi_12',['ONEWIRE_DCMD_CMD_HI',['../neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aeb1f95a9b6f3b4a295578e874a1ad5d0',1,'neorv32_onewire.h']]], + ['onewire_5fdcmd_5fcmd_5flo_13',['ONEWIRE_DCMD_CMD_LO',['../neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26ac095ac82ef2be6e67b5c9f6b9f5c4379',1,'neorv32_onewire.h']]], + ['onewire_5fdcmd_5fdata_5flsb_14',['ONEWIRE_DCMD_DATA_LSB',['../neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a035b3e4021a1959a7cbd8954e838c324',1,'neorv32_onewire.h']]], + ['onewire_5fdcmd_5fdata_5fmsb_15',['ONEWIRE_DCMD_DATA_MSB',['../neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26a36fe4def67f02a3d06dbe47231d6f21d',1,'neorv32_onewire.h']]], + ['onewire_5fdcmd_5fpresence_16',['ONEWIRE_DCMD_PRESENCE',['../neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26aa4cd11972bbc09f7a7eab8e129b280b4',1,'neorv32_onewire.h']]] +]; diff --git a/sw/search/enumvalues_8.js b/sw/search/enumvalues_8.js new file mode 100644 index 0000000000..87fbae1990 --- /dev/null +++ b/sw/search/enumvalues_8.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['pmp_5fna4_0',['PMP_NA4',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892',1,'neorv32_cpu_csr.h']]], + ['pmp_5fnapot_1',['PMP_NAPOT',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820',1,'neorv32_cpu_csr.h']]], + ['pmp_5foff_2',['PMP_OFF',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4',1,'neorv32_cpu_csr.h']]], + ['pmp_5ftor_3',['PMP_TOR',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fa_5flsb_4',['PMPCFG_A_LSB',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fa_5fmsb_5',['PMPCFG_A_MSB',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fl_6',['PMPCFG_L',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fr_7',['PMPCFG_R',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fw_8',['PMPCFG_W',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fx_9',['PMPCFG_X',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d',1,'neorv32_cpu_csr.h']]], + ['pwm_5fcfg_5fcdiv_5flsb_10',['PWM_CFG_CDIV_LSB',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175acc7e31e4b3f0e7ab0a0306a107109b4f',1,'neorv32_pwm.h']]], + ['pwm_5fcfg_5fcdiv_5fmsb_11',['PWM_CFG_CDIV_MSB',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a6f741e102b7e15e946714360e81f4bb2',1,'neorv32_pwm.h']]], + ['pwm_5fcfg_5fduty_5flsb_12',['PWM_CFG_DUTY_LSB',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a9aa8249716b15c92368c93b36bf7db43',1,'neorv32_pwm.h']]], + ['pwm_5fcfg_5fduty_5fmsb_13',['PWM_CFG_DUTY_MSB',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175af5d9dcb5740c39cfe8f9bfb5c1b66341',1,'neorv32_pwm.h']]], + ['pwm_5fcfg_5fen_14',['PWM_CFG_EN',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175a2b766bfa9653705025b745e0809c432a',1,'neorv32_pwm.h']]], + ['pwm_5fcfg_5fprsc_5flsb_15',['PWM_CFG_PRSC_LSB',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aefe2211fe39acffb40ca738639b3d5f5',1,'neorv32_pwm.h']]], + ['pwm_5fcfg_5fprsc_5fmsb_16',['PWM_CFG_PRSC_MSB',['../neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175aa100b419699cd3c6787a9168a3ffec3d',1,'neorv32_pwm.h']]] +]; diff --git a/sw/search/enumvalues_9.js b/sw/search/enumvalues_9.js new file mode 100644 index 0000000000..34d19a066c --- /dev/null +++ b/sw/search/enumvalues_9.js @@ -0,0 +1,32 @@ +var searchData= +[ + ['rte_5ftrap_5fbreakpoint_0',['RTE_TRAP_BREAKPOINT',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f0_1',['RTE_TRAP_FIRQ_0',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f1_2',['RTE_TRAP_FIRQ_1',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f10_3',['RTE_TRAP_FIRQ_10',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f11_4',['RTE_TRAP_FIRQ_11',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f12_5',['RTE_TRAP_FIRQ_12',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f13_6',['RTE_TRAP_FIRQ_13',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f14_7',['RTE_TRAP_FIRQ_14',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f15_8',['RTE_TRAP_FIRQ_15',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f2_9',['RTE_TRAP_FIRQ_2',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f3_10',['RTE_TRAP_FIRQ_3',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f4_11',['RTE_TRAP_FIRQ_4',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f5_12',['RTE_TRAP_FIRQ_5',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f6_13',['RTE_TRAP_FIRQ_6',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f7_14',['RTE_TRAP_FIRQ_7',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f8_15',['RTE_TRAP_FIRQ_8',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f9_16',['RTE_TRAP_FIRQ_9',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fi_5faccess_17',['RTE_TRAP_I_ACCESS',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fi_5fillegal_18',['RTE_TRAP_I_ILLEGAL',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fi_5fmisaligned_19',['RTE_TRAP_I_MISALIGNED',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fl_5faccess_20',['RTE_TRAP_L_ACCESS',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fl_5fmisaligned_21',['RTE_TRAP_L_MISALIGNED',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmei_22',['RTE_TRAP_MEI',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmenv_5fcall_23',['RTE_TRAP_MENV_CALL',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmsi_24',['RTE_TRAP_MSI',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmti_25',['RTE_TRAP_MTI',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fs_5faccess_26',['RTE_TRAP_S_ACCESS',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fs_5fmisaligned_27',['RTE_TRAP_S_MISALIGNED',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fuenv_5fcall_28',['RTE_TRAP_UENV_CALL',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc',1,'neorv32_rte.h']]] +]; diff --git a/sw/search/enumvalues_a.js b/sw/search/enumvalues_a.js new file mode 100644 index 0000000000..be0a6468e4 --- /dev/null +++ b/sw/search/enumvalues_a.js @@ -0,0 +1,133 @@ +var searchData= +[ + ['sdi_5fctrl_5fcs_5factive_0',['SDI_CTRL_CS_ACTIVE',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5fen_1',['SDI_CTRL_EN',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ffifo_5flsb_2',['SDI_CTRL_FIFO_LSB',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ffifo_5fmsb_3',['SDI_CTRL_FIFO_MSB',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5frx_5favail_4',['SDI_CTRL_IRQ_RX_AVAIL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5frx_5ffull_5',['SDI_CTRL_IRQ_RX_FULL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5frx_5fhalf_6',['SDI_CTRL_IRQ_RX_HALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5ftx_5fempty_7',['SDI_CTRL_IRQ_TX_EMPTY',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5ftx_5fnhalf_8',['SDI_CTRL_IRQ_TX_NHALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5frx_5favail_9',['SDI_CTRL_RX_AVAIL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5frx_5ffull_10',['SDI_CTRL_RX_FULL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5frx_5fhalf_11',['SDI_CTRL_RX_HALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ftx_5fempty_12',['SDI_CTRL_TX_EMPTY',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ftx_5ffull_13',['SDI_CTRL_TX_FULL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ftx_5fnhalf_14',['SDI_CTRL_TX_NHALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9',1,'neorv32_sdi.h']]], + ['slink_5fctrl_5fen_15',['SLINK_CTRL_EN',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5frx_5ffull_16',['SLINK_CTRL_IRQ_RX_FULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5frx_5fhalf_17',['SLINK_CTRL_IRQ_RX_HALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5frx_5fnempty_18',['SLINK_CTRL_IRQ_RX_NEMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5ftx_5fempty_19',['SLINK_CTRL_IRQ_TX_EMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5ftx_5fnfull_20',['SLINK_CTRL_IRQ_TX_NFULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5ftx_5fnhalf_21',['SLINK_CTRL_IRQ_TX_NHALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5fclr_22',['SLINK_CTRL_RX_CLR',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5fempty_23',['SLINK_CTRL_RX_EMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5ffifo_5flsb_24',['SLINK_CTRL_RX_FIFO_LSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5ffifo_5fmsb_25',['SLINK_CTRL_RX_FIFO_MSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5ffull_26',['SLINK_CTRL_RX_FULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5fhalf_27',['SLINK_CTRL_RX_HALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5flast_28',['SLINK_CTRL_RX_LAST',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5fclr_29',['SLINK_CTRL_TX_CLR',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5fempty_30',['SLINK_CTRL_TX_EMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5ffifo_5flsb_31',['SLINK_CTRL_TX_FIFO_LSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5ffifo_5fmsb_32',['SLINK_CTRL_TX_FIFO_MSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5ffull_33',['SLINK_CTRL_TX_FULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5fhalf_34',['SLINK_CTRL_TX_HALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78',1,'neorv32_slink.h']]], + ['slink_5ffifo_5fempty_35',['SLINK_FIFO_EMPTY',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c',1,'neorv32_slink.h']]], + ['slink_5ffifo_5ffull_36',['SLINK_FIFO_FULL',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211',1,'neorv32_slink.h']]], + ['slink_5ffifo_5fhalf_37',['SLINK_FIFO_HALF',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9',1,'neorv32_slink.h']]], + ['slink_5froute_5fdst_5flsb_38',['SLINK_ROUTE_DST_LSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80',1,'neorv32_slink.h']]], + ['slink_5froute_5fdst_5fmsb_39',['SLINK_ROUTE_DST_MSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1',1,'neorv32_slink.h']]], + ['slink_5froute_5fsrc_5flsb_40',['SLINK_ROUTE_SRC_LSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2',1,'neorv32_slink.h']]], + ['slink_5froute_5fsrc_5fmsb_41',['SLINK_ROUTE_SRC_MSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983',1,'neorv32_slink.h']]], + ['spi_5fcs_5factive_42',['SPI_CS_ACTIVE',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fbusy_43',['SPI_CTRL_BUSY',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv0_44',['SPI_CTRL_CDIV0',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv1_45',['SPI_CTRL_CDIV1',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv2_46',['SPI_CTRL_CDIV2',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv3_47',['SPI_CTRL_CDIV3',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcpha_48',['SPI_CTRL_CPHA',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcpol_49',['SPI_CTRL_CPOL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fen_50',['SPI_CTRL_EN',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ffifo_5flsb_51',['SPI_CTRL_FIFO_LSB',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ffifo_5fmsb_52',['SPI_CTRL_FIFO_MSB',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fhighspeed_53',['SPI_CTRL_HIGHSPEED',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5fidle_54',['SPI_CTRL_IRQ_IDLE',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5frx_5favail_55',['SPI_CTRL_IRQ_RX_AVAIL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5ftx_5fempty_56',['SPI_CTRL_IRQ_TX_EMPTY',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5ftx_5fhalf_57',['SPI_CTRL_IRQ_TX_HALF',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fprsc0_58',['SPI_CTRL_PRSC0',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fprsc1_59',['SPI_CTRL_PRSC1',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fprsc2_60',['SPI_CTRL_PRSC2',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a',1,'neorv32_spi.h']]], + ['spi_5fctrl_5frx_5favail_61',['SPI_CTRL_RX_AVAIL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ftx_5fempty_62',['SPI_CTRL_TX_EMPTY',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ftx_5ffull_63',['SPI_CTRL_TX_FULL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ftx_5fnhalf_64',['SPI_CTRL_TX_NHALF',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4',1,'neorv32_spi.h']]], + ['spi_5fdata_5fcmd_65',['SPI_DATA_CMD',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6',1,'neorv32_spi.h']]], + ['spi_5fdata_5fcsen_66',['SPI_DATA_CSEN',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2',1,'neorv32_spi.h']]], + ['spi_5fdata_5flsb_67',['SPI_DATA_LSB',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4',1,'neorv32_spi.h']]], + ['spi_5fdata_5fmsb_68',['SPI_DATA_MSB',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600',1,'neorv32_spi.h']]], + ['spi_5fflash_5fcmd_5fpage_5fprogram_69',['SPI_FLASH_CMD_PAGE_PROGRAM',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda31c8d698c551d081a0adeafb988ed49e',1,'bootloader.c']]], + ['spi_5fflash_5fcmd_5fread_70',['SPI_FLASH_CMD_READ',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda6c1994ba2cfd97e0c77dcdf8bbdfdfa6',1,'SPI_FLASH_CMD_READ:&#160;bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea6c1994ba2cfd97e0c77dcdf8bbdfdfa6',1,'SPI_FLASH_CMD_READ:&#160;main.c']]], + ['spi_5fflash_5fcmd_5fread_5fstatus_71',['SPI_FLASH_CMD_READ_STATUS',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda5fbc6551a10549b38e5ab4a76c38f214',1,'SPI_FLASH_CMD_READ_STATUS:&#160;bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea5fbc6551a10549b38e5ab4a76c38f214',1,'SPI_FLASH_CMD_READ_STATUS:&#160;main.c']]], + ['spi_5fflash_5fcmd_5fsector_5ferase_72',['SPI_FLASH_CMD_SECTOR_ERASE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedacd62141d6331f66e31bd252e2a92b836',1,'SPI_FLASH_CMD_SECTOR_ERASE:&#160;bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eacd62141d6331f66e31bd252e2a92b836',1,'SPI_FLASH_CMD_SECTOR_ERASE:&#160;main.c']]], + ['spi_5fflash_5fcmd_5fwake_73',['SPI_FLASH_CMD_WAKE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda25bf16cd42b1fd1d95e0957b5be137d2',1,'bootloader.c']]], + ['spi_5fflash_5fcmd_5fwrite_74',['SPI_FLASH_CMD_WRITE',['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea528cebc54176f6f4c0a8f7f16fb28ca1',1,'main.c']]], + ['spi_5fflash_5fcmd_5fwrite_5fdisable_75',['SPI_FLASH_CMD_WRITE_DISABLE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedaa91d3c1d788b21fc798a5976c9f0da77',1,'SPI_FLASH_CMD_WRITE_DISABLE:&#160;bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eaa91d3c1d788b21fc798a5976c9f0da77',1,'SPI_FLASH_CMD_WRITE_DISABLE:&#160;main.c']]], + ['spi_5fflash_5fcmd_5fwrite_5fenable_76',['SPI_FLASH_CMD_WRITE_ENABLE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda152e091e93778f217f8b766298351513',1,'SPI_FLASH_CMD_WRITE_ENABLE:&#160;bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea152e091e93778f217f8b766298351513',1,'SPI_FLASH_CMD_WRITE_ENABLE:&#160;main.c']]], + ['spi_5fflash_5fsreg_5fwel_77',['SPI_FLASH_SREG_WEL',['../demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08ea90f3b76faed13819ee13e574d1bff0c1',1,'main.c']]], + ['spi_5fflash_5fsreg_5fwip_78',['SPI_FLASH_SREG_WIP',['../demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08eac84de63bbea3989c71bcc92d1d01cfa4',1,'main.c']]], + ['sysinfo_5fcache_5fdata_5fblock_5fsize_5f0_79',['SYSINFO_CACHE_DATA_BLOCK_SIZE_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa8a2c7079b44f4255196de49d6d59afdb',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fdata_5fblock_5fsize_5f3_80',['SYSINFO_CACHE_DATA_BLOCK_SIZE_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaaec544d85ce3296ca9e97e833e20936e',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fdata_5fnum_5fblocks_5f0_81',['SYSINFO_CACHE_DATA_NUM_BLOCKS_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabb743d3ca41bf44aa6ff188ec898cfb8',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fdata_5fnum_5fblocks_5f3_82',['SYSINFO_CACHE_DATA_NUM_BLOCKS_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa5778928b290b3b1cba42412de4dabf96',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5finst_5fblock_5fsize_5f0_83',['SYSINFO_CACHE_INST_BLOCK_SIZE_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa1bdccae04b3bd84988297c16ffbefaf2',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5finst_5fblock_5fsize_5f3_84',['SYSINFO_CACHE_INST_BLOCK_SIZE_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf4a91f729e16adc72c2419d9ad3807e5',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5finst_5fnum_5fblocks_5f0_85',['SYSINFO_CACHE_INST_NUM_BLOCKS_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaabd13283ebd48dee48aee2cff3a560fe9',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5finst_5fnum_5fblocks_5f3_86',['SYSINFO_CACHE_INST_NUM_BLOCKS_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa02f235d7d2fc30c4ae3a383a631d9060',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxbus_5fblock_5fsize_5f0_87',['SYSINFO_CACHE_XBUS_BLOCK_SIZE_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa3f6e68cdf6bb641902a9a6d32c1f9d9e',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxbus_5fblock_5fsize_5f3_88',['SYSINFO_CACHE_XBUS_BLOCK_SIZE_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa908c60a836b03129098cb70fe2a860a1',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxbus_5fnum_5fblocks_5f0_89',['SYSINFO_CACHE_XBUS_NUM_BLOCKS_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa73553a14d3425498be9d3802ca5f1459',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxbus_5fnum_5fblocks_5f3_90',['SYSINFO_CACHE_XBUS_NUM_BLOCKS_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaade7f119164ff2c3800b4464a65ca247b',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxip_5fblock_5fsize_5f0_91',['SYSINFO_CACHE_XIP_BLOCK_SIZE_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaea0a88adaa9d0b5e1f4e5cca630ed6f8',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxip_5fblock_5fsize_5f3_92',['SYSINFO_CACHE_XIP_BLOCK_SIZE_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa44d4d12c0395e924b8bf7dc40059bfba',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxip_5fnum_5fblocks_5f0_93',['SYSINFO_CACHE_XIP_NUM_BLOCKS_0',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaa90ae265a72ea53d99b474798e721c317',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fcache_5fxip_5fnum_5fblocks_5f3_94',['SYSINFO_CACHE_XIP_NUM_BLOCKS_3',['../neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1eaaf88eacb3ed63d5a048a554927812460b',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fmem_5fboot_95',['SYSINFO_MEM_BOOT',['../neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa0f4e1e1c9320949bdacd2bc7ba6179f7',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fmem_5fdmem_96',['SYSINFO_MEM_DMEM',['../neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa8a46c064e5a1339978a5fb1f41301894',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fmem_5fimem_97',['SYSINFO_MEM_IMEM',['../neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa807d9e70e78e2ba3d5bfb902cc1cdc53',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fmem_5fres_98',['SYSINFO_MEM_res',['../neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5fa1671eeca5b3a6d1c8069658e0b7bc182',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fbootloader_99',['SYSINFO_SOC_BOOTLOADER',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a6899a935ae8c4aef08d828f250342e9a',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fdcache_100',['SYSINFO_SOC_DCACHE',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a9823c2c0945997ed0d7e5eb473d81e41',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5ficache_101',['SYSINFO_SOC_ICACHE',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a124c4c2b101008b0e3f1d82efec11c26',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fimem_5from_102',['SYSINFO_SOC_IMEM_ROM',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aaeafc2591f2cc95e9ff1fdee1e1c26e8',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fcfs_103',['SYSINFO_SOC_IO_CFS',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ae725c2452eeb33e3230dcfb3450598e6',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fclint_104',['SYSINFO_SOC_IO_CLINT',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08adc914c065f5b51ae0881a6b62b54a3db',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fcrc_105',['SYSINFO_SOC_IO_CRC',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ab89821e2c61ccb9db6324ee503f9dfa6',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fdma_106',['SYSINFO_SOC_IO_DMA',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a24658727efef9747414b5da8f26de66d',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fgpio_107',['SYSINFO_SOC_IO_GPIO',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a62a2337b33a2f65b6efd5c91e699c2d1',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fgptmr_108',['SYSINFO_SOC_IO_GPTMR',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4aea6c006f9c999720b1dd6166a01afe',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fneoled_109',['SYSINFO_SOC_IO_NEOLED',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a164c5c9dc702b4b5fc71110fc047c7f1',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fonewire_110',['SYSINFO_SOC_IO_ONEWIRE',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08aa8ec3b39b36f13ee4f97a72700e881a8',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fpwm_111',['SYSINFO_SOC_IO_PWM',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a8dc202143c3b13850bccf16380466399',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fsdi_112',['SYSINFO_SOC_IO_SDI',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a84088f6664a3dc19041dfad5b551ced9',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fslink_113',['SYSINFO_SOC_IO_SLINK',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a26b25f1b47f62e98ff0920544f56b57e',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fspi_114',['SYSINFO_SOC_IO_SPI',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a4cf4b1a83a4b52efbf26eace21f5ab20',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5ftrng_115',['SYSINFO_SOC_IO_TRNG',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a44892276837b2b1bbe6ef9faa715ad5d',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5ftwd_116',['SYSINFO_SOC_IO_TWD',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3bbac94e7f1f021f14cefa929b79e9d9',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5ftwi_117',['SYSINFO_SOC_IO_TWI',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a179401244ac42bc4aac3108ca9bbb9c3',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fuart0_118',['SYSINFO_SOC_IO_UART0',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a244710794e00c93e91a7f13d533cb139',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fuart1_119',['SYSINFO_SOC_IO_UART1',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a52b0ca1ef2af5e9c9a0250440b2de9e5',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fwdt_120',['SYSINFO_SOC_IO_WDT',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08afc964f39427cbc4090a960967eada7be',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fio_5fxirq_121',['SYSINFO_SOC_IO_XIRQ',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ad1b8d38e3715485242756cd37b7c1fe9',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fmem_5fint_5fdmem_122',['SYSINFO_SOC_MEM_INT_DMEM',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a58ff6e112c09f798be014fdf84385135',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fmem_5fint_5fimem_123',['SYSINFO_SOC_MEM_INT_IMEM',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a1c2fbb0cc03a1df2e5e8a472f3f1ca57',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5focd_124',['SYSINFO_SOC_OCD',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a3e50b1c24eec0f1811d5630e6dd33e93',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5focd_5fauth_125',['SYSINFO_SOC_OCD_AUTH',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a161826adba27e19186c5005626c160b8',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fxbus_126',['SYSINFO_SOC_XBUS',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08add6721803c9d79f1e50248927ba30e16',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fxbus_5fcache_127',['SYSINFO_SOC_XBUS_CACHE',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a579f26ab04d4fd9af8e419df465695ca',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fxip_128',['SYSINFO_SOC_XIP',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08a516a2e254ae63e017caefbeed20f54e9',1,'neorv32_sysinfo.h']]], + ['sysinfo_5fsoc_5fxip_5fcache_129',['SYSINFO_SOC_XIP_CACHE',['../neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08ac943fc33a2c1c25c3ab075228b87c0ef',1,'neorv32_sysinfo.h']]] +]; diff --git a/sw/search/enumvalues_b.js b/sw/search/enumvalues_b.js new file mode 100644 index 0000000000..1786941920 --- /dev/null +++ b/sw/search/enumvalues_b.js @@ -0,0 +1,81 @@ +var searchData= +[ + ['trap_5fcode_5fbreakpoint_0',['TRAP_CODE_BREAKPOINT',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f0_1',['TRAP_CODE_FIRQ_0',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f1_2',['TRAP_CODE_FIRQ_1',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f10_3',['TRAP_CODE_FIRQ_10',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f11_4',['TRAP_CODE_FIRQ_11',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f12_5',['TRAP_CODE_FIRQ_12',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f13_6',['TRAP_CODE_FIRQ_13',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f14_7',['TRAP_CODE_FIRQ_14',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f15_8',['TRAP_CODE_FIRQ_15',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f2_9',['TRAP_CODE_FIRQ_2',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f3_10',['TRAP_CODE_FIRQ_3',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f4_11',['TRAP_CODE_FIRQ_4',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f5_12',['TRAP_CODE_FIRQ_5',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f6_13',['TRAP_CODE_FIRQ_6',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f7_14',['TRAP_CODE_FIRQ_7',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f8_15',['TRAP_CODE_FIRQ_8',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f9_16',['TRAP_CODE_FIRQ_9',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fi_5faccess_17',['TRAP_CODE_I_ACCESS',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fi_5fillegal_18',['TRAP_CODE_I_ILLEGAL',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fi_5fmisaligned_19',['TRAP_CODE_I_MISALIGNED',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fl_5faccess_20',['TRAP_CODE_L_ACCESS',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fl_5fmisaligned_21',['TRAP_CODE_L_MISALIGNED',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmei_22',['TRAP_CODE_MEI',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmenv_5fcall_23',['TRAP_CODE_MENV_CALL',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmsi_24',['TRAP_CODE_MSI',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmti_25',['TRAP_CODE_MTI',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fs_5faccess_26',['TRAP_CODE_S_ACCESS',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fs_5fmisaligned_27',['TRAP_CODE_S_MISALIGNED',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fuenv_5fcall_28',['TRAP_CODE_UENV_CALL',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02',1,'neorv32_cpu_csr.h']]], + ['trng_5fctrl_5favail_29',['TRNG_CTRL_AVAIL',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aac0a6c8451985a61dc522509ded22695f',1,'neorv32_trng.h']]], + ['trng_5fctrl_5fen_30',['TRNG_CTRL_EN',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d',1,'neorv32_trng.h']]], + ['trng_5fctrl_5ffifo_5fclr_31',['TRNG_CTRL_FIFO_CLR',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac',1,'neorv32_trng.h']]], + ['trng_5fctrl_5ffifo_5flsb_32',['TRNG_CTRL_FIFO_LSB',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52',1,'neorv32_trng.h']]], + ['trng_5fctrl_5ffifo_5fmsb_33',['TRNG_CTRL_FIFO_MSB',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5',1,'neorv32_trng.h']]], + ['trng_5fctrl_5fsim_5fmode_34',['TRNG_CTRL_SIM_MODE',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5',1,'neorv32_trng.h']]], + ['trng_5fdata_5flsb_35',['TRNG_DATA_LSB',['../neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac2a7a79da7010342366ea97a2af2ebe6',1,'neorv32_trng.h']]], + ['trng_5fdata_5fmsb_36',['TRNG_DATA_MSB',['../neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2ac73221cb67facda1db8fc9591e2f6364',1,'neorv32_trng.h']]], + ['twd_5fctrl_5fbusy_37',['TWD_CTRL_BUSY',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a71eb18275ffd7138251049c39294f4f3',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fclr_5frx_38',['TWD_CTRL_CLR_RX',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a1a951d8cf167b79bffdd8f19033ba657',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fclr_5ftx_39',['TWD_CTRL_CLR_TX',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ab2d8eef73a9cc3de9bf99c5bf9c7114b',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fdev_5faddr0_40',['TWD_CTRL_DEV_ADDR0',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a3cc82a5ab8ad0ac4cff85b40d2ed6ffe',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fdev_5faddr6_41',['TWD_CTRL_DEV_ADDR6',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18abea8949a5164bd28f1504a34dadb17c2',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fen_42',['TWD_CTRL_EN',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aded9f8ad7a2e0217e73d8484246157b2',1,'neorv32_twd.h']]], + ['twd_5fctrl_5ffifo_5flsb_43',['TWD_CTRL_FIFO_LSB',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a943bbe073ea36da264cb16f5a9f2acc9',1,'neorv32_twd.h']]], + ['twd_5fctrl_5ffifo_5fmsb_44',['TWD_CTRL_FIFO_MSB',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af121649145e5403bf44246d416c26530',1,'neorv32_twd.h']]], + ['twd_5fctrl_5ffsel_45',['TWD_CTRL_FSEL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aef0fcc46f5595fa73fe547f0737f85e6',1,'neorv32_twd.h']]], + ['twd_5fctrl_5firq_5frx_5favail_46',['TWD_CTRL_IRQ_RX_AVAIL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad59552e7f3c7c747307f71e78ac1c00b',1,'neorv32_twd.h']]], + ['twd_5fctrl_5firq_5frx_5ffull_47',['TWD_CTRL_IRQ_RX_FULL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18af6d6b5bda034fc7af54036c95b94c01a',1,'neorv32_twd.h']]], + ['twd_5fctrl_5firq_5ftx_5fempty_48',['TWD_CTRL_IRQ_TX_EMPTY',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a73bfda5ccd72ba0c8deed6d848013757',1,'neorv32_twd.h']]], + ['twd_5fctrl_5frx_5favail_49',['TWD_CTRL_RX_AVAIL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18aaf31cc771b97f6b1f4d2da2347f43878',1,'neorv32_twd.h']]], + ['twd_5fctrl_5frx_5ffull_50',['TWD_CTRL_RX_FULL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18ad1360350bafec23f10e28ffddefa625a',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fsense_5fscl_51',['TWD_CTRL_SENSE_SCL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a8816adbecd0c929c88134e9e41efcf5c',1,'neorv32_twd.h']]], + ['twd_5fctrl_5fsense_5fsda_52',['TWD_CTRL_SENSE_SDA',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18acc0cdd72b63e7a029e97ae942754958c',1,'neorv32_twd.h']]], + ['twd_5fctrl_5ftx_5fempty_53',['TWD_CTRL_TX_EMPTY',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a428ca1617d4bc287fbf03bfc74d12dfd',1,'neorv32_twd.h']]], + ['twd_5fctrl_5ftx_5ffull_54',['TWD_CTRL_TX_FULL',['../neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18a243f36178c91f94ccc848399a3b715b5',1,'neorv32_twd.h']]], + ['twd_5fdata_5flsb_55',['TWD_DATA_LSB',['../neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a5f5e055b2d8ea968da1670251b70f824',1,'neorv32_twd.h']]], + ['twd_5fdata_5fmsb_56',['TWD_DATA_MSB',['../neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8a8f40d28bfc00d40ba03560bf44d47829',1,'neorv32_twd.h']]], + ['twi_5fctrl_5fbusy_57',['TWI_CTRL_BUSY',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv0_58',['TWI_CTRL_CDIV0',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv1_59',['TWI_CTRL_CDIV1',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv2_60',['TWI_CTRL_CDIV2',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv3_61',['TWI_CTRL_CDIV3',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fclkstr_62',['TWI_CTRL_CLKSTR',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fen_63',['TWI_CTRL_EN',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694',1,'neorv32_twi.h']]], + ['twi_5fctrl_5ffifo_5flsb_64',['TWI_CTRL_FIFO_LSB',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb',1,'neorv32_twi.h']]], + ['twi_5fctrl_5ffifo_5fmsb_65',['TWI_CTRL_FIFO_MSB',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fprsc0_66',['TWI_CTRL_PRSC0',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fprsc1_67',['TWI_CTRL_PRSC1',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fprsc2_68',['TWI_CTRL_PRSC2',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31',1,'neorv32_twi.h']]], + ['twi_5fctrl_5frx_5favail_69',['TWI_CTRL_RX_AVAIL',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fsense_5fscl_70',['TWI_CTRL_SENSE_SCL',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa51ea52c7ad18f1a8bcb6c2a979802107',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fsense_5fsda_71',['TWI_CTRL_SENSE_SDA',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaf715b63c5c3edbd1e61766df53c2dd6c',1,'neorv32_twi.h']]], + ['twi_5fctrl_5ftx_5ffull_72',['TWI_CTRL_TX_FULL',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fack_73',['TWI_DCMD_ACK',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fcmd_5fhi_74',['TWI_DCMD_CMD_HI',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fcmd_5flo_75',['TWI_DCMD_CMD_LO',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5flsb_76',['TWI_DCMD_LSB',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fmsb_77',['TWI_DCMD_MSB',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d',1,'neorv32_twi.h']]] +]; diff --git a/sw/search/enumvalues_c.js b/sw/search/enumvalues_c.js new file mode 100644 index 0000000000..7d68973c21 --- /dev/null +++ b/sw/search/enumvalues_c.js @@ -0,0 +1,40 @@ +var searchData= +[ + ['uart_5fctrl_5fbaud0_0',['UART_CTRL_BAUD0',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud1_1',['UART_CTRL_BAUD1',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud2_2',['UART_CTRL_BAUD2',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud3_3',['UART_CTRL_BAUD3',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud4_4',['UART_CTRL_BAUD4',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud5_5',['UART_CTRL_BAUD5',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud6_6',['UART_CTRL_BAUD6',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud7_7',['UART_CTRL_BAUD7',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud8_8',['UART_CTRL_BAUD8',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud9_9',['UART_CTRL_BAUD9',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fen_10',['UART_CTRL_EN',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fhwfc_5fen_11',['UART_CTRL_HWFC_EN',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5frx_5ffull_12',['UART_CTRL_IRQ_RX_FULL',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5frx_5fhalf_13',['UART_CTRL_IRQ_RX_HALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5frx_5fnempty_14',['UART_CTRL_IRQ_RX_NEMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5ftx_5fempty_15',['UART_CTRL_IRQ_TX_EMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5ftx_5fnhalf_16',['UART_CTRL_IRQ_TX_NHALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fprsc0_17',['UART_CTRL_PRSC0',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fprsc1_18',['UART_CTRL_PRSC1',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fprsc2_19',['UART_CTRL_PRSC2',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fclr_20',['UART_CTRL_RX_CLR',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5ffull_21',['UART_CTRL_RX_FULL',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fhalf_22',['UART_CTRL_RX_HALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fnempty_23',['UART_CTRL_RX_NEMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fover_24',['UART_CTRL_RX_OVER',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fsim_5fmode_25',['UART_CTRL_SIM_MODE',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fbusy_26',['UART_CTRL_TX_BUSY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fclr_27',['UART_CTRL_TX_CLR',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fempty_28',['UART_CTRL_TX_EMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5ffull_29',['UART_CTRL_TX_FULL',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fnhalf_30',['UART_CTRL_TX_NHALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9',1,'neorv32_uart.h']]], + ['uart_5fdata_5frtx_5flsb_31',['UART_DATA_RTX_LSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195',1,'neorv32_uart.h']]], + ['uart_5fdata_5frtx_5fmsb_32',['UART_DATA_RTX_MSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb',1,'neorv32_uart.h']]], + ['uart_5fdata_5frx_5ffifo_5fsize_5flsb_33',['UART_DATA_RX_FIFO_SIZE_LSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef',1,'neorv32_uart.h']]], + ['uart_5fdata_5frx_5ffifo_5fsize_5fmsb_34',['UART_DATA_RX_FIFO_SIZE_MSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225',1,'neorv32_uart.h']]], + ['uart_5fdata_5ftx_5ffifo_5fsize_5flsb_35',['UART_DATA_TX_FIFO_SIZE_LSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e',1,'neorv32_uart.h']]], + ['uart_5fdata_5ftx_5ffifo_5fsize_5fmsb_36',['UART_DATA_TX_FIFO_SIZE_MSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529',1,'neorv32_uart.h']]] +]; diff --git a/sw/search/enumvalues_d.js b/sw/search/enumvalues_d.js new file mode 100644 index 0000000000..dc74b017cb --- /dev/null +++ b/sw/search/enumvalues_d.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['wdt_5fctrl_5fdben_0',['WDT_CTRL_DBEN',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5fen_1',['WDT_CTRL_EN',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5flock_2',['WDT_CTRL_LOCK',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5frcause_5fhi_3',['WDT_CTRL_RCAUSE_HI',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5frcause_5flo_4',['WDT_CTRL_RCAUSE_LO',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5fsen_5',['WDT_CTRL_SEN',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5fstrict_6',['WDT_CTRL_STRICT',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5ftimeout_5flsb_7',['WDT_CTRL_TIMEOUT_LSB',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5ftimeout_5fmsb_8',['WDT_CTRL_TIMEOUT_MSB',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5facc_9',['WDT_RCAUSE_ACC',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a10999a782ffc2c26f601615f76121376',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5fext_10',['WDT_RCAUSE_EXT',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5focd_11',['WDT_RCAUSE_OCD',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5ftmo_12',['WDT_RCAUSE_TMO',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a7273d24bb65d3f40c1d289ce5cbc1a40',1,'neorv32_wdt.h']]] +]; diff --git a/sw/search/enumvalues_e.js b/sw/search/enumvalues_e.js new file mode 100644 index 0000000000..cd1b7db0a7 --- /dev/null +++ b/sw/search/enumvalues_e.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['xip_5fctrl_5fburst_5fen_0',['XIP_CTRL_BURST_EN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv0_1',['XIP_CTRL_CDIV0',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv1_2',['XIP_CTRL_CDIV1',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv2_3',['XIP_CTRL_CDIV2',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv3_4',['XIP_CTRL_CDIV3',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcpha_5',['XIP_CTRL_CPHA',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcpol_6',['XIP_CTRL_CPOL',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fen_7',['XIP_CTRL_EN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fhighspeed_8',['XIP_CTRL_HIGHSPEED',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fphy_5fbusy_9',['XIP_CTRL_PHY_BUSY',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fprsc0_10',['XIP_CTRL_PRSC0',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fprsc1_11',['XIP_CTRL_PRSC1',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fprsc2_12',['XIP_CTRL_PRSC2',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086',1,'neorv32_xip.h']]], + ['xip_5fctrl_5frd_5fcmd_5flsb_13',['XIP_CTRL_RD_CMD_LSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b',1,'neorv32_xip.h']]], + ['xip_5fctrl_5frd_5fcmd_5fmsb_14',['XIP_CTRL_RD_CMD_MSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fspi_5fcsen_15',['XIP_CTRL_SPI_CSEN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fspi_5fnbytes_5flsb_16',['XIP_CTRL_SPI_NBYTES_LSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fspi_5fnbytes_5fmsb_17',['XIP_CTRL_SPI_NBYTES_MSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fabytes_5flsb_18',['XIP_CTRL_XIP_ABYTES_LSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fabytes_5fmsb_19',['XIP_CTRL_XIP_ABYTES_MSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fbusy_20',['XIP_CTRL_XIP_BUSY',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fen_21',['XIP_CTRL_XIP_EN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937',1,'neorv32_xip.h']]] +]; diff --git a/sw/search/files_0.js b/sw/search/files_0.js new file mode 100644 index 0000000000..b7e62c16c3 --- /dev/null +++ b/sw/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bootloader_2ec_0',['bootloader.c',['../bootloader_8c.html',1,'']]] +]; diff --git a/sw/search/files_1.js b/sw/search/files_1.js new file mode 100644 index 0000000000..fbb133079a --- /dev/null +++ b/sw/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['main_2ec_0',['main.c',['../atomic__test_2main_8c.html',1,'(Global Namespace)'],['../bus__explorer_2main_8c.html',1,'(Global Namespace)'],['../demo__blink__led_2main_8c.html',1,'(Global Namespace)'],['../demo__cfs_2main_8c.html',1,'(Global Namespace)'],['../demo__cfu_2main_8c.html',1,'(Global Namespace)'],['../demo__clint_2main_8c.html',1,'(Global Namespace)'],['../demo__crc_2main_8c.html',1,'(Global Namespace)'],['../demo__dma_2main_8c.html',1,'(Global Namespace)'],['../demo__emulate__unaligned_2main_8c.html',1,'(Global Namespace)'],['../demo__gptmr_2main_8c.html',1,'(Global Namespace)'],['../demo__hpm_2main_8c.html',1,'(Global Namespace)'],['../demo__neopixel_2main_8c.html',1,'(Global Namespace)'],['../demo__newlib_2main_8c.html',1,'(Global Namespace)'],['../demo__onewire_2main_8c.html',1,'(Global Namespace)'],['../demo__pwm_2main_8c.html',1,'(Global Namespace)'],['../demo__sdi_2main_8c.html',1,'(Global Namespace)'],['../demo__slink_2main_8c.html',1,'(Global Namespace)'],['../demo__spi_2main_8c.html',1,'(Global Namespace)'],['../demo__spi__irq_2main_8c.html',1,'(Global Namespace)'],['../demo__trng_2main_8c.html',1,'(Global Namespace)'],['../demo__twi_2main_8c.html',1,'(Global Namespace)'],['../demo__wdt_2main_8c.html',1,'(Global Namespace)'],['../demo__xip_2main_8c.html',1,'(Global Namespace)'],['../demo__xirq_2main_8c.html',1,'(Global Namespace)'],['../float__corner__test_2main_8c.html',1,'(Global Namespace)'],['../floating__point__test_2main_8c.html',1,'(Global Namespace)'],['../game__of__life_2main_8c.html',1,'(Global Namespace)'],['../hello__world_2main_8c.html',1,'(Global Namespace)'],['../processor__check_2main_8c.html',1,'(Global Namespace)']]] +]; diff --git a/sw/search/files_2.js b/sw/search/files_2.js new file mode 100644 index 0000000000..4239354466 --- /dev/null +++ b/sw/search/files_2.js @@ -0,0 +1,60 @@ +var searchData= +[ + ['neorv32_2eh_0',['neorv32.h',['../neorv32_8h.html',1,'']]], + ['neorv32_5faux_2ec_1',['neorv32_aux.c',['../neorv32__aux_8c.html',1,'']]], + ['neorv32_5faux_2eh_2',['neorv32_aux.h',['../neorv32__aux_8h.html',1,'']]], + ['neorv32_5fcfs_2ec_3',['neorv32_cfs.c',['../neorv32__cfs_8c.html',1,'']]], + ['neorv32_5fcfs_2eh_4',['neorv32_cfs.h',['../neorv32__cfs_8h.html',1,'']]], + ['neorv32_5fclint_2ec_5',['neorv32_clint.c',['../neorv32__clint_8c.html',1,'']]], + ['neorv32_5fclint_2eh_6',['neorv32_clint.h',['../neorv32__clint_8h.html',1,'']]], + ['neorv32_5fcpu_2ec_7',['neorv32_cpu.c',['../neorv32__cpu_8c.html',1,'']]], + ['neorv32_5fcpu_2eh_8',['neorv32_cpu.h',['../neorv32__cpu_8h.html',1,'']]], + ['neorv32_5fcpu_5famo_2ec_9',['neorv32_cpu_amo.c',['../neorv32__cpu__amo_8c.html',1,'']]], + ['neorv32_5fcpu_5famo_2eh_10',['neorv32_cpu_amo.h',['../neorv32__cpu__amo_8h.html',1,'']]], + ['neorv32_5fcpu_5fcfu_2ec_11',['neorv32_cpu_cfu.c',['../neorv32__cpu__cfu_8c.html',1,'']]], + ['neorv32_5fcpu_5fcfu_2eh_12',['neorv32_cpu_cfu.h',['../neorv32__cpu__cfu_8h.html',1,'']]], + ['neorv32_5fcpu_5fcsr_2eh_13',['neorv32_cpu_csr.h',['../neorv32__cpu__csr_8h.html',1,'']]], + ['neorv32_5fcrc_2ec_14',['neorv32_crc.c',['../neorv32__crc_8c.html',1,'']]], + ['neorv32_5fcrc_2eh_15',['neorv32_crc.h',['../neorv32__crc_8h.html',1,'']]], + ['neorv32_5fdma_2eh_16',['neorv32_dma.h',['../neorv32__dma_8h.html',1,'']]], + ['neorv32_5fgpio_2ec_17',['neorv32_gpio.c',['../neorv32__gpio_8c.html',1,'']]], + ['neorv32_5fgpio_2eh_18',['neorv32_gpio.h',['../neorv32__gpio_8h.html',1,'']]], + ['neorv32_5fgptmr_2ec_19',['neorv32_gptmr.c',['../neorv32__gptmr_8c.html',1,'']]], + ['neorv32_5fgptmr_2eh_20',['neorv32_gptmr.h',['../neorv32__gptmr_8h.html',1,'']]], + ['neorv32_5fintrinsics_2eh_21',['neorv32_intrinsics.h',['../neorv32__intrinsics_8h.html',1,'']]], + ['neorv32_5flegacy_2eh_22',['neorv32_legacy.h',['../neorv32__legacy_8h.html',1,'']]], + ['neorv32_5fneoled_2ec_23',['neorv32_neoled.c',['../neorv32__neoled_8c.html',1,'']]], + ['neorv32_5fneoled_2eh_24',['neorv32_neoled.h',['../neorv32__neoled_8h.html',1,'']]], + ['neorv32_5fnewlib_2ec_25',['neorv32_newlib.c',['../neorv32__newlib_8c.html',1,'']]], + ['neorv32_5fonewire_2ec_26',['neorv32_onewire.c',['../neorv32__onewire_8c.html',1,'']]], + ['neorv32_5fonewire_2eh_27',['neorv32_onewire.h',['../neorv32__onewire_8h.html',1,'']]], + ['neorv32_5fpwm_2ec_28',['neorv32_pwm.c',['../neorv32__pwm_8c.html',1,'']]], + ['neorv32_5fpwm_2eh_29',['neorv32_pwm.h',['../neorv32__pwm_8h.html',1,'']]], + ['neorv32_5frte_2ec_30',['neorv32_rte.c',['../neorv32__rte_8c.html',1,'']]], + ['neorv32_5frte_2eh_31',['neorv32_rte.h',['../neorv32__rte_8h.html',1,'']]], + ['neorv32_5fsdi_2ec_32',['neorv32_sdi.c',['../neorv32__sdi_8c.html',1,'']]], + ['neorv32_5fsdi_2eh_33',['neorv32_sdi.h',['../neorv32__sdi_8h.html',1,'']]], + ['neorv32_5fslink_2ec_34',['neorv32_slink.c',['../neorv32__slink_8c.html',1,'']]], + ['neorv32_5fslink_2eh_35',['neorv32_slink.h',['../neorv32__slink_8h.html',1,'']]], + ['neorv32_5fspi_2ec_36',['neorv32_spi.c',['../neorv32__spi_8c.html',1,'']]], + ['neorv32_5fspi_2eh_37',['neorv32_spi.h',['../neorv32__spi_8h.html',1,'']]], + ['neorv32_5fspi_5firq_2ec_38',['neorv32_spi_irq.c',['../neorv32__spi__irq_8c.html',1,'']]], + ['neorv32_5fspi_5firq_2eh_39',['neorv32_spi_irq.h',['../neorv32__spi__irq_8h.html',1,'']]], + ['neorv32_5fsysinfo_2ec_40',['neorv32_sysinfo.c',['../neorv32__sysinfo_8c.html',1,'']]], + ['neorv32_5fsysinfo_2eh_41',['neorv32_sysinfo.h',['../neorv32__sysinfo_8h.html',1,'']]], + ['neorv32_5ftrng_2ec_42',['neorv32_trng.c',['../neorv32__trng_8c.html',1,'']]], + ['neorv32_5ftrng_2eh_43',['neorv32_trng.h',['../neorv32__trng_8h.html',1,'']]], + ['neorv32_5ftwd_2ec_44',['neorv32_twd.c',['../neorv32__twd_8c.html',1,'']]], + ['neorv32_5ftwd_2eh_45',['neorv32_twd.h',['../neorv32__twd_8h.html',1,'']]], + ['neorv32_5ftwi_2ec_46',['neorv32_twi.c',['../neorv32__twi_8c.html',1,'']]], + ['neorv32_5ftwi_2eh_47',['neorv32_twi.h',['../neorv32__twi_8h.html',1,'']]], + ['neorv32_5fuart_2ec_48',['neorv32_uart.c',['../neorv32__uart_8c.html',1,'']]], + ['neorv32_5fuart_2eh_49',['neorv32_uart.h',['../neorv32__uart_8h.html',1,'']]], + ['neorv32_5fwdt_2ec_50',['neorv32_wdt.c',['../neorv32__wdt_8c.html',1,'']]], + ['neorv32_5fwdt_2eh_51',['neorv32_wdt.h',['../neorv32__wdt_8h.html',1,'']]], + ['neorv32_5fxip_2ec_52',['neorv32_xip.c',['../neorv32__xip_8c.html',1,'']]], + ['neorv32_5fxip_2eh_53',['neorv32_xip.h',['../neorv32__xip_8h.html',1,'']]], + ['neorv32_5fxirq_2ec_54',['neorv32_xirq.c',['../neorv32__xirq_8c.html',1,'']]], + ['neorv32_5fxirq_2eh_55',['neorv32_xirq.h',['../neorv32__xirq_8h.html',1,'']]], + ['neorv32_5fzfinx_5fextension_5fintrinsics_2eh_56',['neorv32_zfinx_extension_intrinsics.h',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html',1,'']]] +]; diff --git a/sw/search/functions_0.js b/sw/search/functions_0.js new file mode 100644 index 0000000000..cf3b78d435 --- /dev/null +++ b/sw/search/functions_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['_5f_5fneorv32_5frte_5fprint_5fhex_5fword_0',['__neorv32_rte_print_hex_word',['../neorv32__rte_8c.html#a01bf6c01f5a8cda2132b9ac98824edc1',1,'neorv32_rte.c']]], + ['_5f_5fneorv32_5fxirq_5fcore_1',['__neorv32_xirq_core',['../neorv32__xirq_8c.html#a14661d628dd31e6bfce89376c6614627',1,'neorv32_xirq.c']]], + ['_5f_5fneorv32_5fxirq_5fdummy_5fhandler_2',['__neorv32_xirq_dummy_handler',['../neorv32__xirq_8c.html#ae4d9362b23a1341c595a4cd239a87091',1,'neorv32_xirq.c']]] +]; diff --git a/sw/search/functions_1.js b/sw/search/functions_1.js new file mode 100644 index 0000000000..caab3fbf1e --- /dev/null +++ b/sw/search/functions_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['adaptive_5fproportion_5ftest_0',['adaptive_proportion_test',['../demo__trng_2main_8c.html#a23a91e6fe2cc44f3c29baf0d331e05db',1,'main.c']]], + ['aux_5fprint_5fhex_5fbyte_1',['aux_print_hex_byte',['../bus__explorer_2main_8c.html#ac582208281cd6fce4eb61c234f312ef6',1,'aux_print_hex_byte(uint8_t byte):&#160;main.c'],['../demo__spi_2main_8c.html#ac582208281cd6fce4eb61c234f312ef6',1,'aux_print_hex_byte(uint8_t byte):&#160;main.c']]] +]; diff --git a/sw/search/functions_10.js b/sw/search/functions_10.js new file mode 100644 index 0000000000..43e788b2a1 --- /dev/null +++ b/sw/search/functions_10.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['xip_5fflash_5faccess_5fcheck_0',['xip_flash_access_check',['../demo__xip_2main_8c.html#a23bd7bd7b0808d919fd09ac0a8258498',1,'main.c']]], + ['xip_5fflash_5ferase_5fsector_1',['xip_flash_erase_sector',['../demo__xip_2main_8c.html#a9e0b2714126b6699ddb65485c93293e4',1,'main.c']]], + ['xip_5fflash_5fprogram_2',['xip_flash_program',['../demo__xip_2main_8c.html#a4ddfa8fdc072cadeef18a4a10bc8b174',1,'main.c']]], + ['xirq_5fhandler_5fch0_3',['xirq_handler_ch0',['../demo__xirq_2main_8c.html#a8874ccfc0b56171c359b5c2ceaf2bd80',1,'main.c']]], + ['xirq_5fhandler_5fch1_4',['xirq_handler_ch1',['../demo__xirq_2main_8c.html#abfe0c0bc47a683ba55df2aed63a12d4b',1,'main.c']]], + ['xirq_5fhandler_5fch2_5',['xirq_handler_ch2',['../demo__xirq_2main_8c.html#ae8e3b3236aa2303c2b5e6e421b72cf73',1,'main.c']]], + ['xirq_5fhandler_5fch3_6',['xirq_handler_ch3',['../demo__xirq_2main_8c.html#a99e9ae3088f39995c852b2c53ec21266',1,'main.c']]], + ['xirq_5ftrap_5fhandler0_7',['xirq_trap_handler0',['../processor__check_2main_8c.html#aa4fe70578c4dccabe1e31fae941378cb',1,'main.c']]], + ['xirq_5ftrap_5fhandler1_8',['xirq_trap_handler1',['../processor__check_2main_8c.html#a277cb06ef74e4cfe1ef783069f9b6527',1,'main.c']]], + ['xtea_5fsw_5fdecipher_9',['xtea_sw_decipher',['../demo__cfu_2main_8c.html#a0e980c5d81b1eca90b8073e54099bdb0',1,'main.c']]], + ['xtea_5fsw_5fencipher_10',['xtea_sw_encipher',['../demo__cfu_2main_8c.html#a8dc502bf508491eed1f39c4acf040efb',1,'main.c']]] +]; diff --git a/sw/search/functions_2.js b/sw/search/functions_2.js new file mode 100644 index 0000000000..bdc159bac7 --- /dev/null +++ b/sw/search/functions_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bootloader_5ftrap_5fhandler_0',['bootloader_trap_handler',['../bootloader_8c.html#af13b4b3d5e6597feacf331e6d16b08e9',1,'bootloader.c']]] +]; diff --git a/sw/search/functions_3.js b/sw/search/functions_3.js new file mode 100644 index 0000000000..2bd5c8d7d2 --- /dev/null +++ b/sw/search/functions_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['check_5fresult_0',['check_result',['../atomic__test_2main_8c.html#a4f4c6d8481b4100f90955ba5a70428a4',1,'main.c']]], + ['clear_5funiverse_1',['clear_universe',['../game__of__life_2main_8c.html#a819f10c5b644a07eeb069b6e7f12050e',1,'main.c']]], + ['compute_5frate_2',['compute_rate',['../demo__trng_2main_8c.html#abbde1237eed617466fb971a78c3acd1e',1,'main.c']]] +]; diff --git a/sw/search/functions_4.js b/sw/search/functions_4.js new file mode 100644 index 0000000000..91222bca01 --- /dev/null +++ b/sw/search/functions_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dma_5ffirq_5fhandler_0',['dma_firq_handler',['../demo__dma_2main_8c.html#aefcc5abb86a652587ff69be120a66487',1,'main.c']]], + ['dump_5fmemory_1',['dump_memory',['../bus__explorer_2main_8c.html#a6405739c6012158151eb082c31c312da',1,'main.c']]] +]; diff --git a/sw/search/functions_5.js b/sw/search/functions_5.js new file mode 100644 index 0000000000..3313a5b528 --- /dev/null +++ b/sw/search/functions_5.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['generate_5fhistogram_0',['generate_histogram',['../demo__trng_2main_8c.html#a4e49f5e3feb4bd5755f919cd3310b506',1,'main.c']]], + ['get_5fcell_1',['get_cell',['../game__of__life_2main_8c.html#a6bd541a19c62ea9ec620eaad3f218d16',1,'main.c']]], + ['get_5fexe_2',['get_exe',['../bootloader_8c.html#ac18819795adb6dbdd52b0587e7fbb569',1,'bootloader.c']]], + ['get_5fexe_5fword_3',['get_exe_word',['../bootloader_8c.html#ac58d9f7dc79a549bde1cb50f619c19af',1,'bootloader.c']]], + ['get_5fneighborhood_4',['get_neighborhood',['../game__of__life_2main_8c.html#a977190adaa24a3f49fca1540b51d25a0',1,'main.c']]], + ['get_5ftest_5fvector_5',['get_test_vector',['../float__corner__test_2main_8c.html#a73c70bd0fb6d695cb113eaeb50923e3e',1,'get_test_vector(void):&#160;main.c'],['../floating__point__test_2main_8c.html#a73c70bd0fb6d695cb113eaeb50923e3e',1,'get_test_vector(void):&#160;main.c']]], + ['global_5ftrap_5fhandler_6',['global_trap_handler',['../processor__check_2main_8c.html#a9a64ce0ee69c4c32cecc8b2b2746604c',1,'main.c']]], + ['gptmr_5ffirq_5fhandler_7',['gptmr_firq_handler',['../demo__gptmr_2main_8c.html#a2bd89412466a65329711bfd5c29199c9',1,'main.c']]] +]; diff --git a/sw/search/functions_6.js b/sw/search/functions_6.js new file mode 100644 index 0000000000..2a5ee30c60 --- /dev/null +++ b/sw/search/functions_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['hexdump_0',['hexdump',['../bus__explorer_2main_8c.html#a02640a99db37b8d92b9edffc9720a210',1,'main.c']]], + ['hsv2rgb_1',['hsv2rgb',['../demo__neopixel_2main_8c.html#a2736ec755f9e10c80bf66f727f870ffc',1,'main.c']]], + ['hw_5fbreakpoint_5fhandler_2',['hw_breakpoint_handler',['../processor__check_2main_8c.html#a31d9e432f6a368e6222f5e0907eeb6f4',1,'main.c']]] +]; diff --git a/sw/search/functions_7.js b/sw/search/functions_7.js new file mode 100644 index 0000000000..f404c7dc1e --- /dev/null +++ b/sw/search/functions_7.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['main_0',['main',['../bootloader_8c.html#a840291bc02cba5474a4cb46a9b9566fe',1,'main(void):&#160;bootloader.c'],['../atomic__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../bus__explorer_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__blink__led_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__cfs_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__cfu_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__clint_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__crc_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__dma_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__emulate__unaligned_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__gptmr_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__hpm_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__neopixel_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__newlib_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__onewire_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__pwm_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__sdi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__slink_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__spi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__spi__irq_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__trng_2main_8c.html#a840291bc02cba5474a4cb46a9b9566fe',1,'main(void):&#160;main.c'],['../demo__twi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__wdt_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__xip_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../demo__xirq_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../float__corner__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../floating__point__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../game__of__life_2main_8c.html#a840291bc02cba5474a4cb46a9b9566fe',1,'main(void):&#160;main.c'],['../hello__world_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c'],['../processor__check_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;main.c']]], + ['main_5fdestructor_5ftest_1',['main_destructor_test',['../demo__newlib_2main_8c.html#a7076a1dfd3c18c91fcf665ce54b087b3',1,'main.c']]], + ['msi_5firq_5fhandler_2',['msi_irq_handler',['../demo__clint_2main_8c.html#a8e5e335f226a7dac74e2f117f07bebf6',1,'main.c']]], + ['mti_5firq_5fhandler_3',['mti_irq_handler',['../demo__clint_2main_8c.html#a56e848c71747fc350f1697e84797871f',1,'main.c']]] +]; diff --git a/sw/search/functions_8.js b/sw/search/functions_8.js new file mode 100644 index 0000000000..f3317291ae --- /dev/null +++ b/sw/search/functions_8.js @@ -0,0 +1,255 @@ +var searchData= +[ + ['neorv32_5faux_5fdate2unixtime_0',['neorv32_aux_date2unixtime',['../neorv32__aux_8c.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c',1,'neorv32_aux_date2unixtime(date_t *date):&#160;neorv32_aux.c'],['../neorv32__aux_8h.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c',1,'neorv32_aux_date2unixtime(date_t *date):&#160;neorv32_aux.c']]], + ['neorv32_5faux_5fhexstr2uint64_1',['neorv32_aux_hexstr2uint64',['../neorv32__aux_8c.html#a05a5482da3b72a5bdf2181e754143d79',1,'neorv32_aux_hexstr2uint64(char *buffer, unsigned int length):&#160;neorv32_aux.c'],['../neorv32__aux_8h.html#a05a5482da3b72a5bdf2181e754143d79',1,'neorv32_aux_hexstr2uint64(char *buffer, unsigned int length):&#160;neorv32_aux.c']]], + ['neorv32_5faux_5fitoa_2',['neorv32_aux_itoa',['../neorv32__aux_8c.html#af72230251bc58d3142353849f63d5667',1,'neorv32_aux_itoa(char *buffer, uint32_t num, uint32_t base):&#160;neorv32_aux.c'],['../neorv32__aux_8h.html#af72230251bc58d3142353849f63d5667',1,'neorv32_aux_itoa(char *buffer, uint32_t num, uint32_t base):&#160;neorv32_aux.c']]], + ['neorv32_5faux_5funixtime2date_3',['neorv32_aux_unixtime2date',['../neorv32__aux_8c.html#a885a81838a91b57797e849cb835c6887',1,'neorv32_aux_unixtime2date(uint64_t unixtime, date_t *date):&#160;neorv32_aux.c'],['../neorv32__aux_8h.html#a885a81838a91b57797e849cb835c6887',1,'neorv32_aux_unixtime2date(uint64_t unixtime, date_t *date):&#160;neorv32_aux.c']]], + ['neorv32_5faux_5fxorshift32_4',['neorv32_aux_xorshift32',['../neorv32__aux_8c.html#aff31dd983f75f70eeae331c65acaa50e',1,'neorv32_aux_xorshift32(void):&#160;neorv32_aux.c'],['../neorv32__aux_8h.html#aff31dd983f75f70eeae331c65acaa50e',1,'neorv32_aux_xorshift32(void):&#160;neorv32_aux.c']]], + ['neorv32_5fcfs_5favailable_5',['neorv32_cfs_available',['../neorv32__cfs_8c.html#abac96dfaefe433eca1c0b93fa6183d2e',1,'neorv32_cfs_available(void):&#160;neorv32_cfs.c'],['../neorv32__cfs_8h.html#abac96dfaefe433eca1c0b93fa6183d2e',1,'neorv32_cfs_available(void):&#160;neorv32_cfs.c']]], + ['neorv32_5fclint_5favailable_6',['neorv32_clint_available',['../neorv32__clint_8c.html#a197e7946193987bf04a08aa0563462bf',1,'neorv32_clint_available(void):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#a197e7946193987bf04a08aa0563462bf',1,'neorv32_clint_available(void):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5fmsi_5fclr_7',['neorv32_clint_msi_clr',['../neorv32__clint_8c.html#a6655e1e21cc94cda4e5c21544a72c758',1,'neorv32_clint_msi_clr(int hart):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#a6655e1e21cc94cda4e5c21544a72c758',1,'neorv32_clint_msi_clr(int hart):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5fmsi_5fset_8',['neorv32_clint_msi_set',['../neorv32__clint_8c.html#a4478c86505e3a22b774208006060b8a4',1,'neorv32_clint_msi_set(int hart):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#a4478c86505e3a22b774208006060b8a4',1,'neorv32_clint_msi_set(int hart):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5fmtimecmp_5fget_9',['neorv32_clint_mtimecmp_get',['../neorv32__clint_8c.html#a1d6526b096fbf99fdde2632bff7ce8df',1,'neorv32_clint_mtimecmp_get(int hart):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#a1d6526b096fbf99fdde2632bff7ce8df',1,'neorv32_clint_mtimecmp_get(int hart):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5fmtimecmp_5fset_10',['neorv32_clint_mtimecmp_set',['../neorv32__clint_8c.html#af1e2ff4ce5f3a20b07eeaac50685110a',1,'neorv32_clint_mtimecmp_set(int hart, uint64_t timecmp):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#af1e2ff4ce5f3a20b07eeaac50685110a',1,'neorv32_clint_mtimecmp_set(int hart, uint64_t timecmp):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5ftime_5fget_11',['neorv32_clint_time_get',['../neorv32__clint_8c.html#a94364eb5e89145b5e2b61ac6d3eeccd4',1,'neorv32_clint_time_get(void):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#a94364eb5e89145b5e2b61ac6d3eeccd4',1,'neorv32_clint_time_get(void):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5ftime_5fset_12',['neorv32_clint_time_set',['../neorv32__clint_8c.html#af8e6985da6cd629a0572edd8c70cd888',1,'neorv32_clint_time_set(uint64_t time):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#af8e6985da6cd629a0572edd8c70cd888',1,'neorv32_clint_time_set(uint64_t time):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5funixtime_5fget_13',['neorv32_clint_unixtime_get',['../neorv32__clint_8c.html#a89aa592a96260e68f99df71a194facaa',1,'neorv32_clint_unixtime_get(void):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#a89aa592a96260e68f99df71a194facaa',1,'neorv32_clint_unixtime_get(void):&#160;neorv32_clint.c']]], + ['neorv32_5fclint_5funixtime_5fset_14',['neorv32_clint_unixtime_set',['../neorv32__clint_8c.html#abe9bcd07591e9c2d3e27435809bf4bdd',1,'neorv32_clint_unixtime_set(uint64_t unixtime):&#160;neorv32_clint.c'],['../neorv32__clint_8h.html#abe9bcd07591e9c2d3e27435809bf4bdd',1,'neorv32_clint_unixtime_set(uint64_t unixtime):&#160;neorv32_clint.c']]], + ['neorv32_5fcpu_5famoaddw_15',['neorv32_cpu_amoaddw',['../neorv32__cpu__amo_8c.html#ada27ec89b2530f7b7f14de947cc82bf9',1,'neorv32_cpu_amoaddw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#ada27ec89b2530f7b7f14de947cc82bf9',1,'neorv32_cpu_amoaddw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famoandw_16',['neorv32_cpu_amoandw',['../neorv32__cpu__amo_8c.html#a9b4540dadbfd5da907117570d8006e36',1,'neorv32_cpu_amoandw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a9b4540dadbfd5da907117570d8006e36',1,'neorv32_cpu_amoandw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famolr_17',['neorv32_cpu_amolr',['../neorv32__cpu__amo_8h.html#ad4437bbc61a4e40d7d01dfe9459f6639',1,'neorv32_cpu_amo.h']]], + ['neorv32_5fcpu_5famomaxuw_18',['neorv32_cpu_amomaxuw',['../neorv32__cpu__amo_8c.html#a31a6a3b5a33655f4a7b27d4c85b75f07',1,'neorv32_cpu_amomaxuw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a31a6a3b5a33655f4a7b27d4c85b75f07',1,'neorv32_cpu_amomaxuw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famomaxw_19',['neorv32_cpu_amomaxw',['../neorv32__cpu__amo_8c.html#a62cf36637d7a04079228acecfe8a5cf3',1,'neorv32_cpu_amomaxw(uint32_t addr, int32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a62cf36637d7a04079228acecfe8a5cf3',1,'neorv32_cpu_amomaxw(uint32_t addr, int32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famominuw_20',['neorv32_cpu_amominuw',['../neorv32__cpu__amo_8c.html#a1281e18b95cd525073e1123c5d04e9e2',1,'neorv32_cpu_amominuw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a1281e18b95cd525073e1123c5d04e9e2',1,'neorv32_cpu_amominuw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famominw_21',['neorv32_cpu_amominw',['../neorv32__cpu__amo_8c.html#a8e383fb8825538b5579d5ce075830697',1,'neorv32_cpu_amominw(uint32_t addr, int32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a8e383fb8825538b5579d5ce075830697',1,'neorv32_cpu_amominw(uint32_t addr, int32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famoorw_22',['neorv32_cpu_amoorw',['../neorv32__cpu__amo_8c.html#adc80b1f2b3a4e70fee44c0edb08fc402',1,'neorv32_cpu_amoorw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#adc80b1f2b3a4e70fee44c0edb08fc402',1,'neorv32_cpu_amoorw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famosc_23',['neorv32_cpu_amosc',['../neorv32__cpu__amo_8h.html#a5e73eaa273c41a06972e862976fda53c',1,'neorv32_cpu_amo.h']]], + ['neorv32_5fcpu_5famoswapw_24',['neorv32_cpu_amoswapw',['../neorv32__cpu__amo_8c.html#aad0d96e61bacc3af13ff471dd44ca8e9',1,'neorv32_cpu_amoswapw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#aad0d96e61bacc3af13ff471dd44ca8e9',1,'neorv32_cpu_amoswapw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famoxorw_25',['neorv32_cpu_amoxorw',['../neorv32__cpu__amo_8c.html#a65b67f48356fa9b30596485473311377',1,'neorv32_cpu_amoxorw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a65b67f48356fa9b30596485473311377',1,'neorv32_cpu_amoxorw(uint32_t addr, uint32_t wdata):&#160;neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5fcfu_5favailable_26',['neorv32_cpu_cfu_available',['../neorv32__cpu__cfu_8c.html#a13019b8afa1a80c0e5c24eb4d72e75c1',1,'neorv32_cpu_cfu_available(void):&#160;neorv32_cpu_cfu.c'],['../neorv32__cpu__cfu_8h.html#a13019b8afa1a80c0e5c24eb4d72e75c1',1,'neorv32_cpu_cfu_available(void):&#160;neorv32_cpu_cfu.c']]], + ['neorv32_5fcpu_5fcsr_5fclr_27',['neorv32_cpu_csr_clr',['../neorv32__cpu_8h.html#ab8f533ddbc3a3af5e3bca2287ac10122',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fcsr_5fread_28',['neorv32_cpu_csr_read',['../neorv32__cpu_8h.html#aab7a9f9cf608599f2b124dd499cb8418',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fcsr_5fset_29',['neorv32_cpu_csr_set',['../neorv32__cpu_8h.html#a25a09de97229aac839ef6f74da604acf',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fcsr_5fwrite_30',['neorv32_cpu_csr_write',['../neorv32__cpu_8h.html#afb5ef6e0b1a3e26570edfd8379490455',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fdelay_5fms_31',['neorv32_cpu_delay_ms',['../neorv32__cpu_8c.html#aa9027535b13d9f9325e734997fc4a137',1,'neorv32_cpu_delay_ms(uint32_t time_ms):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#aa9027535b13d9f9325e734997fc4a137',1,'neorv32_cpu_delay_ms(uint32_t time_ms):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fget_5fclk_5ffrom_5fprsc_32',['neorv32_cpu_get_clk_from_prsc',['../neorv32__cpu_8c.html#a8346fb926f84f3d7bccbb4741105505f',1,'neorv32_cpu_get_clk_from_prsc(int prsc):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#a8346fb926f84f3d7bccbb4741105505f',1,'neorv32_cpu_get_clk_from_prsc(int prsc):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fget_5fcycle_33',['neorv32_cpu_get_cycle',['../neorv32__cpu_8c.html#ac3fd7dc7cd1e0a08225c41820af27f92',1,'neorv32_cpu_get_cycle(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#ac3fd7dc7cd1e0a08225c41820af27f92',1,'neorv32_cpu_get_cycle(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fget_5finstret_34',['neorv32_cpu_get_instret',['../neorv32__cpu_8c.html#a387aa304770b05594c4acca128a60a75',1,'neorv32_cpu_get_instret(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#a387aa304770b05594c4acca128a60a75',1,'neorv32_cpu_get_instret(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fgoto_5fuser_5fmode_35',['neorv32_cpu_goto_user_mode',['../neorv32__cpu_8c.html#aca49efb45d3808ad76cf65ba291f546d',1,'neorv32_cpu_goto_user_mode(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#aca49efb45d3808ad76cf65ba291f546d',1,'neorv32_cpu_goto_user_mode(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fhpm_5fget_5fnum_5fcounters_36',['neorv32_cpu_hpm_get_num_counters',['../neorv32__cpu_8c.html#a70f49b80322aa457f29f7671f94a183d',1,'neorv32_cpu_hpm_get_num_counters(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#a70f49b80322aa457f29f7671f94a183d',1,'neorv32_cpu_hpm_get_num_counters(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fhpm_5fget_5fsize_37',['neorv32_cpu_hpm_get_size',['../neorv32__cpu_8c.html#adb3ae542bbb0ddf9f562a4e42bc24d10',1,'neorv32_cpu_hpm_get_size(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#adb3ae542bbb0ddf9f562a4e42bc24d10',1,'neorv32_cpu_hpm_get_size(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fload_5fsigned_5fbyte_38',['neorv32_cpu_load_signed_byte',['../neorv32__cpu_8h.html#a31f903596ab1bcddea79fdf608eaa666',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5fsigned_5fhalf_39',['neorv32_cpu_load_signed_half',['../neorv32__cpu_8h.html#ae9c8b6c681536ddea3aff0e63f30ef70',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5funsigned_5fbyte_40',['neorv32_cpu_load_unsigned_byte',['../neorv32__cpu_8h.html#ac54ec9b59e17c7cd9b9907abee82ce95',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5funsigned_5fhalf_41',['neorv32_cpu_load_unsigned_half',['../neorv32__cpu_8h.html#a32544cd652debb4affb308806a115d5b',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5funsigned_5fword_42',['neorv32_cpu_load_unsigned_word',['../neorv32__cpu_8h.html#a3b6cf445e2136486564ef3d3473c91dd',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fpmp_5fconfigure_5fregion_43',['neorv32_cpu_pmp_configure_region',['../neorv32__cpu_8c.html#aa458a700619b2f7666cfcffe02ec2e2c',1,'neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#aa458a700619b2f7666cfcffe02ec2e2c',1,'neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fpmp_5fget_5fgranularity_44',['neorv32_cpu_pmp_get_granularity',['../neorv32__cpu_8c.html#ad4f8160f4821b6691e9682ef60c7cd7b',1,'neorv32_cpu_pmp_get_granularity(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#ad4f8160f4821b6691e9682ef60c7cd7b',1,'neorv32_cpu_pmp_get_granularity(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fpmp_5fget_5fnum_5fregions_45',['neorv32_cpu_pmp_get_num_regions',['../neorv32__cpu_8c.html#a27dd614bc270dfa30ed73323ebda2d2d',1,'neorv32_cpu_pmp_get_num_regions(void):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#a27dd614bc270dfa30ed73323ebda2d2d',1,'neorv32_cpu_pmp_get_num_regions(void):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fset_5fmcycle_46',['neorv32_cpu_set_mcycle',['../neorv32__cpu_8c.html#a232d0290c459dc790d989fcdc4d121bf',1,'neorv32_cpu_set_mcycle(uint64_t value):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#a232d0290c459dc790d989fcdc4d121bf',1,'neorv32_cpu_set_mcycle(uint64_t value):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fset_5fminstret_47',['neorv32_cpu_set_minstret',['../neorv32__cpu_8c.html#a5c3cf52498abb3cf3c14a724b287ecf0',1,'neorv32_cpu_set_minstret(uint64_t value):&#160;neorv32_cpu.c'],['../neorv32__cpu_8h.html#a5c3cf52498abb3cf3c14a724b287ecf0',1,'neorv32_cpu_set_minstret(uint64_t value):&#160;neorv32_cpu.c']]], + ['neorv32_5fcpu_5fsleep_48',['neorv32_cpu_sleep',['../neorv32__cpu_8h.html#a769ca4556213619f6fea4ff6bfb979dd',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fstore_5funsigned_5fbyte_49',['neorv32_cpu_store_unsigned_byte',['../neorv32__cpu_8h.html#aeec8ad2a82885c40a307346f9003483e',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fstore_5funsigned_5fhalf_50',['neorv32_cpu_store_unsigned_half',['../neorv32__cpu_8h.html#a31f30f6d6542758cd3073a9939b07653',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fstore_5funsigned_5fword_51',['neorv32_cpu_store_unsigned_word',['../neorv32__cpu_8h.html#a173bb06b4ae9c8964469068dafcb7b0e',1,'neorv32_cpu.h']]], + ['neorv32_5fcrc_5favailable_52',['neorv32_crc_available',['../neorv32__crc_8c.html#aa46c647317752f8bb6d5836d4876a704',1,'neorv32_crc_available(void):&#160;neorv32_crc.c'],['../neorv32__crc_8h.html#aa46c647317752f8bb6d5836d4876a704',1,'neorv32_crc_available(void):&#160;neorv32_crc.c']]], + ['neorv32_5fcrc_5fblock_53',['neorv32_crc_block',['../neorv32__crc_8c.html#a9243006e6cc94c03450646d26a7289b2',1,'neorv32_crc_block(uint8_t *byte, int length):&#160;neorv32_crc.c'],['../neorv32__crc_8h.html#a9243006e6cc94c03450646d26a7289b2',1,'neorv32_crc_block(uint8_t *byte, int length):&#160;neorv32_crc.c']]], + ['neorv32_5fcrc_5fget_54',['neorv32_crc_get',['../neorv32__crc_8c.html#a444b88f1536f65acc301fb19eddcf227',1,'neorv32_crc_get(void):&#160;neorv32_crc.c'],['../neorv32__crc_8h.html#a444b88f1536f65acc301fb19eddcf227',1,'neorv32_crc_get(void):&#160;neorv32_crc.c']]], + ['neorv32_5fcrc_5fsetup_55',['neorv32_crc_setup',['../neorv32__crc_8c.html#a4ff5f7b91e9f668535ed33b6382ae623',1,'neorv32_crc_setup(uint32_t mode, uint32_t poly, uint32_t start):&#160;neorv32_crc.c'],['../neorv32__crc_8h.html#a4ff5f7b91e9f668535ed33b6382ae623',1,'neorv32_crc_setup(uint32_t mode, uint32_t poly, uint32_t start):&#160;neorv32_crc.c']]], + ['neorv32_5fcrc_5fsingle_56',['neorv32_crc_single',['../neorv32__crc_8c.html#ad9d50c76a485160667d486bce32cbeb8',1,'neorv32_crc_single(uint8_t byte):&#160;neorv32_crc.c'],['../neorv32__crc_8h.html#ad9d50c76a485160667d486bce32cbeb8',1,'neorv32_crc_single(uint8_t byte):&#160;neorv32_crc.c']]], + ['neorv32_5fdma_5favailable_57',['neorv32_dma_available',['../neorv32__dma_8h.html#a13260c3252f0375d8982590d270d7dfd',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fdisable_58',['neorv32_dma_disable',['../neorv32__dma_8h.html#a6df244028455cf7f8d4cf1520c4670a7',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fdone_59',['neorv32_dma_done',['../neorv32__dma_8h.html#afc8cc32f7d80d0f5ab33b2f1ecf77956',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fenable_60',['neorv32_dma_enable',['../neorv32__dma_8h.html#ac3b72447e8a132faf26577ac714b8284',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ffence_5fdisable_61',['neorv32_dma_fence_disable',['../neorv32__dma_8h.html#a8f37adfa07050b0a1cb8430c9ce1fcc2',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ffence_5fenable_62',['neorv32_dma_fence_enable',['../neorv32__dma_8h.html#a2c7257567ccdb7a986f5ef7c74d3917c',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fstatus_63',['neorv32_dma_status',['../neorv32__dma_8h.html#aa116f9714174abbe8a3583e441fee24b',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ftransfer_64',['neorv32_dma_transfer',['../neorv32__dma_8h.html#a2ce0d31e04604b2523135d52a877febf',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ftransfer_5fauto_65',['neorv32_dma_transfer_auto',['../neorv32__dma_8h.html#a6ebd1595ee6fa0e6cbfbd1ce7476f18e',1,'neorv32_dma.c']]], + ['neorv32_5fgpio_5favailable_66',['neorv32_gpio_available',['../neorv32__gpio_8c.html#a41d39a41ba5879eb85d3ed4481fcff81',1,'neorv32_gpio_available(void):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#a41d39a41ba5879eb85d3ed4481fcff81',1,'neorv32_gpio_available(void):&#160;neorv32_gpio.c']]], + ['neorv32_5fgpio_5fpin_5fget_67',['neorv32_gpio_pin_get',['../neorv32__gpio_8c.html#afa3ee54aca47ff35f706b627ac66e95a',1,'neorv32_gpio_pin_get(int pin):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#afa3ee54aca47ff35f706b627ac66e95a',1,'neorv32_gpio_pin_get(int pin):&#160;neorv32_gpio.c']]], + ['neorv32_5fgpio_5fpin_5fset_68',['neorv32_gpio_pin_set',['../neorv32__gpio_8c.html#a60fd0830d634f0c1f784d815384665cb',1,'neorv32_gpio_pin_set(int pin, int value):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#a60fd0830d634f0c1f784d815384665cb',1,'neorv32_gpio_pin_set(int pin, int value):&#160;neorv32_gpio.c']]], + ['neorv32_5fgpio_5fpin_5ftoggle_69',['neorv32_gpio_pin_toggle',['../neorv32__gpio_8c.html#a1958850fc1689eae9ddfcaa4a7513400',1,'neorv32_gpio_pin_toggle(int pin):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#a1958850fc1689eae9ddfcaa4a7513400',1,'neorv32_gpio_pin_toggle(int pin):&#160;neorv32_gpio.c']]], + ['neorv32_5fgpio_5fport_5fget_70',['neorv32_gpio_port_get',['../neorv32__gpio_8c.html#ac42379f2fb5ca0bb63850d7957852b84',1,'neorv32_gpio_port_get(void):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#ac42379f2fb5ca0bb63850d7957852b84',1,'neorv32_gpio_port_get(void):&#160;neorv32_gpio.c']]], + ['neorv32_5fgpio_5fport_5fset_71',['neorv32_gpio_port_set',['../neorv32__gpio_8c.html#a8dc7846945e4609fc96d81caee99ac00',1,'neorv32_gpio_port_set(uint64_t port_data):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#a789222709485cd8467aad5eddf69d2df',1,'neorv32_gpio_port_set(uint64_t d):&#160;neorv32_gpio.c']]], + ['neorv32_5fgpio_5fport_5ftoggle_72',['neorv32_gpio_port_toggle',['../neorv32__gpio_8c.html#a210529f789779387d3f014e6253e803f',1,'neorv32_gpio_port_toggle(uint64_t toggle):&#160;neorv32_gpio.c'],['../neorv32__gpio_8h.html#a210529f789779387d3f014e6253e803f',1,'neorv32_gpio_port_toggle(uint64_t toggle):&#160;neorv32_gpio.c']]], + ['neorv32_5fgptmr_5favailable_73',['neorv32_gptmr_available',['../neorv32__gptmr_8c.html#ae79a08c52ad3e83f9c4393acfabf035f',1,'neorv32_gptmr_available(void):&#160;neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#ae79a08c52ad3e83f9c4393acfabf035f',1,'neorv32_gptmr_available(void):&#160;neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5fdisable_74',['neorv32_gptmr_disable',['../neorv32__gptmr_8c.html#a7c9bc6d28ad12611b08fa2867c2db874',1,'neorv32_gptmr_disable(void):&#160;neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#a7c9bc6d28ad12611b08fa2867c2db874',1,'neorv32_gptmr_disable(void):&#160;neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5fenable_75',['neorv32_gptmr_enable',['../neorv32__gptmr_8c.html#a59e684348835772a7e83446e478d4a13',1,'neorv32_gptmr_enable(void):&#160;neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#a59e684348835772a7e83446e478d4a13',1,'neorv32_gptmr_enable(void):&#160;neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5firq_5fack_76',['neorv32_gptmr_irq_ack',['../neorv32__gptmr_8c.html#ac73aa4e41a064abb4ca554a389888e67',1,'neorv32_gptmr_irq_ack(void):&#160;neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#ac73aa4e41a064abb4ca554a389888e67',1,'neorv32_gptmr_irq_ack(void):&#160;neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5fsetup_77',['neorv32_gptmr_setup',['../neorv32__gptmr_8c.html#a6aa27efd2163eebf8fc49fe1c591708f',1,'neorv32_gptmr_setup(int prsc, uint32_t threshold, int cont_mode):&#160;neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#a6aa27efd2163eebf8fc49fe1c591708f',1,'neorv32_gptmr_setup(int prsc, uint32_t threshold, int cont_mode):&#160;neorv32_gptmr.c']]], + ['neorv32_5fneoled_5favailable_78',['neorv32_neoled_available',['../neorv32__neoled_8c.html#a57398d92fb4fc735b33e89271726e1d6',1,'neorv32_neoled_available(void):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a57398d92fb4fc735b33e89271726e1d6',1,'neorv32_neoled_available(void):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fdisable_79',['neorv32_neoled_disable',['../neorv32__neoled_8c.html#a8daaa97a85e0eb94d4a38eb2119ea183',1,'neorv32_neoled_disable(void):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a8daaa97a85e0eb94d4a38eb2119ea183',1,'neorv32_neoled_disable(void):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fenable_80',['neorv32_neoled_enable',['../neorv32__neoled_8c.html#a8181d5c1d15b7b5eecdc018341ac14fa',1,'neorv32_neoled_enable(void):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a8181d5c1d15b7b5eecdc018341ac14fa',1,'neorv32_neoled_enable(void):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fget_5fbuffer_5fsize_81',['neorv32_neoled_get_buffer_size',['../neorv32__neoled_8c.html#a81c2c49198531fb6551eb288e29c084e',1,'neorv32_neoled_get_buffer_size(void):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a81c2c49198531fb6551eb288e29c084e',1,'neorv32_neoled_get_buffer_size(void):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fset_5fmode_82',['neorv32_neoled_set_mode',['../neorv32__neoled_8c.html#a484fcc6797b6d9cef86192e9593ec33d',1,'neorv32_neoled_set_mode(uint32_t mode):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a484fcc6797b6d9cef86192e9593ec33d',1,'neorv32_neoled_set_mode(uint32_t mode):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fsetup_83',['neorv32_neoled_setup',['../neorv32__neoled_8c.html#ac6e94602453779a2791bd0734465f5a3',1,'neorv32_neoled_setup(uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#ac6e94602453779a2791bd0734465f5a3',1,'neorv32_neoled_setup(uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fsetup_5fws2812_84',['neorv32_neoled_setup_ws2812',['../neorv32__neoled_8c.html#adade69c7368c28180b9992d5f0ab6031',1,'neorv32_neoled_setup_ws2812(int irq_mode):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#adade69c7368c28180b9992d5f0ab6031',1,'neorv32_neoled_setup_ws2812(int irq_mode):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fstrobe_5fblocking_85',['neorv32_neoled_strobe_blocking',['../neorv32__neoled_8c.html#a5aa9eb4dd3655fa08e1b61eb0f36589c',1,'neorv32_neoled_strobe_blocking(void):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a5aa9eb4dd3655fa08e1b61eb0f36589c',1,'neorv32_neoled_strobe_blocking(void):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fstrobe_5fnonblocking_86',['neorv32_neoled_strobe_nonblocking',['../neorv32__neoled_8c.html#abf7882b949373df0774fc9cc20c2bd2e',1,'neorv32_neoled_strobe_nonblocking(void):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#abf7882b949373df0774fc9cc20c2bd2e',1,'neorv32_neoled_strobe_nonblocking(void):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fwrite_5fblocking_87',['neorv32_neoled_write_blocking',['../neorv32__neoled_8c.html#a3ee5b3602da3ae982628e2802587e451',1,'neorv32_neoled_write_blocking(uint32_t data):&#160;neorv32_neoled.c'],['../neorv32__neoled_8h.html#a3ee5b3602da3ae982628e2802587e451',1,'neorv32_neoled_write_blocking(uint32_t data):&#160;neorv32_neoled.c']]], + ['neorv32_5fneoled_5fwrite_5fnonblocking_88',['neorv32_neoled_write_nonblocking',['../neorv32__neoled_8h.html#ad2a318bd59be12de34797ced0f7743c6',1,'neorv32_neoled.h']]], + ['neorv32_5fonewire_5favailable_89',['neorv32_onewire_available',['../neorv32__onewire_8c.html#a865e5c381fd3c27c6981a589a5124d1e',1,'neorv32_onewire_available(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a865e5c381fd3c27c6981a589a5124d1e',1,'neorv32_onewire_available(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fbusy_90',['neorv32_onewire_busy',['../neorv32__onewire_8c.html#a01b6236b89c045ddbd58398361c6ee0a',1,'neorv32_onewire_busy(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a01b6236b89c045ddbd58398361c6ee0a',1,'neorv32_onewire_busy(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fdisable_91',['neorv32_onewire_disable',['../neorv32__onewire_8c.html#a7e329eeb1cd98301a53b271a6a102385',1,'neorv32_onewire_disable(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a7e329eeb1cd98301a53b271a6a102385',1,'neorv32_onewire_disable(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fenable_92',['neorv32_onewire_enable',['../neorv32__onewire_8c.html#ae6fe766e7decf18869cfb86bba741ca4',1,'neorv32_onewire_enable(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#ae6fe766e7decf18869cfb86bba741ca4',1,'neorv32_onewire_enable(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fflush_93',['neorv32_onewire_flush',['../neorv32__onewire_8c.html#a05e220711255e82460bc92010199eb53',1,'neorv32_onewire_flush(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a05e220711255e82460bc92010199eb53',1,'neorv32_onewire_flush(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fget_5ffifo_5fdepth_94',['neorv32_onewire_get_fifo_depth',['../neorv32__onewire_8c.html#a32128bfcea4d8c8e31b0b59498e59798',1,'neorv32_onewire_get_fifo_depth(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a32128bfcea4d8c8e31b0b59498e59798',1,'neorv32_onewire_get_fifo_depth(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbit_95',['neorv32_onewire_read_bit',['../neorv32__onewire_8c.html#aace8398062b759256a516e6245aced83',1,'neorv32_onewire_read_bit(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#aace8398062b759256a516e6245aced83',1,'neorv32_onewire_read_bit(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbit_5fblocking_96',['neorv32_onewire_read_bit_blocking',['../neorv32__onewire_8c.html#ace8b7cf697b068b6b51676d84dec5960',1,'neorv32_onewire_read_bit_blocking(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#ace8b7cf697b068b6b51676d84dec5960',1,'neorv32_onewire_read_bit_blocking(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbit_5fget_97',['neorv32_onewire_read_bit_get',['../neorv32__onewire_8c.html#aa4a19d2d8dc3b3401307615aec201190',1,'neorv32_onewire_read_bit_get(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#aa4a19d2d8dc3b3401307615aec201190',1,'neorv32_onewire_read_bit_get(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbyte_98',['neorv32_onewire_read_byte',['../neorv32__onewire_8c.html#a01ddba7a9148be542b5c52e39e6f46d6',1,'neorv32_onewire_read_byte(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a01ddba7a9148be542b5c52e39e6f46d6',1,'neorv32_onewire_read_byte(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbyte_5fblocking_99',['neorv32_onewire_read_byte_blocking',['../neorv32__onewire_8c.html#a7510e65a26aeefb40e994fd00667537e',1,'neorv32_onewire_read_byte_blocking(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a7510e65a26aeefb40e994fd00667537e',1,'neorv32_onewire_read_byte_blocking(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbyte_5fget_100',['neorv32_onewire_read_byte_get',['../neorv32__onewire_8c.html#a4c7eec15c095c97c939163f631f51dab',1,'neorv32_onewire_read_byte_get(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a4c7eec15c095c97c939163f631f51dab',1,'neorv32_onewire_read_byte_get(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5freset_101',['neorv32_onewire_reset',['../neorv32__onewire_8c.html#a3072f7167831edc95dee44ecfef6a0d4',1,'neorv32_onewire_reset(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a3072f7167831edc95dee44ecfef6a0d4',1,'neorv32_onewire_reset(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5freset_5fblocking_102',['neorv32_onewire_reset_blocking',['../neorv32__onewire_8c.html#af8ca6be495176797b7da3857e2f794f9',1,'neorv32_onewire_reset_blocking(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#af8ca6be495176797b7da3857e2f794f9',1,'neorv32_onewire_reset_blocking(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5freset_5fget_5fpresence_103',['neorv32_onewire_reset_get_presence',['../neorv32__onewire_8c.html#a43eb8a08eeaa83e3d7e9aa5058a4269f',1,'neorv32_onewire_reset_get_presence(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a43eb8a08eeaa83e3d7e9aa5058a4269f',1,'neorv32_onewire_reset_get_presence(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fsense_104',['neorv32_onewire_sense',['../neorv32__onewire_8c.html#a122531c7154126858c46d89e003d838d',1,'neorv32_onewire_sense(void):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a122531c7154126858c46d89e003d838d',1,'neorv32_onewire_sense(void):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fsetup_105',['neorv32_onewire_setup',['../neorv32__onewire_8c.html#a224005037387484dfa510a1355a62828',1,'neorv32_onewire_setup(uint32_t t_base):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a224005037387484dfa510a1355a62828',1,'neorv32_onewire_setup(uint32_t t_base):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbit_106',['neorv32_onewire_write_bit',['../neorv32__onewire_8c.html#a49d0a2a386f129fd2f4fed880bba31d4',1,'neorv32_onewire_write_bit(uint8_t bit):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a49d0a2a386f129fd2f4fed880bba31d4',1,'neorv32_onewire_write_bit(uint8_t bit):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbit_5fblocking_107',['neorv32_onewire_write_bit_blocking',['../neorv32__onewire_8c.html#a6f7b6690a2437e0b574a8a9a23dc0eaa',1,'neorv32_onewire_write_bit_blocking(uint8_t bit):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a6f7b6690a2437e0b574a8a9a23dc0eaa',1,'neorv32_onewire_write_bit_blocking(uint8_t bit):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbyte_108',['neorv32_onewire_write_byte',['../neorv32__onewire_8c.html#a23b96b68c3214b188525eb102cafb620',1,'neorv32_onewire_write_byte(uint8_t byte):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#a23b96b68c3214b188525eb102cafb620',1,'neorv32_onewire_write_byte(uint8_t byte):&#160;neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbyte_5fblocking_109',['neorv32_onewire_write_byte_blocking',['../neorv32__onewire_8c.html#ac78557c77482b59394677f42fda4fdf1',1,'neorv32_onewire_write_byte_blocking(uint8_t byte):&#160;neorv32_onewire.c'],['../neorv32__onewire_8h.html#ac78557c77482b59394677f42fda4fdf1',1,'neorv32_onewire_write_byte_blocking(uint8_t byte):&#160;neorv32_onewire.c']]], + ['neorv32_5fpmw_5fget_5fnum_5fchannels_110',['neorv32_pmw_get_num_channels',['../neorv32__pwm_8c.html#a43d8a47dc79ebac24c8a7d2d8247d2a5',1,'neorv32_pmw_get_num_channels(void):&#160;neorv32_pwm.c'],['../neorv32__pwm_8h.html#a43d8a47dc79ebac24c8a7d2d8247d2a5',1,'neorv32_pmw_get_num_channels(void):&#160;neorv32_pwm.c']]], + ['neorv32_5fpwm_5favailable_111',['neorv32_pwm_available',['../neorv32__pwm_8c.html#afb12c860b2f7fa6cd1e069ea540da41c',1,'neorv32_pwm_available(void):&#160;neorv32_pwm.c'],['../neorv32__pwm_8h.html#afb12c860b2f7fa6cd1e069ea540da41c',1,'neorv32_pwm_available(void):&#160;neorv32_pwm.c']]], + ['neorv32_5fpwm_5fch_5fdisable_112',['neorv32_pwm_ch_disable',['../neorv32__pwm_8c.html#a7bc39afa807b7c2e06d6fd8b4dc7506c',1,'neorv32_pwm_ch_disable(int channel):&#160;neorv32_pwm.c'],['../neorv32__pwm_8h.html#a7bc39afa807b7c2e06d6fd8b4dc7506c',1,'neorv32_pwm_ch_disable(int channel):&#160;neorv32_pwm.c']]], + ['neorv32_5fpwm_5fch_5fenable_113',['neorv32_pwm_ch_enable',['../neorv32__pwm_8c.html#af00e67388ef9186e051e518883ad9a40',1,'neorv32_pwm_ch_enable(int channel):&#160;neorv32_pwm.c'],['../neorv32__pwm_8h.html#af00e67388ef9186e051e518883ad9a40',1,'neorv32_pwm_ch_enable(int channel):&#160;neorv32_pwm.c']]], + ['neorv32_5fpwm_5fch_5fset_5fclock_114',['neorv32_pwm_ch_set_clock',['../neorv32__pwm_8c.html#a784672443179a7c1e604f23854e001f4',1,'neorv32_pwm_ch_set_clock(int channel, int prsc, int cdiv):&#160;neorv32_pwm.c'],['../neorv32__pwm_8h.html#a784672443179a7c1e604f23854e001f4',1,'neorv32_pwm_ch_set_clock(int channel, int prsc, int cdiv):&#160;neorv32_pwm.c']]], + ['neorv32_5fpwm_5fch_5fset_5fduty_115',['neorv32_pwm_ch_set_duty',['../neorv32__pwm_8c.html#a518bad33405039fadd668d16276acb14',1,'neorv32_pwm_ch_set_duty(int channel, int duty):&#160;neorv32_pwm.c'],['../neorv32__pwm_8h.html#a518bad33405039fadd668d16276acb14',1,'neorv32_pwm_ch_set_duty(int channel, int duty):&#160;neorv32_pwm.c']]], + ['neorv32_5frte_5fcontext_5fget_116',['neorv32_rte_context_get',['../neorv32__rte_8c.html#a65e71acc8916b42b59dc2cf6bba30ba3',1,'neorv32_rte_context_get(int x):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a65e71acc8916b42b59dc2cf6bba30ba3',1,'neorv32_rte_context_get(int x):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fcontext_5fput_117',['neorv32_rte_context_put',['../neorv32__rte_8c.html#ae13a9c1fd59ad71afb0d47cf9a0b303e',1,'neorv32_rte_context_put(int x, uint32_t data):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#ae13a9c1fd59ad71afb0d47cf9a0b303e',1,'neorv32_rte_context_put(int x, uint32_t data):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fcore_118',['neorv32_rte_core',['../neorv32__rte_8c.html#ad6ab21f2218a3e88e0cc50d0643dafad',1,'neorv32_rte_core(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#ad6ab21f2218a3e88e0cc50d0643dafad',1,'neorv32_rte_core(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fdebug_5fhandler_119',['neorv32_rte_debug_handler',['../neorv32__rte_8c.html#a65422bb44f1e7bc011e9bfc5d8451ebe',1,'neorv32_rte_debug_handler(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a65422bb44f1e7bc011e9bfc5d8451ebe',1,'neorv32_rte_debug_handler(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fhandler_5finstall_120',['neorv32_rte_handler_install',['../neorv32__rte_8c.html#a2cf31cfa569a03a20d554b6400c4c5e2',1,'neorv32_rte_handler_install(int id, void(*handler)(void)):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a2cf31cfa569a03a20d554b6400c4c5e2',1,'neorv32_rte_handler_install(int id, void(*handler)(void)):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fhandler_5funinstall_121',['neorv32_rte_handler_uninstall',['../neorv32__rte_8c.html#a10fde6229bf391e46148405616404a65',1,'neorv32_rte_handler_uninstall(int id):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a10fde6229bf391e46148405616404a65',1,'neorv32_rte_handler_uninstall(int id):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5fabout_122',['neorv32_rte_print_about',['../neorv32__rte_8c.html#aa442c0e39f9156a131c3432fda587692',1,'neorv32_rte_print_about(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#aa442c0e39f9156a131c3432fda587692',1,'neorv32_rte_print_about(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5fhw_5fconfig_123',['neorv32_rte_print_hw_config',['../neorv32__rte_8c.html#a05e8304963e402d228a76aff1868771c',1,'neorv32_rte_print_hw_config(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a05e8304963e402d228a76aff1868771c',1,'neorv32_rte_print_hw_config(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5fhw_5fversion_124',['neorv32_rte_print_hw_version',['../neorv32__rte_8c.html#aad6f5256a265807c4cde163bcba8dae9',1,'neorv32_rte_print_hw_version(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#aad6f5256a265807c4cde163bcba8dae9',1,'neorv32_rte_print_hw_version(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5flicense_125',['neorv32_rte_print_license',['../neorv32__rte_8c.html#acd96aa73eebe6d4bbc9aabe1230cbabc',1,'neorv32_rte_print_license(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#acd96aa73eebe6d4bbc9aabe1230cbabc',1,'neorv32_rte_print_license(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5flogo_126',['neorv32_rte_print_logo',['../neorv32__rte_8c.html#a16df1b48f2e1258a51d3bb7f49531cf3',1,'neorv32_rte_print_logo(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a16df1b48f2e1258a51d3bb7f49531cf3',1,'neorv32_rte_print_logo(void):&#160;neorv32_rte.c']]], + ['neorv32_5frte_5fsetup_127',['neorv32_rte_setup',['../neorv32__rte_8c.html#a343e1913bdc37db9b168fb4def0e6170',1,'neorv32_rte_setup(void):&#160;neorv32_rte.c'],['../neorv32__rte_8h.html#a343e1913bdc37db9b168fb4def0e6170',1,'neorv32_rte_setup(void):&#160;neorv32_rte.c']]], + ['neorv32_5fsdi_5favailable_128',['neorv32_sdi_available',['../neorv32__sdi_8c.html#a51412722efdb18cd09667622b215e825',1,'neorv32_sdi_available(void):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a51412722efdb18cd09667622b215e825',1,'neorv32_sdi_available(void):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fcheck_5fcs_129',['neorv32_sdi_check_cs',['../neorv32__sdi_8c.html#a2636cf1959ce1f3eb4b77c00ca2e2707',1,'neorv32_sdi_check_cs(void):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a2636cf1959ce1f3eb4b77c00ca2e2707',1,'neorv32_sdi_check_cs(void):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fdisable_130',['neorv32_sdi_disable',['../neorv32__sdi_8c.html#a8bd54bca8aea6147651c8115ee616f54',1,'neorv32_sdi_disable(void):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a8bd54bca8aea6147651c8115ee616f54',1,'neorv32_sdi_disable(void):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fenable_131',['neorv32_sdi_enable',['../neorv32__sdi_8c.html#a5d68b9b1642baf3519076e55a22a8f61',1,'neorv32_sdi_enable(void):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a5d68b9b1642baf3519076e55a22a8f61',1,'neorv32_sdi_enable(void):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fget_132',['neorv32_sdi_get',['../neorv32__sdi_8c.html#a4d54ce22ec97eb83da118439576e3277',1,'neorv32_sdi_get(uint8_t *data):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a4d54ce22ec97eb83da118439576e3277',1,'neorv32_sdi_get(uint8_t *data):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fget_5ffifo_5fdepth_133',['neorv32_sdi_get_fifo_depth',['../neorv32__sdi_8c.html#a7390faeb01b4de3dd5ac18335736b90c',1,'neorv32_sdi_get_fifo_depth(void):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a7390faeb01b4de3dd5ac18335736b90c',1,'neorv32_sdi_get_fifo_depth(void):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fput_134',['neorv32_sdi_put',['../neorv32__sdi_8c.html#ac7a262d16c42bbac27723ff779545569',1,'neorv32_sdi_put(uint8_t data):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#ac7a262d16c42bbac27723ff779545569',1,'neorv32_sdi_put(uint8_t data):&#160;neorv32_sdi.c']]], + ['neorv32_5fsdi_5fsetup_135',['neorv32_sdi_setup',['../neorv32__sdi_8c.html#a3246118dc0d7e1f61bc2485bbab44149',1,'neorv32_sdi_setup(uint32_t irq_mask):&#160;neorv32_sdi.c'],['../neorv32__sdi_8h.html#a3246118dc0d7e1f61bc2485bbab44149',1,'neorv32_sdi_setup(uint32_t irq_mask):&#160;neorv32_sdi.c']]], + ['neorv32_5fslink_5favailable_136',['neorv32_slink_available',['../neorv32__slink_8c.html#aaf0f7bc96b797e819ccaae94292d9ddb',1,'neorv32_slink_available(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#aaf0f7bc96b797e819ccaae94292d9ddb',1,'neorv32_slink_available(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fcheck_5flast_137',['neorv32_slink_check_last',['../neorv32__slink_8c.html#a3e02c558548c1c6178c49adee9a007f7',1,'neorv32_slink_check_last(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#a3e02c558548c1c6178c49adee9a007f7',1,'neorv32_slink_check_last(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fget_138',['neorv32_slink_get',['../neorv32__slink_8c.html#ace319592c12dc6a0fe1b7dd66bdf9284',1,'neorv32_slink_get(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#ace319592c12dc6a0fe1b7dd66bdf9284',1,'neorv32_slink_get(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fget_5frx_5ffifo_5fdepth_139',['neorv32_slink_get_rx_fifo_depth',['../neorv32__slink_8c.html#a575c7663ca0bd07c95b1d45152a3ddf8',1,'neorv32_slink_get_rx_fifo_depth(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#a575c7663ca0bd07c95b1d45152a3ddf8',1,'neorv32_slink_get_rx_fifo_depth(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fget_5fsrc_140',['neorv32_slink_get_src',['../neorv32__slink_8c.html#a1a9269f42552a849450aecd99f7ec7a0',1,'neorv32_slink_get_src(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#a1a9269f42552a849450aecd99f7ec7a0',1,'neorv32_slink_get_src(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fget_5ftx_5ffifo_5fdepth_141',['neorv32_slink_get_tx_fifo_depth',['../neorv32__slink_8c.html#aaf0d0d1b890353d4f3bf49450ec2fad2',1,'neorv32_slink_get_tx_fifo_depth(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#aaf0d0d1b890353d4f3bf49450ec2fad2',1,'neorv32_slink_get_tx_fifo_depth(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fput_142',['neorv32_slink_put',['../neorv32__slink_8c.html#aaa9fdb9cbfa7888e92790ab65431d21d',1,'neorv32_slink_put(uint32_t tx_data):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#aaa9fdb9cbfa7888e92790ab65431d21d',1,'neorv32_slink_put(uint32_t tx_data):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fput_5flast_143',['neorv32_slink_put_last',['../neorv32__slink_8c.html#a2136bc0b12ee2e6703e84a6417a1e8eb',1,'neorv32_slink_put_last(uint32_t tx_data):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#a2136bc0b12ee2e6703e84a6417a1e8eb',1,'neorv32_slink_put_last(uint32_t tx_data):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5frx_5fclear_144',['neorv32_slink_rx_clear',['../neorv32__slink_8c.html#ad149fea81e6d28f77450b8ba50cf706e',1,'neorv32_slink_rx_clear(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#ad149fea81e6d28f77450b8ba50cf706e',1,'neorv32_slink_rx_clear(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5frx_5fstatus_145',['neorv32_slink_rx_status',['../neorv32__slink_8c.html#ad57fc0941fe32e8bf423ce3e57e2c10a',1,'neorv32_slink_rx_status(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#ad57fc0941fe32e8bf423ce3e57e2c10a',1,'neorv32_slink_rx_status(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fset_5fdst_146',['neorv32_slink_set_dst',['../neorv32__slink_8c.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc',1,'neorv32_slink_set_dst(uint32_t dst):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc',1,'neorv32_slink_set_dst(uint32_t dst):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5fsetup_147',['neorv32_slink_setup',['../neorv32__slink_8c.html#a8f0b4a768f53a72a5c16034e160ce321',1,'neorv32_slink_setup(uint32_t rx_irq, uint32_t tx_irq):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#a8f0b4a768f53a72a5c16034e160ce321',1,'neorv32_slink_setup(uint32_t rx_irq, uint32_t tx_irq):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5ftx_5fclear_148',['neorv32_slink_tx_clear',['../neorv32__slink_8c.html#ac7484e9e3848f94efe016dd064f6a57f',1,'neorv32_slink_tx_clear(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#ac7484e9e3848f94efe016dd064f6a57f',1,'neorv32_slink_tx_clear(void):&#160;neorv32_slink.c']]], + ['neorv32_5fslink_5ftx_5fstatus_149',['neorv32_slink_tx_status',['../neorv32__slink_8c.html#ad0252e7ae915e5840cd17e8c52e94a1c',1,'neorv32_slink_tx_status(void):&#160;neorv32_slink.c'],['../neorv32__slink_8h.html#ad0252e7ae915e5840cd17e8c52e94a1c',1,'neorv32_slink_tx_status(void):&#160;neorv32_slink.c']]], + ['neorv32_5fspi_5favailable_150',['neorv32_spi_available',['../neorv32__spi_8c.html#a7266ee439d0ec11c5cedd4bf1a258272',1,'neorv32_spi_available(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a7266ee439d0ec11c5cedd4bf1a258272',1,'neorv32_spi_available(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fbusy_151',['neorv32_spi_busy',['../neorv32__spi_8c.html#a332c7a1be511812ac0a2b102c165398a',1,'neorv32_spi_busy(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a332c7a1be511812ac0a2b102c165398a',1,'neorv32_spi_busy(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fcheck_5fcs_152',['neorv32_spi_check_cs',['../neorv32__spi_8c.html#a82bb4d4c222b2bdc57e917c348481501',1,'neorv32_spi_check_cs(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a82bb4d4c222b2bdc57e917c348481501',1,'neorv32_spi_check_cs(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fdis_153',['neorv32_spi_cs_dis',['../neorv32__spi_8c.html#aa10ec90ccba6325eeeebb8f6f298d30c',1,'neorv32_spi_cs_dis(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#aa10ec90ccba6325eeeebb8f6f298d30c',1,'neorv32_spi_cs_dis(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fdis_5fnonblocking_154',['neorv32_spi_cs_dis_nonblocking',['../neorv32__spi_8c.html#ad8dd1b5a85a9daef4c8c21c9990884c1',1,'neorv32_spi_cs_dis_nonblocking(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#ad8dd1b5a85a9daef4c8c21c9990884c1',1,'neorv32_spi_cs_dis_nonblocking(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fen_155',['neorv32_spi_cs_en',['../neorv32__spi_8c.html#a737961d040ac09567350f89034f9e122',1,'neorv32_spi_cs_en(int cs):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a737961d040ac09567350f89034f9e122',1,'neorv32_spi_cs_en(int cs):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fen_5fnonblocking_156',['neorv32_spi_cs_en_nonblocking',['../neorv32__spi_8c.html#a97b5536347a27b053f071ba49071ba6f',1,'neorv32_spi_cs_en_nonblocking(int cs):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a97b5536347a27b053f071ba49071ba6f',1,'neorv32_spi_cs_en_nonblocking(int cs):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fdisable_157',['neorv32_spi_disable',['../neorv32__spi_8c.html#a817dd9a38bfceb2048e40874a83ba169',1,'neorv32_spi_disable(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a817dd9a38bfceb2048e40874a83ba169',1,'neorv32_spi_disable(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fenable_158',['neorv32_spi_enable',['../neorv32__spi_8c.html#a8fa25d144ccb20a2faf0450c8dddd16e',1,'neorv32_spi_enable(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a8fa25d144ccb20a2faf0450c8dddd16e',1,'neorv32_spi_enable(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fget_5fclock_5fspeed_159',['neorv32_spi_get_clock_speed',['../neorv32__spi_8c.html#a01c6b63d7349447e2277f2649c3c89f2',1,'neorv32_spi_get_clock_speed(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a01c6b63d7349447e2277f2649c3c89f2',1,'neorv32_spi_get_clock_speed(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fget_5ffifo_5fdepth_160',['neorv32_spi_get_fifo_depth',['../neorv32__spi_8c.html#ae1c4da7e4dc2e42b04d7187f684f142c',1,'neorv32_spi_get_fifo_depth(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#ae1c4da7e4dc2e42b04d7187f684f142c',1,'neorv32_spi_get_fifo_depth(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fget_5fnonblocking_161',['neorv32_spi_get_nonblocking',['../neorv32__spi_8c.html#aad66fa8f8d1a92d4f355de7579bfbfd2',1,'neorv32_spi_get_nonblocking(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#aad66fa8f8d1a92d4f355de7579bfbfd2',1,'neorv32_spi_get_nonblocking(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fhighspeed_5fdisable_162',['neorv32_spi_highspeed_disable',['../neorv32__spi_8c.html#a67e9717635e272bc0e04408135a2f04d',1,'neorv32_spi_highspeed_disable(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a67e9717635e272bc0e04408135a2f04d',1,'neorv32_spi_highspeed_disable(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5fhighspeed_5fenable_163',['neorv32_spi_highspeed_enable',['../neorv32__spi_8c.html#acf131faa3ad970c19a3cd8a47cb54f65',1,'neorv32_spi_highspeed_enable(void):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#acf131faa3ad970c19a3cd8a47cb54f65',1,'neorv32_spi_highspeed_enable(void):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5finit_164',['neorv32_spi_init',['../neorv32__spi__irq_8c.html#a4aa4746fd210ecc0c3614089a6951ddf',1,'neorv32_spi_init(t_neorv32_spi *self):&#160;neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#a4aa4746fd210ecc0c3614089a6951ddf',1,'neorv32_spi_init(t_neorv32_spi *self):&#160;neorv32_spi_irq.c']]], + ['neorv32_5fspi_5fisr_165',['neorv32_spi_isr',['../neorv32__spi__irq_8c.html#aa641816bb302df497664aa21ea69ed16',1,'neorv32_spi_isr(t_neorv32_spi *self):&#160;neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#aa641816bb302df497664aa21ea69ed16',1,'neorv32_spi_isr(t_neorv32_spi *self):&#160;neorv32_spi_irq.c']]], + ['neorv32_5fspi_5fput_5fnonblocking_166',['neorv32_spi_put_nonblocking',['../neorv32__spi_8c.html#aec8583e988789e846d21c2a35e6b06e7',1,'neorv32_spi_put_nonblocking(uint8_t tx_data):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#aec8583e988789e846d21c2a35e6b06e7',1,'neorv32_spi_put_nonblocking(uint8_t tx_data):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5frw_167',['neorv32_spi_rw',['../neorv32__spi__irq_8c.html#a1f44ed849415d8e1d659c0485762c485',1,'neorv32_spi_rw(t_neorv32_spi *self, uint8_t csn, void *spi, uint32_t len):&#160;neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#a1f44ed849415d8e1d659c0485762c485',1,'neorv32_spi_rw(t_neorv32_spi *self, uint8_t csn, void *spi, uint32_t len):&#160;neorv32_spi_irq.c']]], + ['neorv32_5fspi_5frw_5fbusy_168',['neorv32_spi_rw_busy',['../neorv32__spi__irq_8c.html#a1863e19932bc6a79f2ca27d23eb74ef5',1,'neorv32_spi_rw_busy(t_neorv32_spi *self):&#160;neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#a1863e19932bc6a79f2ca27d23eb74ef5',1,'neorv32_spi_rw_busy(t_neorv32_spi *self):&#160;neorv32_spi_irq.c']]], + ['neorv32_5fspi_5fsetup_169',['neorv32_spi_setup',['../neorv32__spi_8c.html#a7d8124d986b69210081df6f1aa653552',1,'neorv32_spi_setup(int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a7d8124d986b69210081df6f1aa653552',1,'neorv32_spi_setup(int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask):&#160;neorv32_spi.c']]], + ['neorv32_5fspi_5ftrans_170',['neorv32_spi_trans',['../neorv32__spi_8c.html#a7af79950eefc26e67a89bde02f255532',1,'neorv32_spi_trans(uint8_t tx_data):&#160;neorv32_spi.c'],['../neorv32__spi_8h.html#a7af79950eefc26e67a89bde02f255532',1,'neorv32_spi_trans(uint8_t tx_data):&#160;neorv32_spi.c']]], + ['neorv32_5fsysinfo_5fget_5fclk_171',['neorv32_sysinfo_get_clk',['../neorv32__sysinfo_8c.html#a098105f8a133087f286c7010c5dec8dd',1,'neorv32_sysinfo_get_clk(void):&#160;neorv32_sysinfo.c'],['../neorv32__sysinfo_8h.html#a098105f8a133087f286c7010c5dec8dd',1,'neorv32_sysinfo_get_clk(void):&#160;neorv32_sysinfo.c']]], + ['neorv32_5fsysinfo_5fset_5fclk_172',['neorv32_sysinfo_set_clk',['../neorv32__sysinfo_8c.html#a9b1ca94e298533641547ee448e1c52b3',1,'neorv32_sysinfo_set_clk(uint32_t clock):&#160;neorv32_sysinfo.c'],['../neorv32__sysinfo_8h.html#a9b1ca94e298533641547ee448e1c52b3',1,'neorv32_sysinfo_set_clk(uint32_t clock):&#160;neorv32_sysinfo.c']]], + ['neorv32_5ftrng_5favailable_173',['neorv32_trng_available',['../neorv32__trng_8c.html#af0c4139ff68763623b3d658a8dd8b5ce',1,'neorv32_trng_available(void):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#af0c4139ff68763623b3d658a8dd8b5ce',1,'neorv32_trng_available(void):&#160;neorv32_trng.c']]], + ['neorv32_5ftrng_5fcheck_5fsim_5fmode_174',['neorv32_trng_check_sim_mode',['../neorv32__trng_8c.html#aba36f08dd88f2f3e58353ae72eaa14f7',1,'neorv32_trng_check_sim_mode(void):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#aba36f08dd88f2f3e58353ae72eaa14f7',1,'neorv32_trng_check_sim_mode(void):&#160;neorv32_trng.c']]], + ['neorv32_5ftrng_5fdisable_175',['neorv32_trng_disable',['../neorv32__trng_8c.html#ae838bc980e28c300dc2c9c3f34a46bb8',1,'neorv32_trng_disable(void):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#ae838bc980e28c300dc2c9c3f34a46bb8',1,'neorv32_trng_disable(void):&#160;neorv32_trng.c']]], + ['neorv32_5ftrng_5fenable_176',['neorv32_trng_enable',['../neorv32__trng_8c.html#af64df166369d79bf744de06c8a962304',1,'neorv32_trng_enable(void):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#af64df166369d79bf744de06c8a962304',1,'neorv32_trng_enable(void):&#160;neorv32_trng.c']]], + ['neorv32_5ftrng_5ffifo_5fclear_177',['neorv32_trng_fifo_clear',['../neorv32__trng_8c.html#a87cfe338e2ff559f96c73f729465f967',1,'neorv32_trng_fifo_clear(void):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#a87cfe338e2ff559f96c73f729465f967',1,'neorv32_trng_fifo_clear(void):&#160;neorv32_trng.c']]], + ['neorv32_5ftrng_5fget_178',['neorv32_trng_get',['../neorv32__trng_8c.html#a9148bcb6a7c448c364e78fa98aac6985',1,'neorv32_trng_get(uint8_t *data):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#a9148bcb6a7c448c364e78fa98aac6985',1,'neorv32_trng_get(uint8_t *data):&#160;neorv32_trng.c']]], + ['neorv32_5ftrng_5fget_5ffifo_5fdepth_179',['neorv32_trng_get_fifo_depth',['../neorv32__trng_8c.html#ad24e44372f4fd1ed29a6967dccab4fb0',1,'neorv32_trng_get_fifo_depth(void):&#160;neorv32_trng.c'],['../neorv32__trng_8h.html#ad24e44372f4fd1ed29a6967dccab4fb0',1,'neorv32_trng_get_fifo_depth(void):&#160;neorv32_trng.c']]], + ['neorv32_5ftwd_5favailable_180',['neorv32_twd_available',['../neorv32__twd_8c.html#ae6392461557d300b3b9c1f8e63a7dcc7',1,'neorv32_twd_available(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#ae6392461557d300b3b9c1f8e63a7dcc7',1,'neorv32_twd_available(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fbusy_181',['neorv32_twd_busy',['../neorv32__twd_8c.html#a90e8f83ff4f6f05a5aef0046e82dc908',1,'neorv32_twd_busy(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a90e8f83ff4f6f05a5aef0046e82dc908',1,'neorv32_twd_busy(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fclear_5frx_182',['neorv32_twd_clear_rx',['../neorv32__twd_8c.html#ab12e92dfbe37710c12b44fed97c01c06',1,'neorv32_twd_clear_rx(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#ab12e92dfbe37710c12b44fed97c01c06',1,'neorv32_twd_clear_rx(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fclear_5ftx_183',['neorv32_twd_clear_tx',['../neorv32__twd_8c.html#a38f7c54e2b356851f3b18011796f3902',1,'neorv32_twd_clear_tx(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a38f7c54e2b356851f3b18011796f3902',1,'neorv32_twd_clear_tx(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fdisable_184',['neorv32_twd_disable',['../neorv32__twd_8c.html#af82c89d23e3fc3fbd61c750ecb25d0dc',1,'neorv32_twd_disable(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#af82c89d23e3fc3fbd61c750ecb25d0dc',1,'neorv32_twd_disable(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fenable_185',['neorv32_twd_enable',['../neorv32__twd_8c.html#a7fa01904130031ab2dee77b4058061c7',1,'neorv32_twd_enable(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a7fa01904130031ab2dee77b4058061c7',1,'neorv32_twd_enable(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fget_186',['neorv32_twd_get',['../neorv32__twd_8c.html#a6382d25525ff9bb88e6df0802f0037e2',1,'neorv32_twd_get(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a6382d25525ff9bb88e6df0802f0037e2',1,'neorv32_twd_get(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fget_5ffifo_5fdepth_187',['neorv32_twd_get_fifo_depth',['../neorv32__twd_8c.html#a4fe22b79183dc7d07a1b84a70328a00b',1,'neorv32_twd_get_fifo_depth(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a4fe22b79183dc7d07a1b84a70328a00b',1,'neorv32_twd_get_fifo_depth(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fput_188',['neorv32_twd_put',['../neorv32__twd_8c.html#a0cbf868493aa8931e5c5bc71e5b478a4',1,'neorv32_twd_put(uint8_t data):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a0cbf868493aa8931e5c5bc71e5b478a4',1,'neorv32_twd_put(uint8_t data):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5frx_5favailable_189',['neorv32_twd_rx_available',['../neorv32__twd_8c.html#af2b925dffe4e4d0f8412052b92281066',1,'neorv32_twd_rx_available(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#af2b925dffe4e4d0f8412052b92281066',1,'neorv32_twd_rx_available(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5frx_5ffull_190',['neorv32_twd_rx_full',['../neorv32__twd_8c.html#a138bd6bdefed2a24b746ddb550a02407',1,'neorv32_twd_rx_full(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a138bd6bdefed2a24b746ddb550a02407',1,'neorv32_twd_rx_full(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fsense_5fscl_191',['neorv32_twd_sense_scl',['../neorv32__twd_8c.html#a4d167a59c4297e0e93af5a74091bd752',1,'neorv32_twd_sense_scl(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a4d167a59c4297e0e93af5a74091bd752',1,'neorv32_twd_sense_scl(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fsense_5fsda_192',['neorv32_twd_sense_sda',['../neorv32__twd_8c.html#a6b728dd7e359c1f3ae170a4dae054a31',1,'neorv32_twd_sense_sda(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#a6b728dd7e359c1f3ae170a4dae054a31',1,'neorv32_twd_sense_sda(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5fsetup_193',['neorv32_twd_setup',['../neorv32__twd_8c.html#ace89f57655c6aacf6e05a5b6a29a1616',1,'neorv32_twd_setup(int device_addr, int fsel, int irq_rx_avail, int irq_rx_full, int irq_tx_empty):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#ace89f57655c6aacf6e05a5b6a29a1616',1,'neorv32_twd_setup(int device_addr, int fsel, int irq_rx_avail, int irq_rx_full, int irq_tx_empty):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5ftx_5fempty_194',['neorv32_twd_tx_empty',['../neorv32__twd_8c.html#ae106ee8a74649853eab1b2a07c2c0ede',1,'neorv32_twd_tx_empty(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#ae106ee8a74649853eab1b2a07c2c0ede',1,'neorv32_twd_tx_empty(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwd_5ftx_5ffull_195',['neorv32_twd_tx_full',['../neorv32__twd_8c.html#ac06102b8e4f692415ec91d37253a3118',1,'neorv32_twd_tx_full(void):&#160;neorv32_twd.c'],['../neorv32__twd_8h.html#ac06102b8e4f692415ec91d37253a3118',1,'neorv32_twd_tx_full(void):&#160;neorv32_twd.c']]], + ['neorv32_5ftwi_5favailable_196',['neorv32_twi_available',['../neorv32__twi_8c.html#aa2e01ebbc0c82d65ed4ded351f4d8711',1,'neorv32_twi_available(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#aa2e01ebbc0c82d65ed4ded351f4d8711',1,'neorv32_twi_available(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fbusy_197',['neorv32_twi_busy',['../neorv32__twi_8c.html#a4fff1ddade320f6cc568c6266f2c2acd',1,'neorv32_twi_busy(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a4fff1ddade320f6cc568c6266f2c2acd',1,'neorv32_twi_busy(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fdisable_198',['neorv32_twi_disable',['../neorv32__twi_8c.html#ae5f31e737c7a6c3c86070ff34cb0d861',1,'neorv32_twi_disable(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#ae5f31e737c7a6c3c86070ff34cb0d861',1,'neorv32_twi_disable(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fenable_199',['neorv32_twi_enable',['../neorv32__twi_8c.html#a22717887cffff1e6830756bc73140e7b',1,'neorv32_twi_enable(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a22717887cffff1e6830756bc73140e7b',1,'neorv32_twi_enable(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstart_200',['neorv32_twi_generate_start',['../neorv32__twi_8c.html#a633d460e4735eb369d74a834b03c8b78',1,'neorv32_twi_generate_start(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a633d460e4735eb369d74a834b03c8b78',1,'neorv32_twi_generate_start(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstart_5fnonblocking_201',['neorv32_twi_generate_start_nonblocking',['../neorv32__twi_8c.html#adbf2eaed0c76221da5c3091665fc885e',1,'neorv32_twi_generate_start_nonblocking(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#adbf2eaed0c76221da5c3091665fc885e',1,'neorv32_twi_generate_start_nonblocking(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstop_202',['neorv32_twi_generate_stop',['../neorv32__twi_8c.html#ad352447adcccccabd4e20577b34fbece',1,'neorv32_twi_generate_stop(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#ad352447adcccccabd4e20577b34fbece',1,'neorv32_twi_generate_stop(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstop_5fnonblocking_203',['neorv32_twi_generate_stop_nonblocking',['../neorv32__twi_8c.html#aa22430aab0a38d88cbd2c4220c573da0',1,'neorv32_twi_generate_stop_nonblocking(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#aa22430aab0a38d88cbd2c4220c573da0',1,'neorv32_twi_generate_stop_nonblocking(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fget_204',['neorv32_twi_get',['../neorv32__twi_8c.html#a7735376d26560866b153ed205dfcb2ba',1,'neorv32_twi_get(uint8_t *data):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a7735376d26560866b153ed205dfcb2ba',1,'neorv32_twi_get(uint8_t *data):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fget_5ffifo_5fdepth_205',['neorv32_twi_get_fifo_depth',['../neorv32__twi_8c.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2',1,'neorv32_twi_get_fifo_depth(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2',1,'neorv32_twi_get_fifo_depth(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fsend_5fnonblocking_206',['neorv32_twi_send_nonblocking',['../neorv32__twi_8c.html#a28fc44cce5d28f6e8c32268b239b07d5',1,'neorv32_twi_send_nonblocking(uint8_t data, int mack):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a28fc44cce5d28f6e8c32268b239b07d5',1,'neorv32_twi_send_nonblocking(uint8_t data, int mack):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fsense_5fscl_207',['neorv32_twi_sense_scl',['../neorv32__twi_8c.html#a71e204837e71ce8c18c66e2ef3e7d9ef',1,'neorv32_twi_sense_scl(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a71e204837e71ce8c18c66e2ef3e7d9ef',1,'neorv32_twi_sense_scl(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fsense_5fsda_208',['neorv32_twi_sense_sda',['../neorv32__twi_8c.html#a7645e3ba5a92ea0fbe446dbaac33b363',1,'neorv32_twi_sense_sda(void):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a7645e3ba5a92ea0fbe446dbaac33b363',1,'neorv32_twi_sense_sda(void):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5fsetup_209',['neorv32_twi_setup',['../neorv32__twi_8c.html#a7ea6f3509a7cf622234d4b83e33afbe3',1,'neorv32_twi_setup(int prsc, int cdiv, int clkstr):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#a7ea6f3509a7cf622234d4b83e33afbe3',1,'neorv32_twi_setup(int prsc, int cdiv, int clkstr):&#160;neorv32_twi.c']]], + ['neorv32_5ftwi_5ftrans_210',['neorv32_twi_trans',['../neorv32__twi_8c.html#ac7020f3379602f11c47ca16f1bd82f2e',1,'neorv32_twi_trans(uint8_t *data, int mack):&#160;neorv32_twi.c'],['../neorv32__twi_8h.html#ac7020f3379602f11c47ca16f1bd82f2e',1,'neorv32_twi_trans(uint8_t *data, int mack):&#160;neorv32_twi.c']]], + ['neorv32_5fuart_5favailable_211',['neorv32_uart_available',['../neorv32__uart_8c.html#abef6415b0391dc055713404312196682',1,'neorv32_uart_available(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#abef6415b0391dc055713404312196682',1,'neorv32_uart_available(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fchar_5freceived_212',['neorv32_uart_char_received',['../neorv32__uart_8c.html#adedb0e07efb232717534017167a5be98',1,'neorv32_uart_char_received(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#adedb0e07efb232717534017167a5be98',1,'neorv32_uart_char_received(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fchar_5freceived_5fget_213',['neorv32_uart_char_received_get',['../neorv32__uart_8c.html#aa490df3a9bb2aa3215fa6fad34ffe7d1',1,'neorv32_uart_char_received_get(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#aa490df3a9bb2aa3215fa6fad34ffe7d1',1,'neorv32_uart_char_received_get(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fdisable_214',['neorv32_uart_disable',['../neorv32__uart_8c.html#ae18804ccd29ec2fd1cc06e9ce985b704',1,'neorv32_uart_disable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#ae18804ccd29ec2fd1cc06e9ce985b704',1,'neorv32_uart_disable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fenable_215',['neorv32_uart_enable',['../neorv32__uart_8c.html#afa0533e81d53057c36f4997a2dbbe2bc',1,'neorv32_uart_enable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#afa0533e81d53057c36f4997a2dbbe2bc',1,'neorv32_uart_enable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fget_5frx_5ffifo_5fdepth_216',['neorv32_uart_get_rx_fifo_depth',['../neorv32__uart_8c.html#af85fb929c912d3edef3d86ffa833982a',1,'neorv32_uart_get_rx_fifo_depth(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#af85fb929c912d3edef3d86ffa833982a',1,'neorv32_uart_get_rx_fifo_depth(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fget_5ftx_5ffifo_5fdepth_217',['neorv32_uart_get_tx_fifo_depth',['../neorv32__uart_8c.html#a031e3e27c8783c299623468020a22b0e',1,'neorv32_uart_get_tx_fifo_depth(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a031e3e27c8783c299623468020a22b0e',1,'neorv32_uart_get_tx_fifo_depth(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fgetc_218',['neorv32_uart_getc',['../neorv32__uart_8c.html#a2efd432f63b8d36d44263d0b1f39a6dc',1,'neorv32_uart_getc(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a2efd432f63b8d36d44263d0b1f39a6dc',1,'neorv32_uart_getc(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fprintf_219',['neorv32_uart_printf',['../neorv32__uart_8c.html#ab8c1f9f451def9126ab2749d7bbe50d9',1,'neorv32_uart_printf(neorv32_uart_t *UARTx, const char *format,...):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#ab8c1f9f451def9126ab2749d7bbe50d9',1,'neorv32_uart_printf(neorv32_uart_t *UARTx, const char *format,...):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fputc_220',['neorv32_uart_putc',['../neorv32__uart_8c.html#a9bc7bb94a50b74e1145b78eec6094129',1,'neorv32_uart_putc(neorv32_uart_t *UARTx, char c):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a9bc7bb94a50b74e1145b78eec6094129',1,'neorv32_uart_putc(neorv32_uart_t *UARTx, char c):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fputs_221',['neorv32_uart_puts',['../neorv32__uart_8c.html#a45a07d5e71677162baaa1025759c67a2',1,'neorv32_uart_puts(neorv32_uart_t *UARTx, const char *s):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a45a07d5e71677162baaa1025759c67a2',1,'neorv32_uart_puts(neorv32_uart_t *UARTx, const char *s):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5frtscts_5fdisable_222',['neorv32_uart_rtscts_disable',['../neorv32__uart_8c.html#a7b2f924ef4554b1fa90433c38d97558d',1,'neorv32_uart_rtscts_disable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a7b2f924ef4554b1fa90433c38d97558d',1,'neorv32_uart_rtscts_disable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5frtscts_5fenable_223',['neorv32_uart_rtscts_enable',['../neorv32__uart_8c.html#a734b610f4cd1b474d7763f9700a715ec',1,'neorv32_uart_rtscts_enable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a734b610f4cd1b474d7763f9700a715ec',1,'neorv32_uart_rtscts_enable(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5frx_5fclear_224',['neorv32_uart_rx_clear',['../neorv32__uart_8c.html#afe0de59c14faff1e0c890d5465be25f0',1,'neorv32_uart_rx_clear(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#afe0de59c14faff1e0c890d5465be25f0',1,'neorv32_uart_rx_clear(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fscan_225',['neorv32_uart_scan',['../neorv32__uart_8c.html#ac429964878bd6deab61d9ed8659bca75',1,'neorv32_uart_scan(neorv32_uart_t *UARTx, char *buffer, int max_size, int echo):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#ac429964878bd6deab61d9ed8659bca75',1,'neorv32_uart_scan(neorv32_uart_t *UARTx, char *buffer, int max_size, int echo):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fsetup_226',['neorv32_uart_setup',['../neorv32__uart_8c.html#a9cdec36f2723c5373664022d1b68b841',1,'neorv32_uart_setup(neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a9cdec36f2723c5373664022d1b68b841',1,'neorv32_uart_setup(neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5ftx_5fbusy_227',['neorv32_uart_tx_busy',['../neorv32__uart_8c.html#aa7bef48a58e044c246b8c4ad32864502',1,'neorv32_uart_tx_busy(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#aa7bef48a58e044c246b8c4ad32864502',1,'neorv32_uart_tx_busy(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5ftx_5fclear_228',['neorv32_uart_tx_clear',['../neorv32__uart_8c.html#a27971954262a2fd1f21d3bf1ba27e87c',1,'neorv32_uart_tx_clear(neorv32_uart_t *UARTx):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a27971954262a2fd1f21d3bf1ba27e87c',1,'neorv32_uart_tx_clear(neorv32_uart_t *UARTx):&#160;neorv32_uart.c']]], + ['neorv32_5fuart_5fvprintf_229',['neorv32_uart_vprintf',['../neorv32__uart_8c.html#a8714cdb1c04d94bec322c6215ea10238',1,'neorv32_uart_vprintf(neorv32_uart_t *UARTx, const char *format, va_list args):&#160;neorv32_uart.c'],['../neorv32__uart_8h.html#a8714cdb1c04d94bec322c6215ea10238',1,'neorv32_uart_vprintf(neorv32_uart_t *UARTx, const char *format, va_list args):&#160;neorv32_uart.c']]], + ['neorv32_5fwdt_5favailable_230',['neorv32_wdt_available',['../neorv32__wdt_8c.html#a459a918c5a86c0167e8c748352d39827',1,'neorv32_wdt_available(void):&#160;neorv32_wdt.c'],['../neorv32__wdt_8h.html#a459a918c5a86c0167e8c748352d39827',1,'neorv32_wdt_available(void):&#160;neorv32_wdt.c']]], + ['neorv32_5fwdt_5fdisable_231',['neorv32_wdt_disable',['../neorv32__wdt_8c.html#aba52520582392a671e2b717715a330b2',1,'neorv32_wdt_disable(void):&#160;neorv32_wdt.c'],['../neorv32__wdt_8h.html#aba52520582392a671e2b717715a330b2',1,'neorv32_wdt_disable(void):&#160;neorv32_wdt.c']]], + ['neorv32_5fwdt_5ffeed_232',['neorv32_wdt_feed',['../neorv32__wdt_8c.html#ae4e86c42ed45eefdec43d9ece08b98a4',1,'neorv32_wdt_feed(uint32_t password):&#160;neorv32_wdt.c'],['../neorv32__wdt_8h.html#ae4e86c42ed45eefdec43d9ece08b98a4',1,'neorv32_wdt_feed(uint32_t password):&#160;neorv32_wdt.c']]], + ['neorv32_5fwdt_5fget_5fcause_233',['neorv32_wdt_get_cause',['../neorv32__wdt_8c.html#a80fa8d178d18c9b02d32d93e815b532e',1,'neorv32_wdt_get_cause(void):&#160;neorv32_wdt.c'],['../neorv32__wdt_8h.html#a80fa8d178d18c9b02d32d93e815b532e',1,'neorv32_wdt_get_cause(void):&#160;neorv32_wdt.c']]], + ['neorv32_5fwdt_5fsetup_234',['neorv32_wdt_setup',['../neorv32__wdt_8c.html#a2aa72608191d34ef41c5f545988ff400',1,'neorv32_wdt_setup(uint32_t timeout, int lock, int debug_en, int sleep_en, int strict):&#160;neorv32_wdt.c'],['../neorv32__wdt_8h.html#a2aa72608191d34ef41c5f545988ff400',1,'neorv32_wdt_setup(uint32_t timeout, int lock, int debug_en, int sleep_en, int strict):&#160;neorv32_wdt.c']]], + ['neorv32_5fxip_5favailable_235',['neorv32_xip_available',['../neorv32__xip_8c.html#afe2e5682a26cafdb0585d2233bccc7c6',1,'neorv32_xip_available(void):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#afe2e5682a26cafdb0585d2233bccc7c6',1,'neorv32_xip_available(void):&#160;neorv32_xip.c']]], + ['neorv32_5fxip_5fget_5fclock_5fspeed_236',['neorv32_xip_get_clock_speed',['../neorv32__xip_8c.html#a88f728101e82939bf7f8b9ab5a904706',1,'neorv32_xip_get_clock_speed(void):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#a88f728101e82939bf7f8b9ab5a904706',1,'neorv32_xip_get_clock_speed(void):&#160;neorv32_xip.c']]], + ['neorv32_5fxip_5fhighspeed_5fdisable_237',['neorv32_xip_highspeed_disable',['../neorv32__xip_8c.html#ad74f2842ed2251e3ae5c19e06dced0c3',1,'neorv32_xip_highspeed_disable(void):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#ad74f2842ed2251e3ae5c19e06dced0c3',1,'neorv32_xip_highspeed_disable(void):&#160;neorv32_xip.c']]], + ['neorv32_5fxip_5fhighspeed_5fenable_238',['neorv32_xip_highspeed_enable',['../neorv32__xip_8c.html#a6aef2ea29451ba2aa55160da777a5115',1,'neorv32_xip_highspeed_enable(void):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#a6aef2ea29451ba2aa55160da777a5115',1,'neorv32_xip_highspeed_enable(void):&#160;neorv32_xip.c']]], + ['neorv32_5fxip_5fsetup_239',['neorv32_xip_setup',['../neorv32__xip_8c.html#a549d68abdf5a3d7484abe6d5370bb999',1,'neorv32_xip_setup(int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#a549d68abdf5a3d7484abe6d5370bb999',1,'neorv32_xip_setup(int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd):&#160;neorv32_xip.c']]], + ['neorv32_5fxip_5fspi_5ftrans_240',['neorv32_xip_spi_trans',['../neorv32__xip_8c.html#a92f1446a3bb7fe6dee5dbed33882b223',1,'neorv32_xip_spi_trans(int nbytes, uint64_t *rtx_data):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#a92f1446a3bb7fe6dee5dbed33882b223',1,'neorv32_xip_spi_trans(int nbytes, uint64_t *rtx_data):&#160;neorv32_xip.c']]], + ['neorv32_5fxip_5fstart_241',['neorv32_xip_start',['../neorv32__xip_8c.html#a0ab2c36c973030a811e6d7abe0afc393',1,'neorv32_xip_start(int abytes):&#160;neorv32_xip.c'],['../neorv32__xip_8h.html#a0ab2c36c973030a811e6d7abe0afc393',1,'neorv32_xip_start(int abytes):&#160;neorv32_xip.c']]], + ['neorv32_5fxirq_5favailable_242',['neorv32_xirq_available',['../neorv32__xirq_8c.html#aaf30757d526030a8d81081915ab29a76',1,'neorv32_xirq_available(void):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#aaf30757d526030a8d81081915ab29a76',1,'neorv32_xirq_available(void):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fchannel_5fdisable_243',['neorv32_xirq_channel_disable',['../neorv32__xirq_8c.html#ae17509ad0c828aa9b36747b253cdbf0a',1,'neorv32_xirq_channel_disable(int channel):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#ae17509ad0c828aa9b36747b253cdbf0a',1,'neorv32_xirq_channel_disable(int channel):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fchannel_5fenable_244',['neorv32_xirq_channel_enable',['../neorv32__xirq_8c.html#abe63c0968c94b472082c8156a1a7db5c',1,'neorv32_xirq_channel_enable(int channel):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#abe63c0968c94b472082c8156a1a7db5c',1,'neorv32_xirq_channel_enable(int channel):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fget_5fnum_245',['neorv32_xirq_get_num',['../neorv32__xirq_8c.html#a717a8e34908cc01345e68920e76f229c',1,'neorv32_xirq_get_num(void):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#a717a8e34908cc01345e68920e76f229c',1,'neorv32_xirq_get_num(void):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fglobal_5fdisable_246',['neorv32_xirq_global_disable',['../neorv32__xirq_8c.html#ac64d3ff5619968499bccebebe6a6cab3',1,'neorv32_xirq_global_disable(void):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#ac64d3ff5619968499bccebebe6a6cab3',1,'neorv32_xirq_global_disable(void):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fglobal_5fenable_247',['neorv32_xirq_global_enable',['../neorv32__xirq_8c.html#a76468156ef52b371e06bc2ca8eddcd27',1,'neorv32_xirq_global_enable(void):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#a76468156ef52b371e06bc2ca8eddcd27',1,'neorv32_xirq_global_enable(void):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5finstall_248',['neorv32_xirq_install',['../neorv32__xirq_8c.html#a9129984f91c02afafaa072a5d86f9876',1,'neorv32_xirq_install(int channel, void(*handler)(void)):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#a9129984f91c02afafaa072a5d86f9876',1,'neorv32_xirq_install(int channel, void(*handler)(void)):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fsetup_249',['neorv32_xirq_setup',['../neorv32__xirq_8c.html#a9295997fce7114a8205325c4d75dd200',1,'neorv32_xirq_setup(void):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#a9295997fce7114a8205325c4d75dd200',1,'neorv32_xirq_setup(void):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5fsetup_5ftrigger_250',['neorv32_xirq_setup_trigger',['../neorv32__xirq_8c.html#a0d137f09d1e7dcd31c157b856033ac42',1,'neorv32_xirq_setup_trigger(int channel, int config):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#a0d137f09d1e7dcd31c157b856033ac42',1,'neorv32_xirq_setup_trigger(int channel, int config):&#160;neorv32_xirq.c']]], + ['neorv32_5fxirq_5funinstall_251',['neorv32_xirq_uninstall',['../neorv32__xirq_8c.html#a49ae67d1d5066cd795149e96b81127f7',1,'neorv32_xirq_uninstall(int channel):&#160;neorv32_xirq.c'],['../neorv32__xirq_8h.html#a49ae67d1d5066cd795149e96b81127f7',1,'neorv32_xirq_uninstall(int channel):&#160;neorv32_xirq.c']]] +]; diff --git a/sw/search/functions_9.js b/sw/search/functions_9.js new file mode 100644 index 0000000000..cd21ede8d2 --- /dev/null +++ b/sw/search/functions_9.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['pop_5fcount_0',['pop_count',['../game__of__life_2main_8c.html#aac4bec7738b12f5a4b4d7a3a6cb1ab8d',1,'main.c']]], + ['print_5fhelp_1',['print_help',['../bootloader_8c.html#a402ea961bfc2ffeee61e3a7c330b1559',1,'bootloader.c']]], + ['print_5fhex_5fbyte_2',['print_hex_byte',['../demo__twi_2main_8c.html#a2ebc688bc1dad328693fc0974b378fa0',1,'main.c']]], + ['print_5fhex_5fword_3',['print_hex_word',['../bootloader_8c.html#a70b7d5c3b3ae97e4e72e84c4bc28fb8a',1,'bootloader.c']]], + ['print_5frandom_5fdata_4',['print_random_data',['../demo__trng_2main_8c.html#a64205d97b57c99dc5e95b8621827f4a4',1,'main.c']]], + ['print_5freport_5',['print_report',['../atomic__test_2main_8c.html#a99377a057d14aaa9b45f8cab890e8cf7',1,'print_report(int num_err, int num_tests):&#160;main.c'],['../float__corner__test_2main_8c.html#a1740720aa8ce1a30fcf642be9140d203',1,'print_report(uint32_t num_err):&#160;main.c'],['../floating__point__test_2main_8c.html#a1740720aa8ce1a30fcf642be9140d203',1,'print_report(uint32_t num_err):&#160;main.c']]], + ['print_5funiverse_6',['print_universe',['../game__of__life_2main_8c.html#a9a455dea83a25f656fcc5217ad513dac',1,'main.c']]] +]; diff --git a/sw/search/functions_a.js b/sw/search/functions_a.js new file mode 100644 index 0000000000..f1960ec5c7 --- /dev/null +++ b/sw/search/functions_a.js @@ -0,0 +1,51 @@ +var searchData= +[ + ['read_5fbyte_0',['read_byte',['../demo__onewire_2main_8c.html#a951a31029af34715f20856eb82432637',1,'main.c']]], + ['read_5fmemory_1',['read_memory',['../bus__explorer_2main_8c.html#afc9b1ab3db46eccf51d55c715fa2fbd4',1,'main.c']]], + ['repetition_5fcount_5ftest_2',['repetition_count_test',['../demo__trng_2main_8c.html#af37eae672fee5e81f00a1dbf51b7e417',1,'main.c']]], + ['riscv_5femulate_5ffadds_3',['riscv_emulate_fadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a9d676567276439875c9b1a15b892b555',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffclasss_4',['riscv_emulate_fclasss',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ae41a0bf9d28c35f4d6db7177ccf8ee06',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fsw_5',['riscv_emulate_fcvt_sw',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0f2260b7b5793a95c49670379fc89617',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fswu_6',['riscv_emulate_fcvt_swu',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a10a05bface37bff32c78ed0746845794',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fws_7',['riscv_emulate_fcvt_ws',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a292365fe41a7a661e61ae746306ba5e9',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fwus_8',['riscv_emulate_fcvt_wus',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aad9fc7337e09081cf8c5bff8c28776c8',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffdivs_9',['riscv_emulate_fdivs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aeaf46a17b671278be2bf804159827a40',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffeqs_10',['riscv_emulate_feqs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a7cb3c6570b911cd1dfb7b6e798cc1d21',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffles_11',['riscv_emulate_fles',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac5fdef0607602fa0bdb93b3535fd709e',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5fflts_12',['riscv_emulate_flts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2b802122d53a2ce517b3d39fec34d7e0',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmadds_13',['riscv_emulate_fmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a39212f2e2bb0f1752092a1732f93edf3',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmaxs_14',['riscv_emulate_fmaxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af9b16a32d2bb13c8af5a678271d74889',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmins_15',['riscv_emulate_fmins',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a872cd30fb61190bd1ac719d25b01f5a3',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmsubs_16',['riscv_emulate_fmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a05d0d5a8eb9422e93448efdeb679cabf',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmuls_17',['riscv_emulate_fmuls',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ad43e8bdf4a6fbe229d22d24680f2be80',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffnmadds_18',['riscv_emulate_fnmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac8bb4450b39854ab07839e8f3505361c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffnmsubs_19',['riscv_emulate_fnmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a833638b346722dfa9d7d5c8d60998ec8',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsgnjns_20',['riscv_emulate_fsgnjns',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0c985e626ed1d69314f4e3a0f1f58624',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsgnjs_21',['riscv_emulate_fsgnjs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a12498d635f422f607b9b83facf3050dd',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsgnjxs_22',['riscv_emulate_fsgnjxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a98caf7f310820052ae96ce0f45e6cd26',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsqrts_23',['riscv_emulate_fsqrts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a1ceb3450f1e5c62d3079cd0e93c03501',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsubs_24',['riscv_emulate_fsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ace5d95b855ec1aa8eacdb5bbeea58197',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffadds_25',['riscv_intrinsic_fadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a4b151fcb252fc7b894f247f5af6a1809',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffclasss_26',['riscv_intrinsic_fclasss',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3064a5c57b5f45d57c4d19eb798724f6',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fsw_27',['riscv_intrinsic_fcvt_sw',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2103eb86052f6f8e24a8a848ffc6528a',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fswu_28',['riscv_intrinsic_fcvt_swu',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a837b7330f9d568791687ae1384b8ef28',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fws_29',['riscv_intrinsic_fcvt_ws',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a523fa0fb6f521311c7f44692c586b3ee',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fwus_30',['riscv_intrinsic_fcvt_wus',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3bc6ee3059a7e99b187c4ea5e217715b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffdivs_31',['riscv_intrinsic_fdivs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ab6a9d15643e3085ff80c7883f183a42b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffeqs_32',['riscv_intrinsic_feqs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af4ddfae45807d4e41f758672ee14cf7b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffles_33',['riscv_intrinsic_fles',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#adb83fab39d91e9291da2b7b07830cf82',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5fflts_34',['riscv_intrinsic_flts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a85aa18294a58997db2c324184196669c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmadds_35',['riscv_intrinsic_fmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abbdb403cdeef414fa2f867b702d5f6eb',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmaxs_36',['riscv_intrinsic_fmaxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87c1ce499e5e43554cb0f407cf0d3f7f',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmins_37',['riscv_intrinsic_fmins',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abf7f9e466906306d9755fd5bc7946e3c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmsubs_38',['riscv_intrinsic_fmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a03aba9c70c5286dacebaeb0ef5219cc9',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmuls_39',['riscv_intrinsic_fmuls',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87a106e0d24a3183712e438d2bcbfa2d',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffnmadds_40',['riscv_intrinsic_fnmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa6473bc2d2721b57277b83a3ae0cfdb6',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffnmsubs_41',['riscv_intrinsic_fnmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a639fc7bd75933888540e9cceb67221a0',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsgnjns_42',['riscv_intrinsic_fsgnjns',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa4010772a986d03929ba7a43dfdcddd9',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsgnjs_43',['riscv_intrinsic_fsgnjs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aff3acd90bcfbda96945f95a0e0bae12b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsgnjxs_44',['riscv_intrinsic_fsgnjxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2235d91cdac03bf8071003a5c59b9dd0',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsqrts_45',['riscv_intrinsic_fsqrts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a17e2b7a399c956d548a609185084ea3c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsubs_46',['riscv_intrinsic_fsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af8473ba61abab8ae2e3ecbaf22d70e89',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['rte_5fservice_5fhandler_47',['rte_service_handler',['../processor__check_2main_8c.html#a349743a03307abb5130a3e89d903971b',1,'main.c']]] +]; diff --git a/sw/search/functions_b.js b/sw/search/functions_b.js new file mode 100644 index 0000000000..c7ad12bcff --- /dev/null +++ b/sw/search/functions_b.js @@ -0,0 +1,34 @@ +var searchData= +[ + ['save_5fexe_0',['save_exe',['../bootloader_8c.html#ababfffe8e7036179e150ad3b9bda3a74',1,'bootloader.c']]], + ['scan_5fbus_1',['scan_bus',['../demo__onewire_2main_8c.html#ac07c9cfd80ac2e24be9dac6cf943b7de',1,'main.c']]], + ['scan_5ftwi_2',['scan_twi',['../demo__twi_2main_8c.html#aace46ee34e954f9ebee5873beb0785f1',1,'main.c']]], + ['sdi_5fget_3',['sdi_get',['../demo__sdi_2main_8c.html#aa25f620a5631e862252be1d5429e8585',1,'main.c']]], + ['sdi_5fput_4',['sdi_put',['../demo__sdi_2main_8c.html#ae3dc843520a800d7ba2b5d6be03d9c3d',1,'main.c']]], + ['send_5ftwi_5',['send_twi',['../demo__twi_2main_8c.html#aa94edd4f55a3ac18913f661f4bc16fb1',1,'main.c']]], + ['set_5fcell_6',['set_cell',['../game__of__life_2main_8c.html#a5315eb56128f1ca40d9f4d477c345dd7',1,'main.c']]], + ['set_5fclock_7',['set_clock',['../demo__twi_2main_8c.html#acee0c1770467f85a150d072ac7e1252f',1,'main.c']]], + ['setup_5faccess_8',['setup_access',['../bus__explorer_2main_8c.html#a2b6196c2e97a7f7702c0068780304ec1',1,'main.c']]], + ['show_5f1wire_5fcommands_9',['show_1wire_commands',['../demo__onewire_2main_8c.html#a29d5831498c2eaf0415d6f01efb9e7ce',1,'main.c']]], + ['show_5farrays_10',['show_arrays',['../demo__dma_2main_8c.html#a8ad0c7bfd07edb6d42d86b166347206b',1,'main.c']]], + ['show_5fhelp_11',['show_help',['../demo__onewire_2main_8c.html#af25820ed386a66a0d6bb4dcdd2204704',1,'main.c']]], + ['sim_5firq_5ftrigger_12',['sim_irq_trigger',['../processor__check_2main_8c.html#ada24f2cd9d2d384265517f539711de62',1,'main.c']]], + ['slink_5ffirq_5fhandler_13',['slink_firq_handler',['../demo__slink_2main_8c.html#a48c79e20ed1d4138d61b5593bdbe537a',1,'main.c']]], + ['spi_5fcs_14',['spi_cs',['../demo__spi_2main_8c.html#a6f94991b8943a141ed4124585222470d',1,'main.c']]], + ['spi_5fflash_5fcheck_15',['spi_flash_check',['../bootloader_8c.html#a1919595ed2232aebb3e774b916ab1662',1,'bootloader.c']]], + ['spi_5fflash_5ferase_5fsector_16',['spi_flash_erase_sector',['../bootloader_8c.html#a0d877f0611dfcee32a483c8a3660eb1b',1,'bootloader.c']]], + ['spi_5fflash_5fread_5fbyte_17',['spi_flash_read_byte',['../bootloader_8c.html#a09e72e2debdd94929b2be4c7713d5e17',1,'bootloader.c']]], + ['spi_5fflash_5fread_5fstatus_18',['spi_flash_read_status',['../bootloader_8c.html#a005966cd0b32f3d5c041028c4b1c99f5',1,'bootloader.c']]], + ['spi_5fflash_5fwakeup_19',['spi_flash_wakeup',['../bootloader_8c.html#a1fbdccc60f05756213c9f3d64bac6d47',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5faddr_20',['spi_flash_write_addr',['../bootloader_8c.html#a6a8caddda6e729d747726471b0b0f742',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fbyte_21',['spi_flash_write_byte',['../bootloader_8c.html#a006c27b7d80897b78ab8cd83a391331f',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fdisable_22',['spi_flash_write_disable',['../bootloader_8c.html#a82d26a2d6293ed7fd44a5c622adfbd45',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fenable_23',['spi_flash_write_enable',['../bootloader_8c.html#a9642e28ef2baec5b356ad9a70970d0e6',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fword_24',['spi_flash_write_word',['../bootloader_8c.html#a717c72166af7c2ff7e73bd0b47128338',1,'bootloader.c']]], + ['spi_5firq_5fhandler_25',['spi_irq_handler',['../demo__spi__irq_2main_8c.html#a7e266cc5247c999948dacc2102bd184a',1,'main.c']]], + ['spi_5fsetup_26',['spi_setup',['../demo__spi_2main_8c.html#a755192be6c3cf9904564b0eee99de445',1,'main.c']]], + ['spi_5ftrans_27',['spi_trans',['../demo__spi_2main_8c.html#a13e10b34fbbffca6c31f0ce25b3f8432',1,'main.c']]], + ['start_5fapp_28',['start_app',['../bootloader_8c.html#ae8de91537ac2782f0f0ebc3b2d4fb1df',1,'bootloader.c']]], + ['subnormal_5fflush_29',['subnormal_flush',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a791f880781a1bcea1861471be7d1a851',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['system_5ferror_30',['system_error',['../bootloader_8c.html#a3bdfe2f25b1bfb42f80624ffff22ab01',1,'bootloader.c']]] +]; diff --git a/sw/search/functions_c.js b/sw/search/functions_c.js new file mode 100644 index 0000000000..0ebfaceba5 --- /dev/null +++ b/sw/search/functions_c.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['test_5ffail_0',['test_fail',['../processor__check_2main_8c.html#a1e0a5d63896fa26a6c25c0012fc6b938',1,'main.c']]], + ['test_5fok_1',['test_ok',['../processor__check_2main_8c.html#ae61d39109b2747429ec3a3c1b5533598',1,'main.c']]], + ['trap_5fhandler_5femulate_5famo_2',['trap_handler_emulate_amo',['../atomic__test_2main_8c.html#aafcbf639ae4f66e5dfe9dea511a59f9d',1,'main.c']]], + ['trap_5fhandler_5femulate_5funaligned_5flw_3',['trap_handler_emulate_unaligned_lw',['../demo__emulate__unaligned_2main_8c.html#a07da42351229525998965b219e827460',1,'main.c']]], + ['trigger_5fmodule_5fdummy_4',['trigger_module_dummy',['../processor__check_2main_8c.html#ac91bfdd45696444673dc7d6b1b644082',1,'main.c']]] +]; diff --git a/sw/search/functions_d.js b/sw/search/functions_d.js new file mode 100644 index 0000000000..2488556a56 --- /dev/null +++ b/sw/search/functions_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['uart_5fget_5fexecutable_0',['uart_get_executable',['../demo__xip_2main_8c.html#a0458656f8a108ff31f4bbbd005f029a0',1,'main.c']]], + ['uart_5fget_5fword_1',['uart_get_word',['../demo__xip_2main_8c.html#a3043d09bdc155f57f45cd91e0cd4d15b',1,'main.c']]] +]; diff --git a/sw/search/functions_e.js b/sw/search/functions_e.js new file mode 100644 index 0000000000..7348ca9c65 --- /dev/null +++ b/sw/search/functions_e.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['vectored_5fglobal_5fhandler_0',['vectored_global_handler',['../processor__check_2main_8c.html#a9504ca74fdb80711a88d2a16d4cb4cf4',1,'main.c']]], + ['vectored_5firq_5ftable_1',['vectored_irq_table',['../processor__check_2main_8c.html#a0d695ebfaae3b4614ddb62640cbf8b7b',1,'main.c']]], + ['vectored_5fmei_5fhandler_2',['vectored_mei_handler',['../processor__check_2main_8c.html#a1a455bede4ab48f32d3ed0868e398044',1,'main.c']]], + ['verify_5fresult_3',['verify_result',['../float__corner__test_2main_8c.html#a941ef8d24fd8e8fe4536626b2ce72410',1,'verify_result(uint32_t num, uint32_t opa, uint32_t opb, uint32_t ref, uint32_t res):&#160;main.c'],['../floating__point__test_2main_8c.html#a941ef8d24fd8e8fe4536626b2ce72410',1,'verify_result(uint32_t num, uint32_t opa, uint32_t opb, uint32_t ref, uint32_t res):&#160;main.c']]] +]; diff --git a/sw/search/functions_f.js b/sw/search/functions_f.js new file mode 100644 index 0000000000..5a8501980a --- /dev/null +++ b/sw/search/functions_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['write_5fbyte_0',['write_byte',['../demo__onewire_2main_8c.html#a28283848f09bf8feebc860a51545f487',1,'main.c']]], + ['write_5fmemory_1',['write_memory',['../bus__explorer_2main_8c.html#a96729fb5279642ac56c8e6a513789b45',1,'main.c']]] +]; diff --git a/sw/search/mag.svg b/sw/search/mag.svg new file mode 100644 index 0000000000..ffb6cf0d02 --- /dev/null +++ b/sw/search/mag.svg @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + viewBox="0 0 20 19" + height="19" + width="20" + id="svg2" + version="1.1"> + <defs + id="defs6" /> + <circle + r="3.5" + cy="8.5" + cx="5.5" + id="path4611" + style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path4630" + d="m 8.1085854,11.109059 2.7823556,2.782356" + style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> +</svg> diff --git a/sw/search/mag_d.svg b/sw/search/mag_d.svg new file mode 100644 index 0000000000..4122773f92 --- /dev/null +++ b/sw/search/mag_d.svg @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + viewBox="0 0 20 19" + height="19" + width="20" + id="svg2" + version="1.1"> + <defs + id="defs6" /> + <circle + r="3.5" + cy="8.5" + cx="5.5" + id="path4611" + style="fill:#000000;fill-opacity:0;stroke:#C5C5C5;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path4630" + d="m 8.1085854,11.109059 2.7823556,2.782356" + style="fill:none;stroke:#C5C5C5;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> +</svg> diff --git a/sw/search/mag_sel.svg b/sw/search/mag_sel.svg new file mode 100644 index 0000000000..553dba8773 --- /dev/null +++ b/sw/search/mag_sel.svg @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg + xmlns="http://www.w3.org/2000/svg" + version="1.1" + id="svg2" + width="20" + height="19" + viewBox="0 0 20 19" + > + <defs + id="defs6" /> + <circle + style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" + id="path4611" + cx="5.5" + cy="8.5" + r="3.5" /> + <path + style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 11,7 13.5,10 16,7 Z" + id="path4609" + /> + <path + style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8.1085854,11.109059 2.7823556,2.782356" + id="path4630" + /> +</svg> diff --git a/sw/search/mag_seld.svg b/sw/search/mag_seld.svg new file mode 100644 index 0000000000..c906f84c83 --- /dev/null +++ b/sw/search/mag_seld.svg @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg + xmlns="http://www.w3.org/2000/svg" + version="1.1" + id="svg2" + width="20" + height="19" + viewBox="0 0 20 19" + > + <defs + id="defs6" /> + <circle + style="fill:#000000;fill-opacity:0;stroke:#c5C5C5;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" + id="path4611" + cx="5.5" + cy="8.5" + r="3.5" /> + <path + style="fill:#c5C5C5;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 11,7 13.5,10 16,7 Z" + id="path4609" + /> + <path + style="fill:none;stroke:#c5C5C5;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8.1085854,11.109059 2.7823556,2.782356" + id="path4630" + /> +</svg> diff --git a/sw/search/pages_0.js b/sw/search/pages_0.js new file mode 100644 index 0000000000..de89bd8806 --- /dev/null +++ b/sw/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['readme_0',['README',['../md_README.html',1,'']]] +]; diff --git a/sw/search/search.css b/sw/search/search.css new file mode 100644 index 0000000000..19f76f9d5b --- /dev/null +++ b/sw/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This <li> object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/sw/search/search.js b/sw/search/search.js new file mode 100644 index 0000000000..666af01e5e --- /dev/null +++ b/sw/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i<win.childNodes.length;i++) { + const child = win.childNodes[i]; // get span within a + if (child.className=='SelectItem') { + child.focus(); + return; + } + } + return; + } else { + const elem = searchResults.NavNext(0); + if (elem) elem.focus(); + } + } else if (e.keyCode==27) { // Escape out of the search field + e.stopPropagation(); + this.DOMSearchField().blur(); + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.lastSearchValue = ''; + this.Activate(false); + return; + } + + // strip whitespaces + const searchValue = this.DOMSearchField().value.replace(/ +/g, ""); + + if (searchValue != this.lastSearchValue) { // search value has changed + if (searchValue != "") { // non-empty search + // set timer for search update + this.keyTimeout = setTimeout(this.Search.bind(this), this.keyTimeoutLength); + } else { // empty search field + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.lastSearchValue = ''; + } + } + } + + this.SelectItemCount = function() { + let count=0; + const win=this.DOMSearchSelectWindow(); + for (let i=0;i<win.childNodes.length;i++) { + const child = win.childNodes[i]; // get span within a + if (child.className=='SelectItem') { + count++; + } + } + return count; + } + + this.GetSelectionIdByName = function(name) { + let j=0; + const win=this.DOMSearchSelectWindow(); + for (let i=0;i<win.childNodes.length;i++) { + const child = win.childNodes[i]; + if (child.className=='SelectItem') { + if (child.childNodes[1].nodeValue==name) { + return j; + } + j++; + } + } + return 0; + } + + this.SelectItemSet = function(id) { + let j=0; + const win=this.DOMSearchSelectWindow(); + for (let i=0;i<win.childNodes.length;i++) { + const child = win.childNodes[i]; // get span within a + if (child.className=='SelectItem') { + const node = child.firstChild; + if (j==id) { + node.innerHTML='&#8226;'; + Cookie.writeSetting(SEARCH_COOKIE_NAME, child.childNodes[1].nodeValue, 0) + } else { + node.innerHTML='&#160;'; + } + j++; + } + } + } + + // Called when an search filter selection is made. + // set item with index id as the active item + this.OnSelectItem = function(id) { + this.searchIndex = id; + this.SelectItemSet(id); + const searchValue = this.DOMSearchField().value.replace(/ +/g, ""); + if (searchValue!="" && this.searchActive) { // something was found -> do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) { // Down + this.searchIndex++; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==38 && this.searchIndex>0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i<search.length;i++) { + const c = search.charAt(i); + const cn = c.charCodeAt(0); + if (c.match(/[a-z0-9\u0080-\uFFFF]/)) { + result+=c; + } else if (cn<16) { + result+="_0"+cn.toString(16); + } else { + result+="_"+cn.toString(16); + } + } + return result; + } + + // The number of matches from the last run of <Search()>. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c<elem[1].length-1; c++) { + const srChild = document.createElement('a'); + srChild.setAttribute('id','Item'+index+'_c'+c); + setKeyActions(srChild,'return searchResults.NavChild(event,'+index+','+c+')'); + setClassAttr(srChild,'SRScope'); + srChild.setAttribute('href',resultsPath+elem[1][c+1][0]); + srChild.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][c+1][1]) { + srChild.setAttribute('target','_parent'); + } else { + srChild.setAttribute('target','_blank'); + } + srChild.innerHTML = elem[1][c+1][2]; + srChildren.appendChild(srChild); + } + srEntry.appendChild(srChildren); + } + srResult.appendChild(srEntry); + results.appendChild(srResult); + }); +} + +function init_search() { + const results = document.getElementById("MSearchSelectWindow"); + + results.tabIndex=0; + for (let key in indexSectionLabels) { + const link = document.createElement('a'); + link.setAttribute('class','SelectItem'); + link.setAttribute('onclick','searchBox.OnSelectItem('+key+')'); + link.href='javascript:void(0)'; + link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key]; + results.appendChild(link); + } + + const input = document.getElementById("MSearchSelect"); + const searchSelectWindow = document.getElementById("MSearchSelectWindow"); + input.tabIndex=0; + input.addEventListener("keydown", function(event) { + if (event.keyCode==13 || event.keyCode==40) { + event.preventDefault(); + if (searchSelectWindow.style.display == 'block') { + searchBox.CloseSelectionWindow(); + } else { + searchBox.OnSearchSelectShow(); + searchBox.DOMSearchSelectWindow().focus(); + } + } + }); + const name = Cookie.readSetting(SEARCH_COOKIE_NAME,0); + const id = searchBox.GetSelectionIdByName(name); + searchBox.OnSelectItem(id); +} +/* @license-end */ diff --git a/sw/search/searchdata.js b/sw/search/searchdata.js new file mode 100644 index 0000000000..e20ba0a529 --- /dev/null +++ b/sw/search/searchdata.js @@ -0,0 +1,39 @@ +var indexSectionsWithContent = +{ + 0: "12345:_abcdefghiklmnoprstuvwxy", + 1: "dfnrst", + 2: "bmn", + 3: "_abcdghmnprstuvwx", + 4: "_abcdefghikmoprstuwxy", + 5: "censx", + 6: "cdefghnoprstuwx", + 7: "abcdefgimnoprstuwx", + 8: "r" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "files", + 3: "functions", + 4: "variables", + 5: "enums", + 6: "enumvalues", + 7: "defines", + 8: "pages" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Data Structures", + 2: "Files", + 3: "Functions", + 4: "Variables", + 5: "Enumerations", + 6: "Enumerator", + 7: "Macros", + 8: "Pages" +}; + diff --git a/sw/search/variables_0.js b/sw/search/variables_0.js new file mode 100644 index 0000000000..9a56054474 --- /dev/null +++ b/sw/search/variables_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['_5f_5fcrt0_5fmax_5fheap_0',['__crt0_max_heap',['../neorv32_8h.html#aaa2cb9e7075a852870fd67eff2861b18',1,'neorv32.h']]], + ['_5f_5fheap_5fend_1',['__heap_end',['../neorv32_8h.html#ae6ef7c715931df8bdc331577da14119b',1,'neorv32.h']]], + ['_5f_5fheap_5fstart_2',['__heap_start',['../neorv32_8h.html#a0eaa3dcfb1db0c72534046feb9fa9b60',1,'neorv32.h']]], + ['_5f_5fneorv32_5frte_5fvector_5flut_3',['__neorv32_rte_vector_lut',['../neorv32__rte_8c.html#a2c8272b4628edddb943bcfad829b561a',1,'neorv32_rte.c']]] +]; diff --git a/sw/search/variables_1.js b/sw/search/variables_1.js new file mode 100644 index 0000000000..35e5501d58 --- /dev/null +++ b/sw/search/variables_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['amo_5fvar_0',['amo_var',['../atomic__test_2main_8c.html#a9141e95a5f98420ddf8a43e6d20ff6dc',1,'main.c']]] +]; diff --git a/sw/search/variables_10.js b/sw/search/variables_10.js new file mode 100644 index 0000000000..1267597e39 --- /dev/null +++ b/sw/search/variables_10.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['thres_0',['THRES',['../structneorv32__gptmr__t.html#a666ebcbea13dafcf1987629f3e0092ee',1,'neorv32_gptmr_t']]], + ['time_5fdec_5fhw_1',['time_dec_hw',['../demo__cfu_2main_8c.html#acb6dd9d6ab74ac94f174a11ff3ad76af',1,'main.c']]], + ['time_5fdec_5fsw_2',['time_dec_sw',['../demo__cfu_2main_8c.html#a2d3853c367c3bce99e787c0df445030a',1,'main.c']]], + ['time_5fenc_5fhw_3',['time_enc_hw',['../demo__cfu_2main_8c.html#a094212e3731a9aecbd278fac243de6ec',1,'main.c']]], + ['time_5fenc_5fsw_4',['time_enc_sw',['../demo__cfu_2main_8c.html#ad424a26173bd8d84b8d1cae94a55f248',1,'main.c']]], + ['tpol_5',['TPOL',['../structneorv32__xirq__t.html#a5fe0036a2cada585228b60aaa780e92a',1,'neorv32_xirq_t']]], + ['ttyp_6',['TTYP',['../structneorv32__xirq__t.html#ab7117c210b5f0a8ebc369eeba6a4a5bc',1,'neorv32_xirq_t']]], + ['ttype_7',['TTYPE',['../structneorv32__dma__t.html#a70c28642195765409d97b941e98f47ca',1,'neorv32_dma_t']]] +]; diff --git a/sw/search/variables_11.js b/sw/search/variables_11.js new file mode 100644 index 0000000000..14be767282 --- /dev/null +++ b/sw/search/variables_11.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['uint16fifo_0',['uint16Fifo',['../structt__neorv32__spi.html#a71fb3f91af197e1abdbe97d62130ad0f',1,'t_neorv32_spi']]], + ['uint32read_1',['uint32Read',['../structt__neorv32__spi.html#a5750a54f8312ec2fed349eb9fbeff323',1,'t_neorv32_spi']]], + ['uint32total_2',['uint32Total',['../structt__neorv32__spi.html#aa4d96f72e57fb6930ab43de6fb0a85ae',1,'t_neorv32_spi']]], + ['uint32write_3',['uint32Write',['../structt__neorv32__spi.html#aa89b7a769e54e331798e4d68d02a7b43',1,'t_neorv32_spi']]], + ['uint8csn_4',['uint8Csn',['../structt__neorv32__spi.html#a435c266758a440d32de4344472e3514a',1,'t_neorv32_spi']]], + ['uint8isbusy_5',['uint8IsBusy',['../structt__neorv32__spi.html#a8ed31f9393bee5b963e08582b6c517ed',1,'t_neorv32_spi']]], + ['universe_6',['universe',['../game__of__life_2main_8c.html#ae0b5214cf0cd93049e9df8a95a09d826',1,'main.c']]] +]; diff --git a/sw/search/variables_12.js b/sw/search/variables_12.js new file mode 100644 index 0000000000..d211425b5a --- /dev/null +++ b/sw/search/variables_12.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['weekday_0',['weekday',['../structdate__t.html#a44167cd71416886e55048310af6d4e1b',1,'date_t']]] +]; diff --git a/sw/search/variables_13.js b/sw/search/variables_13.js new file mode 100644 index 0000000000..fa66a55138 --- /dev/null +++ b/sw/search/variables_13.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['xtea_5fdelta_0',['xtea_delta',['../demo__cfu_2main_8c.html#a26da64691624f3c899f2394a427d6593',1,'main.c']]] +]; diff --git a/sw/search/variables_14.js b/sw/search/variables_14.js new file mode 100644 index 0000000000..e613d54073 --- /dev/null +++ b/sw/search/variables_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['year_0',['year',['../structdate__t.html#aabab1b1efd94b69bfb28b639c612dd4f',1,'date_t']]] +]; diff --git a/sw/search/variables_2.js b/sw/search/variables_2.js new file mode 100644 index 0000000000..cf22cf2ffa --- /dev/null +++ b/sw/search/variables_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['binary_5fvalue_0',['binary_value',['../unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606',1,'float_conv_t']]] +]; diff --git a/sw/search/variables_3.js b/sw/search/variables_3.js new file mode 100644 index 0000000000..5968b00952 --- /dev/null +++ b/sw/search/variables_3.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['cache_0',['CACHE',['../structneorv32__sysinfo__t.html#ada99a36ccda38b254d5b6a84883101f6',1,'neorv32_sysinfo_t']]], + ['channel_5fcfg_1',['CHANNEL_CFG',['../structneorv32__pwm__t.html#a5df0cf6c7c250365db3ada8db7cc19e9',1,'neorv32_pwm_t']]], + ['clk_2',['CLK',['../structneorv32__sysinfo__t.html#a3f8ce96050fc0a680afa9b7fdf7cb35c',1,'neorv32_sysinfo_t']]], + ['count_3',['COUNT',['../structneorv32__gptmr__t.html#a1abc5bae1dffc64006e965d4570da479',1,'neorv32_gptmr_t']]], + ['ctrl_4',['CTRL',['../structneorv32__dma__t.html#a8480d6ad3ba5063cdf21dca286711569',1,'neorv32_dma_t::CTRL'],['../structneorv32__gptmr__t.html#a3c477ccb24ed12122d9d90244431c7e9',1,'neorv32_gptmr_t::CTRL'],['../structneorv32__neoled__t.html#adfe7618c002ff88dd22e65fcedfd6139',1,'neorv32_neoled_t::CTRL'],['../structneorv32__onewire__t.html#a310df3bab43e4438417b2ff948f4712a',1,'neorv32_onewire_t::CTRL'],['../structneorv32__sdi__t.html#af494f25cbcd8478cf384eb868e447303',1,'neorv32_sdi_t::CTRL'],['../structneorv32__slink__t.html#a39ece6aeeea6982002e164902a1e784f',1,'neorv32_slink_t::CTRL'],['../structneorv32__spi__t.html#a34fa748f0e3ceb75822c0a5553bd0420',1,'neorv32_spi_t::CTRL'],['../structneorv32__trng__t.html#ae2ff37ce30fb85ef59d9012534bc7e67',1,'neorv32_trng_t::CTRL'],['../structneorv32__twd__t.html#acff774cf759c304daf68d709b41b781a',1,'neorv32_twd_t::CTRL'],['../structneorv32__twi__t.html#a148a1c681a2632881b25ee41652b5304',1,'neorv32_twi_t::CTRL'],['../structneorv32__uart__t.html#a0a6227aeea38335d2b9a9da46b35451b',1,'neorv32_uart_t::CTRL'],['../structneorv32__wdt__t.html#a6ae41e28d08b0f06118c499f52b56f41',1,'neorv32_wdt_t::CTRL'],['../structneorv32__xip__t.html#a7ead9d6a4f784d766a6b2755c6d35235',1,'neorv32_xip_t::CTRL']]], + ['cypher_5fdata_5fhw_5',['cypher_data_hw',['../demo__cfu_2main_8c.html#a9ad2780a4cfe0d9cb4f1a846a92063ae',1,'main.c']]], + ['cypher_5fdata_5fsw_6',['cypher_data_sw',['../demo__cfu_2main_8c.html#a33b2d9298edf94c5961e67a59c371d00',1,'main.c']]] +]; diff --git a/sw/search/variables_4.js b/sw/search/variables_4.js new file mode 100644 index 0000000000..528d564980 --- /dev/null +++ b/sw/search/variables_4.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['data_0',['DATA',['../structneorv32__crc__t.html#a47f286612848f597859aaef0d2d5da4d',1,'neorv32_crc_t::DATA'],['../structneorv32__neoled__t.html#a995fb1d63a9dfb3f20d715932781c1de',1,'neorv32_neoled_t::DATA'],['../structneorv32__sdi__t.html#a3ea6903c0924d0a1b633b6a2b0ae44f1',1,'neorv32_sdi_t::DATA'],['../structneorv32__slink__t.html#a8af7d4ea9787cf94c599c82133c6aa74',1,'neorv32_slink_t::DATA'],['../structneorv32__spi__t.html#a3901bad351213e34820197a33d589f1e',1,'neorv32_spi_t::DATA'],['../structneorv32__trng__t.html#acf3f269a8097b731cd82e0d6660e16b5',1,'neorv32_trng_t::DATA'],['../structneorv32__twd__t.html#a0ce59594f8c1aa8cffc78a384c6f6257',1,'neorv32_twd_t::DATA'],['../structneorv32__uart__t.html#a38eec82aae9ed522a0d2afb9a9560036',1,'neorv32_uart_t::DATA']]], + ['data_5fblock_1',['data_block',['../demo__emulate__unaligned_2main_8c.html#a556f675911f865ead06c36072b1b9c3b',1,'main.c']]], + ['data_5fhi_2',['DATA_HI',['../structneorv32__xip__t.html#a516ab9c075ef6d1fb741e243db7703b2',1,'neorv32_xip_t']]], + ['data_5flast_3',['DATA_LAST',['../structneorv32__slink__t.html#ada8f10141d2161b83a5a367722ed6a77',1,'neorv32_slink_t']]], + ['data_5flo_4',['DATA_LO',['../structneorv32__xip__t.html#ad64048bb3544e712b1c668c2ef343ccb',1,'neorv32_xip_t']]], + ['day_5',['day',['../structdate__t.html#a482ad87226bae7841dfec63e035aeace',1,'date_t']]], + ['dcmd_6',['DCMD',['../structneorv32__onewire__t.html#ab8f4e61ac777c55cd1e5805eb03d3d4b',1,'neorv32_onewire_t::DCMD'],['../structneorv32__twi__t.html#ae311e0827bdb178c6dd8c4535b80d5cb',1,'neorv32_twi_t::DCMD']]], + ['dst_5fbase_7',['DST_BASE',['../structneorv32__dma__t.html#aee8a6cf3cbd9fe3c5995f046ffb9a1c0',1,'neorv32_dma_t']]] +]; diff --git a/sw/search/variables_5.js b/sw/search/variables_5.js new file mode 100644 index 0000000000..7ce7676b0a --- /dev/null +++ b/sw/search/variables_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['eie_0',['EIE',['../structneorv32__xirq__t.html#aef3c2b491207abd68bf6392f97096a74',1,'neorv32_xirq_t']]], + ['error_5fmessage_1',['error_message',['../bootloader_8c.html#a6fea855ffe2fa0cd5ea9f98c0d5adc4d',1,'bootloader.c']]], + ['esc_2',['ESC',['../structneorv32__xirq__t.html#ae4f7f3f41210ff329b6f82d5dfada88a',1,'neorv32_xirq_t']]], + ['exe_5favailable_3',['exe_available',['../bootloader_8c.html#a0f9fcfdf758260b9b79b6eda063dd87a',1,'bootloader.c']]] +]; diff --git a/sw/search/variables_6.js b/sw/search/variables_6.js new file mode 100644 index 0000000000..2d679bafaf --- /dev/null +++ b/sw/search/variables_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['float_5fvalue_0',['float_value',['../unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788',1,'float_conv_t']]] +]; diff --git a/sw/search/variables_7.js b/sw/search/variables_7.js new file mode 100644 index 0000000000..e155197cf7 --- /dev/null +++ b/sw/search/variables_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['getting_5fexe_0',['getting_exe',['../bootloader_8c.html#a5fa6b109bf211d1768f84c9d38eef240',1,'bootloader.c']]] +]; diff --git a/sw/search/variables_8.js b/sw/search/variables_8.js new file mode 100644 index 0000000000..b429ea957f --- /dev/null +++ b/sw/search/variables_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hours_0',['hours',['../structdate__t.html#a39a23695634a2814d827984f4eea54eb',1,'date_t']]] +]; diff --git a/sw/search/variables_9.js b/sw/search/variables_9.js new file mode 100644 index 0000000000..accfbc0675 --- /dev/null +++ b/sw/search/variables_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['input_0',['INPUT',['../structneorv32__gpio__t.html#a208ee622d43fee3574072f19a98c8808',1,'neorv32_gpio_t']]], + ['input_5fdata_1',['input_data',['../demo__cfu_2main_8c.html#a2e2ccb9136736a673dbef71f207e97a0',1,'main.c']]] +]; diff --git a/sw/search/variables_a.js b/sw/search/variables_a.js new file mode 100644 index 0000000000..d846b41912 --- /dev/null +++ b/sw/search/variables_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['key_0',['key',['../demo__cfu_2main_8c.html#ab5c498f9da12ab2d6ddc89bf4a46dec6',1,'main.c']]] +]; diff --git a/sw/search/variables_b.js b/sw/search/variables_b.js new file mode 100644 index 0000000000..e5337cd385 --- /dev/null +++ b/sw/search/variables_b.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['mem_0',['MEM',['../structneorv32__sysinfo__t.html#a51eee92b1824c1b19eb0a83a0a9c7d4c',1,'neorv32_sysinfo_t']]], + ['minutes_1',['minutes',['../structdate__t.html#a2ab79834ebae42979e359bf30ad5f67a',1,'date_t']]], + ['mode_2',['MODE',['../structneorv32__crc__t.html#ad720502701f16e6e952bbcaee980017c',1,'neorv32_crc_t']]], + ['month_3',['month',['../structdate__t.html#a1a97f6a755cd4209a0880cf811d52c7b',1,'date_t']]], + ['mswi_4',['MSWI',['../structneorv32__clint__t.html#a7b49826af73aae2035cd697cb4b2666b',1,'neorv32_clint_t']]], + ['mtime_5',['MTIME',['../structneorv32__clint__t.html#aea25562a01a789da8b6c5ee82c6a9ef0',1,'neorv32_clint_t']]], + ['mtimecmp_6',['MTIMECMP',['../structneorv32__clint__t.html#ac198a6ec62ea154d2533aebdd7b0df36',1,'neorv32_clint_t']]] +]; diff --git a/sw/search/variables_c.js b/sw/search/variables_c.js new file mode 100644 index 0000000000..e2ad7e8df0 --- /dev/null +++ b/sw/search/variables_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['output_0',['OUTPUT',['../structneorv32__gpio__t.html#abaf7de4f79adfc3debcde93fa4a921bb',1,'neorv32_gpio_t']]] +]; diff --git a/sw/search/variables_d.js b/sw/search/variables_d.js new file mode 100644 index 0000000000..da8c8bf963 --- /dev/null +++ b/sw/search/variables_d.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['plain_5fdata_5fhw_0',['plain_data_hw',['../demo__cfu_2main_8c.html#aee8dde13fe2f5ac52dd6075e2fe1eab5',1,'main.c']]], + ['plain_5fdata_5fsw_1',['plain_data_sw',['../demo__cfu_2main_8c.html#a72ba1460776ad684028448ca51810bbe',1,'main.c']]], + ['poly_2',['POLY',['../structneorv32__crc__t.html#a9bbcab843ddba4f9772d07478947a661',1,'neorv32_crc_t']]], + ['ptrspibuf_3',['ptrSpiBuf',['../structt__neorv32__spi.html#a487a6510820871ff8d0da7699463f6d9',1,'t_neorv32_spi']]] +]; diff --git a/sw/search/variables_e.js b/sw/search/variables_e.js new file mode 100644 index 0000000000..2e7c6c979c --- /dev/null +++ b/sw/search/variables_e.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['ram_5fbuffer_0',['ram_buffer',['../demo__xip_2main_8c.html#acc95e55a622d79c2a398397d1f9b8033',1,'main.c']]], + ['reg_1',['REG',['../structneorv32__cfs__t.html#a9bfa2b6f4938f42fb1ee3beaeb8cc32e',1,'neorv32_cfs_t']]], + ['reserved_2',['reserved',['../structneorv32__xip__t.html#aacb77d586c3caec518e8e0024cfe745c',1,'neorv32_xip_t']]], + ['reset_3',['RESET',['../structneorv32__wdt__t.html#a0a273e8ca2bd92547bf7727ec65a9449',1,'neorv32_wdt_t']]], + ['route_4',['ROUTE',['../structneorv32__slink__t.html#a0b2417a1a587da45909ce2a948f90e22',1,'neorv32_slink_t']]] +]; diff --git a/sw/search/variables_f.js b/sw/search/variables_f.js new file mode 100644 index 0000000000..51d476430b --- /dev/null +++ b/sw/search/variables_f.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['seconds_0',['seconds',['../structdate__t.html#a1071948e7754cb415da9714d59a315bf',1,'date_t']]], + ['soc_1',['SOC',['../structneorv32__sysinfo__t.html#ac43abe3b416da3a2895d1d06537a14c3',1,'neorv32_sysinfo_t']]], + ['src_5fbase_2',['SRC_BASE',['../structneorv32__dma__t.html#a3b214d1a373c7f15b374e113d7110b42',1,'neorv32_dma_t']]], + ['sreg_3',['SREG',['../structneorv32__crc__t.html#abf2b419f2aefdb6f2a6b81a02cb8612d',1,'neorv32_crc_t']]] +]; diff --git a/sw/splitbar.png b/sw/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jW<lVxsx`Ym~nPnqw$O~`M84{XS6<Mm0<Zit<Tk``D^RashfFq{wG<# zZG2vRxL<$IhkFMSBd@N1`uRtp)t>rYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|E<fHWtM%;-WUJ&>EGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/sw/splitbard.png b/sw/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..8367416d757fd7b6dc4272b6432dc75a75abd068 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf<Wq_r;B4q1>@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb<d2ww+4sWx@iO~d@7T)Z$L;%F z_Vvfjr-#*_i?>&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? literal 0 HcmV?d00001 diff --git a/sw/structdate__t.html b/sw/structdate__t.html new file mode 100644 index 0000000000..fdf2ed063a --- /dev/null +++ b/sw/structdate__t.html @@ -0,0 +1,228 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: date_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">date_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:aabab1b1efd94b69bfb28b639c612dd4f" id="r_aabab1b1efd94b69bfb28b639c612dd4f"><td class="memItemLeft" align="right" valign="top">uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aabab1b1efd94b69bfb28b639c612dd4f">year</a></td></tr> +<tr class="separator:aabab1b1efd94b69bfb28b639c612dd4f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1a97f6a755cd4209a0880cf811d52c7b" id="r_a1a97f6a755cd4209a0880cf811d52c7b"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1a97f6a755cd4209a0880cf811d52c7b">month</a></td></tr> +<tr class="separator:a1a97f6a755cd4209a0880cf811d52c7b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a482ad87226bae7841dfec63e035aeace" id="r_a482ad87226bae7841dfec63e035aeace"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a482ad87226bae7841dfec63e035aeace">day</a></td></tr> +<tr class="separator:a482ad87226bae7841dfec63e035aeace"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a44167cd71416886e55048310af6d4e1b" id="r_a44167cd71416886e55048310af6d4e1b"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a44167cd71416886e55048310af6d4e1b">weekday</a></td></tr> +<tr class="separator:a44167cd71416886e55048310af6d4e1b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a39a23695634a2814d827984f4eea54eb" id="r_a39a23695634a2814d827984f4eea54eb"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a39a23695634a2814d827984f4eea54eb">hours</a></td></tr> +<tr class="separator:a39a23695634a2814d827984f4eea54eb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2ab79834ebae42979e359bf30ad5f67a" id="r_a2ab79834ebae42979e359bf30ad5f67a"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2ab79834ebae42979e359bf30ad5f67a">minutes</a></td></tr> +<tr class="separator:a2ab79834ebae42979e359bf30ad5f67a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1071948e7754cb415da9714d59a315bf" id="r_a1071948e7754cb415da9714d59a315bf"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1071948e7754cb415da9714d59a315bf">seconds</a></td></tr> +<tr class="separator:a1071948e7754cb415da9714d59a315bf"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<h2 class="groupheader">Field Documentation</h2> +<a id="a482ad87226bae7841dfec63e035aeace" name="a482ad87226bae7841dfec63e035aeace"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a482ad87226bae7841dfec63e035aeace">&#9670;&#160;</a></span>day</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t date_t::day</td> + </tr> + </table> +</div><div class="memdoc"> +<p>1..31 </p> + +</div> +</div> +<a id="a39a23695634a2814d827984f4eea54eb" name="a39a23695634a2814d827984f4eea54eb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a39a23695634a2814d827984f4eea54eb">&#9670;&#160;</a></span>hours</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t date_t::hours</td> + </tr> + </table> +</div><div class="memdoc"> +<p>0..23 </p> + +</div> +</div> +<a id="a2ab79834ebae42979e359bf30ad5f67a" name="a2ab79834ebae42979e359bf30ad5f67a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a2ab79834ebae42979e359bf30ad5f67a">&#9670;&#160;</a></span>minutes</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t date_t::minutes</td> + </tr> + </table> +</div><div class="memdoc"> +<p>0..59 </p> + +</div> +</div> +<a id="a1a97f6a755cd4209a0880cf811d52c7b" name="a1a97f6a755cd4209a0880cf811d52c7b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1a97f6a755cd4209a0880cf811d52c7b">&#9670;&#160;</a></span>month</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t date_t::month</td> + </tr> + </table> +</div><div class="memdoc"> +<p>1..12 </p> + +</div> +</div> +<a id="a1071948e7754cb415da9714d59a315bf" name="a1071948e7754cb415da9714d59a315bf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1071948e7754cb415da9714d59a315bf">&#9670;&#160;</a></span>seconds</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t date_t::seconds</td> + </tr> + </table> +</div><div class="memdoc"> +<p>0..59 </p> + +</div> +</div> +<a id="a44167cd71416886e55048310af6d4e1b" name="a44167cd71416886e55048310af6d4e1b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a44167cd71416886e55048310af6d4e1b">&#9670;&#160;</a></span>weekday</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t date_t::weekday</td> + </tr> + </table> +</div><div class="memdoc"> +<p>1..7 starting with Monday </p> + +</div> +</div> +<a id="aabab1b1efd94b69bfb28b639c612dd4f" name="aabab1b1efd94b69bfb28b639c612dd4f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aabab1b1efd94b69bfb28b639c612dd4f">&#9670;&#160;</a></span>year</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint16_t date_t::year</td> + </tr> + </table> +</div><div class="memdoc"> +<p>current year (absolute) </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__aux_8h_source.html">neorv32_aux.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__cfs__t.html b/sw/structneorv32__cfs__t.html new file mode 100644 index 0000000000..62eb943ffe --- /dev/null +++ b/sw/structneorv32__cfs__t.html @@ -0,0 +1,130 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_cfs_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_cfs_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__cfs_8h_source.html">neorv32_cfs.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a9bfa2b6f4938f42fb1ee3beaeb8cc32e" id="r_a9bfa2b6f4938f42fb1ee3beaeb8cc32e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9bfa2b6f4938f42fb1ee3beaeb8cc32e">REG</a> [(64 *1024)/4]</td></tr> +<tr class="separator:a9bfa2b6f4938f42fb1ee3beaeb8cc32e"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>CFS module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a9bfa2b6f4938f42fb1ee3beaeb8cc32e" name="a9bfa2b6f4938f42fb1ee3beaeb8cc32e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9bfa2b6f4938f42fb1ee3beaeb8cc32e">&#9670;&#160;</a></span>REG</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_cfs_t::REG[(64 *1024)/4]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>CFS registers, user-defined </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__cfs_8h_source.html">neorv32_cfs.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__clint__t.html b/sw/structneorv32__clint__t.html new file mode 100644 index 0000000000..4645306055 --- /dev/null +++ b/sw/structneorv32__clint__t.html @@ -0,0 +1,164 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_clint_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_clint_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__clint_8h_source.html">neorv32_clint.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a7b49826af73aae2035cd697cb4b2666b" id="r_a7b49826af73aae2035cd697cb4b2666b"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7b49826af73aae2035cd697cb4b2666b">MSWI</a> [4096]</td></tr> +<tr class="separator:a7b49826af73aae2035cd697cb4b2666b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac198a6ec62ea154d2533aebdd7b0df36" id="r_ac198a6ec62ea154d2533aebdd7b0df36"><td class="memItemLeft" align="right" valign="top"><a class="el" href="unionsubwords64__t.html">subwords64_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac198a6ec62ea154d2533aebdd7b0df36">MTIMECMP</a> [4095]</td></tr> +<tr class="separator:ac198a6ec62ea154d2533aebdd7b0df36"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aea25562a01a789da8b6c5ee82c6a9ef0" id="r_aea25562a01a789da8b6c5ee82c6a9ef0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="unionsubwords64__t.html">subwords64_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aea25562a01a789da8b6c5ee82c6a9ef0">MTIME</a></td></tr> +<tr class="separator:aea25562a01a789da8b6c5ee82c6a9ef0"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>CLINT module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a7b49826af73aae2035cd697cb4b2666b" name="a7b49826af73aae2035cd697cb4b2666b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7b49826af73aae2035cd697cb4b2666b">&#9670;&#160;</a></span>MSWI</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_clint_t::MSWI[4096]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>machine software interrupt for hart 0..4095 </p> + +</div> +</div> +<a id="aea25562a01a789da8b6c5ee82c6a9ef0" name="aea25562a01a789da8b6c5ee82c6a9ef0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aea25562a01a789da8b6c5ee82c6a9ef0">&#9670;&#160;</a></span>MTIME</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="unionsubwords64__t.html">subwords64_t</a> neorv32_clint_t::MTIME</td> + </tr> + </table> +</div><div class="memdoc"> +<p>global machine timer; 64-bit </p> + +</div> +</div> +<a id="ac198a6ec62ea154d2533aebdd7b0df36" name="ac198a6ec62ea154d2533aebdd7b0df36"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac198a6ec62ea154d2533aebdd7b0df36">&#9670;&#160;</a></span>MTIMECMP</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="unionsubwords64__t.html">subwords64_t</a> neorv32_clint_t::MTIMECMP[4095]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>machine timer compare interrupt for hart 0..4094; 64-bit </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__clint_8h_source.html">neorv32_clint.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__crc__t.html b/sw/structneorv32__crc__t.html new file mode 100644 index 0000000000..e4e0962787 --- /dev/null +++ b/sw/structneorv32__crc__t.html @@ -0,0 +1,181 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_crc_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_crc_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__crc_8h_source.html">neorv32_crc.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:ad720502701f16e6e952bbcaee980017c" id="r_ad720502701f16e6e952bbcaee980017c"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad720502701f16e6e952bbcaee980017c">MODE</a></td></tr> +<tr class="separator:ad720502701f16e6e952bbcaee980017c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9bbcab843ddba4f9772d07478947a661" id="r_a9bbcab843ddba4f9772d07478947a661"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9bbcab843ddba4f9772d07478947a661">POLY</a></td></tr> +<tr class="separator:a9bbcab843ddba4f9772d07478947a661"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a47f286612848f597859aaef0d2d5da4d" id="r_a47f286612848f597859aaef0d2d5da4d"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a47f286612848f597859aaef0d2d5da4d">DATA</a></td></tr> +<tr class="separator:a47f286612848f597859aaef0d2d5da4d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abf2b419f2aefdb6f2a6b81a02cb8612d" id="r_abf2b419f2aefdb6f2a6b81a02cb8612d"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abf2b419f2aefdb6f2a6b81a02cb8612d">SREG</a></td></tr> +<tr class="separator:abf2b419f2aefdb6f2a6b81a02cb8612d"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>CRC module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a47f286612848f597859aaef0d2d5da4d" name="a47f286612848f597859aaef0d2d5da4d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a47f286612848f597859aaef0d2d5da4d">&#9670;&#160;</a></span>DATA</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_crc_t::DATA</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 8: data input register </p> + +</div> +</div> +<a id="ad720502701f16e6e952bbcaee980017c" name="ad720502701f16e6e952bbcaee980017c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad720502701f16e6e952bbcaee980017c">&#9670;&#160;</a></span>MODE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_crc_t::MODE</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: mode register (<a class="el" href="neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447">NEORV32_CRC_MODE_enum</a>) </p> + +</div> +</div> +<a id="a9bbcab843ddba4f9772d07478947a661" name="a9bbcab843ddba4f9772d07478947a661"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9bbcab843ddba4f9772d07478947a661">&#9670;&#160;</a></span>POLY</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_crc_t::POLY</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: polynomial register </p> + +</div> +</div> +<a id="abf2b419f2aefdb6f2a6b81a02cb8612d" name="abf2b419f2aefdb6f2a6b81a02cb8612d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abf2b419f2aefdb6f2a6b81a02cb8612d">&#9670;&#160;</a></span>SREG</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_crc_t::SREG</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 12: CRC shift register </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__crc_8h_source.html">neorv32_crc.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__dma__t.html b/sw/structneorv32__dma__t.html new file mode 100644 index 0000000000..677eec8ca3 --- /dev/null +++ b/sw/structneorv32__dma__t.html @@ -0,0 +1,181 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_dma_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_dma_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__dma_8h_source.html">neorv32_dma.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a8480d6ad3ba5063cdf21dca286711569" id="r_a8480d6ad3ba5063cdf21dca286711569"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8480d6ad3ba5063cdf21dca286711569">CTRL</a></td></tr> +<tr class="separator:a8480d6ad3ba5063cdf21dca286711569"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3b214d1a373c7f15b374e113d7110b42" id="r_a3b214d1a373c7f15b374e113d7110b42"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3b214d1a373c7f15b374e113d7110b42">SRC_BASE</a></td></tr> +<tr class="separator:a3b214d1a373c7f15b374e113d7110b42"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aee8a6cf3cbd9fe3c5995f046ffb9a1c0" id="r_aee8a6cf3cbd9fe3c5995f046ffb9a1c0"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aee8a6cf3cbd9fe3c5995f046ffb9a1c0">DST_BASE</a></td></tr> +<tr class="separator:aee8a6cf3cbd9fe3c5995f046ffb9a1c0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a70c28642195765409d97b941e98f47ca" id="r_a70c28642195765409d97b941e98f47ca"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a70c28642195765409d97b941e98f47ca">TTYPE</a></td></tr> +<tr class="separator:a70c28642195765409d97b941e98f47ca"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>DMA module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a8480d6ad3ba5063cdf21dca286711569" name="a8480d6ad3ba5063cdf21dca286711569"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8480d6ad3ba5063cdf21dca286711569">&#9670;&#160;</a></span>CTRL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_dma_t::CTRL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: control and status register (<a class="el" href="neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4">NEORV32_DMA_CTRL_enum</a>) </p> + +</div> +</div> +<a id="aee8a6cf3cbd9fe3c5995f046ffb9a1c0" name="aee8a6cf3cbd9fe3c5995f046ffb9a1c0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aee8a6cf3cbd9fe3c5995f046ffb9a1c0">&#9670;&#160;</a></span>DST_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_dma_t::DST_BASE</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 8: destination base address register </p> + +</div> +</div> +<a id="a3b214d1a373c7f15b374e113d7110b42" name="a3b214d1a373c7f15b374e113d7110b42"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3b214d1a373c7f15b374e113d7110b42">&#9670;&#160;</a></span>SRC_BASE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_dma_t::SRC_BASE</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: source base address register </p> + +</div> +</div> +<a id="a70c28642195765409d97b941e98f47ca" name="a70c28642195765409d97b941e98f47ca"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a70c28642195765409d97b941e98f47ca">&#9670;&#160;</a></span>TTYPE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_dma_t::TTYPE</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 12: transfer type configuration register &amp; manual trigger (<a class="el" href="neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9">NEORV32_DMA_TTYPE_enum</a>) </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__dma_8h_source.html">neorv32_dma.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__gpio__t.html b/sw/structneorv32__gpio__t.html new file mode 100644 index 0000000000..8a820825e3 --- /dev/null +++ b/sw/structneorv32__gpio__t.html @@ -0,0 +1,147 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_gpio_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_gpio_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__gpio_8h_source.html">neorv32_gpio.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a208ee622d43fee3574072f19a98c8808" id="r_a208ee622d43fee3574072f19a98c8808"><td class="memItemLeft" align="right" valign="top">const uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a208ee622d43fee3574072f19a98c8808">INPUT</a> [2]</td></tr> +<tr class="separator:a208ee622d43fee3574072f19a98c8808"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abaf7de4f79adfc3debcde93fa4a921bb" id="r_abaf7de4f79adfc3debcde93fa4a921bb"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abaf7de4f79adfc3debcde93fa4a921bb">OUTPUT</a> [2]</td></tr> +<tr class="separator:abaf7de4f79adfc3debcde93fa4a921bb"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>GPIO module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a208ee622d43fee3574072f19a98c8808" name="a208ee622d43fee3574072f19a98c8808"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a208ee622d43fee3574072f19a98c8808">&#9670;&#160;</a></span>INPUT</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">const uint32_t neorv32_gpio_t::INPUT[2]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: parallel input port, read-only </p> + +</div> +</div> +<a id="abaf7de4f79adfc3debcde93fa4a921bb" name="abaf7de4f79adfc3debcde93fa4a921bb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abaf7de4f79adfc3debcde93fa4a921bb">&#9670;&#160;</a></span>OUTPUT</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_gpio_t::OUTPUT[2]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 8: parallel output port </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__gpio_8h_source.html">neorv32_gpio.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__gptmr__t.html b/sw/structneorv32__gptmr__t.html new file mode 100644 index 0000000000..acb8f53960 --- /dev/null +++ b/sw/structneorv32__gptmr__t.html @@ -0,0 +1,164 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_gptmr_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_gptmr_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__gptmr_8h_source.html">neorv32_gptmr.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a3c477ccb24ed12122d9d90244431c7e9" id="r_a3c477ccb24ed12122d9d90244431c7e9"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3c477ccb24ed12122d9d90244431c7e9">CTRL</a></td></tr> +<tr class="separator:a3c477ccb24ed12122d9d90244431c7e9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a666ebcbea13dafcf1987629f3e0092ee" id="r_a666ebcbea13dafcf1987629f3e0092ee"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a666ebcbea13dafcf1987629f3e0092ee">THRES</a></td></tr> +<tr class="separator:a666ebcbea13dafcf1987629f3e0092ee"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1abc5bae1dffc64006e965d4570da479" id="r_a1abc5bae1dffc64006e965d4570da479"><td class="memItemLeft" align="right" valign="top">const uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1abc5bae1dffc64006e965d4570da479">COUNT</a></td></tr> +<tr class="separator:a1abc5bae1dffc64006e965d4570da479"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>GPTMR module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a1abc5bae1dffc64006e965d4570da479" name="a1abc5bae1dffc64006e965d4570da479"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1abc5bae1dffc64006e965d4570da479">&#9670;&#160;</a></span>COUNT</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">const uint32_t neorv32_gptmr_t::COUNT</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 8: counter register, read-only </p> + +</div> +</div> +<a id="a3c477ccb24ed12122d9d90244431c7e9" name="a3c477ccb24ed12122d9d90244431c7e9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3c477ccb24ed12122d9d90244431c7e9">&#9670;&#160;</a></span>CTRL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_gptmr_t::CTRL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: control register (<a class="el" href="neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988">NEORV32_GPTMR_CTRL_enum</a>) </p> + +</div> +</div> +<a id="a666ebcbea13dafcf1987629f3e0092ee" name="a666ebcbea13dafcf1987629f3e0092ee"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a666ebcbea13dafcf1987629f3e0092ee">&#9670;&#160;</a></span>THRES</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_gptmr_t::THRES</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: threshold register </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__gptmr_8h_source.html">neorv32_gptmr.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__neoled__t.html b/sw/structneorv32__neoled__t.html new file mode 100644 index 0000000000..300d3ac6f2 --- /dev/null +++ b/sw/structneorv32__neoled__t.html @@ -0,0 +1,147 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_neoled_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_neoled_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__neoled_8h_source.html">neorv32_neoled.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:adfe7618c002ff88dd22e65fcedfd6139" id="r_adfe7618c002ff88dd22e65fcedfd6139"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adfe7618c002ff88dd22e65fcedfd6139">CTRL</a></td></tr> +<tr class="separator:adfe7618c002ff88dd22e65fcedfd6139"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a995fb1d63a9dfb3f20d715932781c1de" id="r_a995fb1d63a9dfb3f20d715932781c1de"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a995fb1d63a9dfb3f20d715932781c1de">DATA</a></td></tr> +<tr class="separator:a995fb1d63a9dfb3f20d715932781c1de"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>NEOLED module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="adfe7618c002ff88dd22e65fcedfd6139" name="adfe7618c002ff88dd22e65fcedfd6139"></a> +<h2 class="memtitle"><span class="permalink"><a href="#adfe7618c002ff88dd22e65fcedfd6139">&#9670;&#160;</a></span>CTRL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_neoled_t::CTRL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: control register </p> + +</div> +</div> +<a id="a995fb1d63a9dfb3f20d715932781c1de" name="a995fb1d63a9dfb3f20d715932781c1de"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a995fb1d63a9dfb3f20d715932781c1de">&#9670;&#160;</a></span>DATA</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_neoled_t::DATA</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: data register (<a class="el" href="neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412">NEORV32_NEOLED_CTRL_enum</a>) </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__neoled_8h_source.html">neorv32_neoled.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__onewire__t.html b/sw/structneorv32__onewire__t.html new file mode 100644 index 0000000000..f1e7f78b90 --- /dev/null +++ b/sw/structneorv32__onewire__t.html @@ -0,0 +1,147 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_onewire_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_onewire_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__onewire_8h_source.html">neorv32_onewire.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a310df3bab43e4438417b2ff948f4712a" id="r_a310df3bab43e4438417b2ff948f4712a"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a310df3bab43e4438417b2ff948f4712a">CTRL</a></td></tr> +<tr class="separator:a310df3bab43e4438417b2ff948f4712a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab8f4e61ac777c55cd1e5805eb03d3d4b" id="r_ab8f4e61ac777c55cd1e5805eb03d3d4b"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab8f4e61ac777c55cd1e5805eb03d3d4b">DCMD</a></td></tr> +<tr class="separator:ab8f4e61ac777c55cd1e5805eb03d3d4b"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>ONEWIRE module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a310df3bab43e4438417b2ff948f4712a" name="a310df3bab43e4438417b2ff948f4712a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a310df3bab43e4438417b2ff948f4712a">&#9670;&#160;</a></span>CTRL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_onewire_t::CTRL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: control register (<a class="el" href="neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831">NEORV32_ONEWIRE_CTRL_enum</a>) </p> + +</div> +</div> +<a id="ab8f4e61ac777c55cd1e5805eb03d3d4b" name="ab8f4e61ac777c55cd1e5805eb03d3d4b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab8f4e61ac777c55cd1e5805eb03d3d4b">&#9670;&#160;</a></span>DCMD</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_onewire_t::DCMD</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: command and data register (<a class="el" href="neorv32__onewire_8h.html#ac3323eb579bade663856055d7aa04e26">NEORV32_ONEWIRE_DCMD_enum</a>) </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__onewire_8h_source.html">neorv32_onewire.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__pwm__t.html b/sw/structneorv32__pwm__t.html new file mode 100644 index 0000000000..a5c2cdcd01 --- /dev/null +++ b/sw/structneorv32__pwm__t.html @@ -0,0 +1,130 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_pwm_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_pwm_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__pwm_8h_source.html">neorv32_pwm.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a5df0cf6c7c250365db3ada8db7cc19e9" id="r_a5df0cf6c7c250365db3ada8db7cc19e9"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5df0cf6c7c250365db3ada8db7cc19e9">CHANNEL_CFG</a> [16]</td></tr> +<tr class="separator:a5df0cf6c7c250365db3ada8db7cc19e9"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>PWM module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a5df0cf6c7c250365db3ada8db7cc19e9" name="a5df0cf6c7c250365db3ada8db7cc19e9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5df0cf6c7c250365db3ada8db7cc19e9">&#9670;&#160;</a></span>CHANNEL_CFG</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_pwm_t::CHANNEL_CFG[16]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0..64: channel configuration 0..15 (<a class="el" href="neorv32__pwm_8h.html#acbcb6d5d80029fb404efcd7123ff5175">CHANNEL_CFG_enum</a>) </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__pwm_8h_source.html">neorv32_pwm.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__sdi__t.html b/sw/structneorv32__sdi__t.html new file mode 100644 index 0000000000..4ca0d7ea50 --- /dev/null +++ b/sw/structneorv32__sdi__t.html @@ -0,0 +1,147 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_sdi_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_sdi_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__sdi_8h_source.html">neorv32_sdi.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:af494f25cbcd8478cf384eb868e447303" id="r_af494f25cbcd8478cf384eb868e447303"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af494f25cbcd8478cf384eb868e447303">CTRL</a></td></tr> +<tr class="separator:af494f25cbcd8478cf384eb868e447303"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3ea6903c0924d0a1b633b6a2b0ae44f1" id="r_a3ea6903c0924d0a1b633b6a2b0ae44f1"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3ea6903c0924d0a1b633b6a2b0ae44f1">DATA</a></td></tr> +<tr class="separator:a3ea6903c0924d0a1b633b6a2b0ae44f1"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>SDI module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="af494f25cbcd8478cf384eb868e447303" name="af494f25cbcd8478cf384eb868e447303"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af494f25cbcd8478cf384eb868e447303">&#9670;&#160;</a></span>CTRL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_sdi_t::CTRL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: control register (<a class="el" href="neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6">NEORV32_SDI_CTRL_enum</a>) </p> + +</div> +</div> +<a id="a3ea6903c0924d0a1b633b6a2b0ae44f1" name="a3ea6903c0924d0a1b633b6a2b0ae44f1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3ea6903c0924d0a1b633b6a2b0ae44f1">&#9670;&#160;</a></span>DATA</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_sdi_t::DATA</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: data register </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__sdi_8h_source.html">neorv32_sdi.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__slink__t.html b/sw/structneorv32__slink__t.html new file mode 100644 index 0000000000..5715a272a5 --- /dev/null +++ b/sw/structneorv32__slink__t.html @@ -0,0 +1,181 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_slink_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_slink_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__slink_8h_source.html">neorv32_slink.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a39ece6aeeea6982002e164902a1e784f" id="r_a39ece6aeeea6982002e164902a1e784f"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a39ece6aeeea6982002e164902a1e784f">CTRL</a></td></tr> +<tr class="separator:a39ece6aeeea6982002e164902a1e784f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0b2417a1a587da45909ce2a948f90e22" id="r_a0b2417a1a587da45909ce2a948f90e22"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0b2417a1a587da45909ce2a948f90e22">ROUTE</a></td></tr> +<tr class="separator:a0b2417a1a587da45909ce2a948f90e22"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8af7d4ea9787cf94c599c82133c6aa74" id="r_a8af7d4ea9787cf94c599c82133c6aa74"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8af7d4ea9787cf94c599c82133c6aa74">DATA</a></td></tr> +<tr class="separator:a8af7d4ea9787cf94c599c82133c6aa74"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ada8f10141d2161b83a5a367722ed6a77" id="r_ada8f10141d2161b83a5a367722ed6a77"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ada8f10141d2161b83a5a367722ed6a77">DATA_LAST</a></td></tr> +<tr class="separator:ada8f10141d2161b83a5a367722ed6a77"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>SLINK module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a39ece6aeeea6982002e164902a1e784f" name="a39ece6aeeea6982002e164902a1e784f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a39ece6aeeea6982002e164902a1e784f">&#9670;&#160;</a></span>CTRL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_slink_t::CTRL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: control register (<a class="el" href="neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1">NEORV32_SLINK_CTRL_enum</a>) </p> + +</div> +</div> +<a id="a8af7d4ea9787cf94c599c82133c6aa74" name="a8af7d4ea9787cf94c599c82133c6aa74"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8af7d4ea9787cf94c599c82133c6aa74">&#9670;&#160;</a></span>DATA</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_slink_t::DATA</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 8: RX/TX data register </p> + +</div> +</div> +<a id="ada8f10141d2161b83a5a367722ed6a77" name="ada8f10141d2161b83a5a367722ed6a77"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ada8f10141d2161b83a5a367722ed6a77">&#9670;&#160;</a></span>DATA_LAST</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_slink_t::DATA_LAST</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 12: RX/TX data register (+ TX end-of-stream) </p> + +</div> +</div> +<a id="a0b2417a1a587da45909ce2a948f90e22" name="a0b2417a1a587da45909ce2a948f90e22"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0b2417a1a587da45909ce2a948f90e22">&#9670;&#160;</a></span>ROUTE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_slink_t::ROUTE</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: routing information (<a class="el" href="neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45">NEORV32_SLINK_ROUTE_enum</a>) </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__slink_8h_source.html">neorv32_slink.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__spi__t.html b/sw/structneorv32__spi__t.html new file mode 100644 index 0000000000..27fc964a8c --- /dev/null +++ b/sw/structneorv32__spi__t.html @@ -0,0 +1,147 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_spi_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_spi_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__spi_8h_source.html">neorv32_spi.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a34fa748f0e3ceb75822c0a5553bd0420" id="r_a34fa748f0e3ceb75822c0a5553bd0420"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a34fa748f0e3ceb75822c0a5553bd0420">CTRL</a></td></tr> +<tr class="separator:a34fa748f0e3ceb75822c0a5553bd0420"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3901bad351213e34820197a33d589f1e" id="r_a3901bad351213e34820197a33d589f1e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3901bad351213e34820197a33d589f1e">DATA</a></td></tr> +<tr class="separator:a3901bad351213e34820197a33d589f1e"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>SPI module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a34fa748f0e3ceb75822c0a5553bd0420" name="a34fa748f0e3ceb75822c0a5553bd0420"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a34fa748f0e3ceb75822c0a5553bd0420">&#9670;&#160;</a></span>CTRL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_spi_t::CTRL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: control register (<a class="el" href="neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3b">NEORV32_SPI_CTRL_enum</a>) </p> + +</div> +</div> +<a id="a3901bad351213e34820197a33d589f1e" name="a3901bad351213e34820197a33d589f1e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3901bad351213e34820197a33d589f1e">&#9670;&#160;</a></span>DATA</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_spi_t::DATA</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: data register (<a class="el" href="neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8">NEORV32_SPI_DATA_enum</a>) </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__spi_8h_source.html">neorv32_spi.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__sysinfo__t.html b/sw/structneorv32__sysinfo__t.html new file mode 100644 index 0000000000..b36af5b292 --- /dev/null +++ b/sw/structneorv32__sysinfo__t.html @@ -0,0 +1,181 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_sysinfo_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_sysinfo_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__sysinfo_8h_source.html">neorv32_sysinfo.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a3f8ce96050fc0a680afa9b7fdf7cb35c" id="r_a3f8ce96050fc0a680afa9b7fdf7cb35c"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3f8ce96050fc0a680afa9b7fdf7cb35c">CLK</a></td></tr> +<tr class="separator:a3f8ce96050fc0a680afa9b7fdf7cb35c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a51eee92b1824c1b19eb0a83a0a9c7d4c" id="r_a51eee92b1824c1b19eb0a83a0a9c7d4c"><td class="memItemLeft" align="right" valign="top">const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a51eee92b1824c1b19eb0a83a0a9c7d4c">MEM</a> [4]</td></tr> +<tr class="separator:a51eee92b1824c1b19eb0a83a0a9c7d4c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac43abe3b416da3a2895d1d06537a14c3" id="r_ac43abe3b416da3a2895d1d06537a14c3"><td class="memItemLeft" align="right" valign="top">const uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac43abe3b416da3a2895d1d06537a14c3">SOC</a></td></tr> +<tr class="separator:ac43abe3b416da3a2895d1d06537a14c3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ada99a36ccda38b254d5b6a84883101f6" id="r_ada99a36ccda38b254d5b6a84883101f6"><td class="memItemLeft" align="right" valign="top">const uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ada99a36ccda38b254d5b6a84883101f6">CACHE</a></td></tr> +<tr class="separator:ada99a36ccda38b254d5b6a84883101f6"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>SYSINFO module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="ada99a36ccda38b254d5b6a84883101f6" name="ada99a36ccda38b254d5b6a84883101f6"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ada99a36ccda38b254d5b6a84883101f6">&#9670;&#160;</a></span>CACHE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">const uint32_t neorv32_sysinfo_t::CACHE</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 12: Cache configuration (<a class="el" href="neorv32__sysinfo_8h.html#a50ee5bda9789b5cffae281db5d10a1ea">NEORV32_SYSINFO_CACHE_enum</a>) </p> + +</div> +</div> +<a id="a3f8ce96050fc0a680afa9b7fdf7cb35c" name="a3f8ce96050fc0a680afa9b7fdf7cb35c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3f8ce96050fc0a680afa9b7fdf7cb35c">&#9670;&#160;</a></span>CLK</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_sysinfo_t::CLK</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: Clock speed in Hz </p> + +</div> +</div> +<a id="a51eee92b1824c1b19eb0a83a0a9c7d4c" name="a51eee92b1824c1b19eb0a83a0a9c7d4c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a51eee92b1824c1b19eb0a83a0a9c7d4c">&#9670;&#160;</a></span>MEM</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">const uint8_t neorv32_sysinfo_t::MEM[4]</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: Internal memory sizes (<a class="el" href="neorv32__sysinfo_8h.html#aebaa5f3f231003a05c899cc1491b8c5f">NEORV32_SYSINFO_MEM_enum</a>) </p> + +</div> +</div> +<a id="ac43abe3b416da3a2895d1d06537a14c3" name="ac43abe3b416da3a2895d1d06537a14c3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac43abe3b416da3a2895d1d06537a14c3">&#9670;&#160;</a></span>SOC</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">const uint32_t neorv32_sysinfo_t::SOC</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 8: SoC features (<a class="el" href="neorv32__sysinfo_8h.html#ae41ebd5785b09640a00df194b1a0fa08">NEORV32_SYSINFO_SOC_enum</a>) </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__sysinfo_8h_source.html">neorv32_sysinfo.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__trng__t.html b/sw/structneorv32__trng__t.html new file mode 100644 index 0000000000..0c3ed881de --- /dev/null +++ b/sw/structneorv32__trng__t.html @@ -0,0 +1,147 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_trng_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_trng_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__trng_8h_source.html">neorv32_trng.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:ae2ff37ce30fb85ef59d9012534bc7e67" id="r_ae2ff37ce30fb85ef59d9012534bc7e67"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae2ff37ce30fb85ef59d9012534bc7e67">CTRL</a></td></tr> +<tr class="separator:ae2ff37ce30fb85ef59d9012534bc7e67"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acf3f269a8097b731cd82e0d6660e16b5" id="r_acf3f269a8097b731cd82e0d6660e16b5"><td class="memItemLeft" align="right" valign="top">const uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acf3f269a8097b731cd82e0d6660e16b5">DATA</a></td></tr> +<tr class="separator:acf3f269a8097b731cd82e0d6660e16b5"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>TRNG module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="ae2ff37ce30fb85ef59d9012534bc7e67" name="ae2ff37ce30fb85ef59d9012534bc7e67"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae2ff37ce30fb85ef59d9012534bc7e67">&#9670;&#160;</a></span>CTRL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_trng_t::CTRL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: control register (<a class="el" href="neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1a">NEORV32_TRNG_CTRL_enum</a>) </p> + +</div> +</div> +<a id="acf3f269a8097b731cd82e0d6660e16b5" name="acf3f269a8097b731cd82e0d6660e16b5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acf3f269a8097b731cd82e0d6660e16b5">&#9670;&#160;</a></span>DATA</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">const uint32_t neorv32_trng_t::DATA</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: random data register (<a class="el" href="neorv32__trng_8h.html#a86e46cb19bb7e716ac5ffec4afc620e2">NEORV32_TRNG_DATA_enum</a>) </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__trng_8h_source.html">neorv32_trng.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__twd__t.html b/sw/structneorv32__twd__t.html new file mode 100644 index 0000000000..907d047a44 --- /dev/null +++ b/sw/structneorv32__twd__t.html @@ -0,0 +1,147 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_twd_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_twd_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__twd_8h_source.html">neorv32_twd.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:acff774cf759c304daf68d709b41b781a" id="r_acff774cf759c304daf68d709b41b781a"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acff774cf759c304daf68d709b41b781a">CTRL</a></td></tr> +<tr class="separator:acff774cf759c304daf68d709b41b781a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0ce59594f8c1aa8cffc78a384c6f6257" id="r_a0ce59594f8c1aa8cffc78a384c6f6257"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0ce59594f8c1aa8cffc78a384c6f6257">DATA</a></td></tr> +<tr class="separator:a0ce59594f8c1aa8cffc78a384c6f6257"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>TWD module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="acff774cf759c304daf68d709b41b781a" name="acff774cf759c304daf68d709b41b781a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#acff774cf759c304daf68d709b41b781a">&#9670;&#160;</a></span>CTRL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_twd_t::CTRL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: control register (<a class="el" href="neorv32__twd_8h.html#a5d944bd98813c6a1fa9f54588962fd18">NEORV32_TWD_CTRL_enum</a>) </p> + +</div> +</div> +<a id="a0ce59594f8c1aa8cffc78a384c6f6257" name="a0ce59594f8c1aa8cffc78a384c6f6257"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0ce59594f8c1aa8cffc78a384c6f6257">&#9670;&#160;</a></span>DATA</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_twd_t::DATA</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: data register (<a class="el" href="neorv32__twd_8h.html#a6745c84c540b583eb7fe9bd9f2f6bcc8">NEORV32_TWD_DATA_enum</a>) </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__twd_8h_source.html">neorv32_twd.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__twi__t.html b/sw/structneorv32__twi__t.html new file mode 100644 index 0000000000..d77d7cdc8f --- /dev/null +++ b/sw/structneorv32__twi__t.html @@ -0,0 +1,147 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_twi_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_twi_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__twi_8h_source.html">neorv32_twi.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a148a1c681a2632881b25ee41652b5304" id="r_a148a1c681a2632881b25ee41652b5304"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a148a1c681a2632881b25ee41652b5304">CTRL</a></td></tr> +<tr class="separator:a148a1c681a2632881b25ee41652b5304"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae311e0827bdb178c6dd8c4535b80d5cb" id="r_ae311e0827bdb178c6dd8c4535b80d5cb"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae311e0827bdb178c6dd8c4535b80d5cb">DCMD</a></td></tr> +<tr class="separator:ae311e0827bdb178c6dd8c4535b80d5cb"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>TWI module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a148a1c681a2632881b25ee41652b5304" name="a148a1c681a2632881b25ee41652b5304"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a148a1c681a2632881b25ee41652b5304">&#9670;&#160;</a></span>CTRL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_twi_t::CTRL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: control register (<a class="el" href="neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafa">NEORV32_TWI_CTRL_enum</a>) </p> + +</div> +</div> +<a id="ae311e0827bdb178c6dd8c4535b80d5cb" name="ae311e0827bdb178c6dd8c4535b80d5cb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae311e0827bdb178c6dd8c4535b80d5cb">&#9670;&#160;</a></span>DCMD</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_twi_t::DCMD</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: data/cmd register (<a class="el" href="neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8">NEORV32_TWI_DCMD_enum</a>) </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__twi_8h_source.html">neorv32_twi.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__uart__t.html b/sw/structneorv32__uart__t.html new file mode 100644 index 0000000000..3bb27b9775 --- /dev/null +++ b/sw/structneorv32__uart__t.html @@ -0,0 +1,147 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_uart_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_uart_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__uart_8h_source.html">neorv32_uart.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a0a6227aeea38335d2b9a9da46b35451b" id="r_a0a6227aeea38335d2b9a9da46b35451b"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0a6227aeea38335d2b9a9da46b35451b">CTRL</a></td></tr> +<tr class="separator:a0a6227aeea38335d2b9a9da46b35451b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a38eec82aae9ed522a0d2afb9a9560036" id="r_a38eec82aae9ed522a0d2afb9a9560036"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a38eec82aae9ed522a0d2afb9a9560036">DATA</a></td></tr> +<tr class="separator:a38eec82aae9ed522a0d2afb9a9560036"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>UART module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a0a6227aeea38335d2b9a9da46b35451b" name="a0a6227aeea38335d2b9a9da46b35451b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0a6227aeea38335d2b9a9da46b35451b">&#9670;&#160;</a></span>CTRL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_uart_t::CTRL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: control register (<a class="el" href="neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afc">NEORV32_UART_CTRL_enum</a>) </p> + +</div> +</div> +<a id="a38eec82aae9ed522a0d2afb9a9560036" name="a38eec82aae9ed522a0d2afb9a9560036"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a38eec82aae9ed522a0d2afb9a9560036">&#9670;&#160;</a></span>DATA</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_uart_t::DATA</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: data register (<a class="el" href="neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2">NEORV32_UART_DATA_enum</a>) </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__uart_8h_source.html">neorv32_uart.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__wdt__t.html b/sw/structneorv32__wdt__t.html new file mode 100644 index 0000000000..dc2f6634e2 --- /dev/null +++ b/sw/structneorv32__wdt__t.html @@ -0,0 +1,147 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_wdt_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_wdt_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__wdt_8h_source.html">neorv32_wdt.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a6ae41e28d08b0f06118c499f52b56f41" id="r_a6ae41e28d08b0f06118c499f52b56f41"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6ae41e28d08b0f06118c499f52b56f41">CTRL</a></td></tr> +<tr class="separator:a6ae41e28d08b0f06118c499f52b56f41"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0a273e8ca2bd92547bf7727ec65a9449" id="r_a0a273e8ca2bd92547bf7727ec65a9449"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0a273e8ca2bd92547bf7727ec65a9449">RESET</a></td></tr> +<tr class="separator:a0a273e8ca2bd92547bf7727ec65a9449"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>WDT module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a6ae41e28d08b0f06118c499f52b56f41" name="a6ae41e28d08b0f06118c499f52b56f41"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a6ae41e28d08b0f06118c499f52b56f41">&#9670;&#160;</a></span>CTRL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_wdt_t::CTRL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: control register (<a class="el" href="neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23e">NEORV32_WDT_CTRL_enum</a>) </p> + +</div> +</div> +<a id="a0a273e8ca2bd92547bf7727ec65a9449" name="a0a273e8ca2bd92547bf7727ec65a9449"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0a273e8ca2bd92547bf7727ec65a9449">&#9670;&#160;</a></span>RESET</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_wdt_t::RESET</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: WDT reset trigger (write password to "feed" watchdog) </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__wdt_8h_source.html">neorv32_wdt.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__xip__t.html b/sw/structneorv32__xip__t.html new file mode 100644 index 0000000000..d55d0b2e63 --- /dev/null +++ b/sw/structneorv32__xip__t.html @@ -0,0 +1,181 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_xip_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_xip_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__xip_8h_source.html">neorv32_xip.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a7ead9d6a4f784d766a6b2755c6d35235" id="r_a7ead9d6a4f784d766a6b2755c6d35235"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7ead9d6a4f784d766a6b2755c6d35235">CTRL</a></td></tr> +<tr class="separator:a7ead9d6a4f784d766a6b2755c6d35235"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aacb77d586c3caec518e8e0024cfe745c" id="r_aacb77d586c3caec518e8e0024cfe745c"><td class="memItemLeft" align="right" valign="top">const uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aacb77d586c3caec518e8e0024cfe745c">reserved</a></td></tr> +<tr class="separator:aacb77d586c3caec518e8e0024cfe745c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad64048bb3544e712b1c668c2ef343ccb" id="r_ad64048bb3544e712b1c668c2ef343ccb"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad64048bb3544e712b1c668c2ef343ccb">DATA_LO</a></td></tr> +<tr class="separator:ad64048bb3544e712b1c668c2ef343ccb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a516ab9c075ef6d1fb741e243db7703b2" id="r_a516ab9c075ef6d1fb741e243db7703b2"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a516ab9c075ef6d1fb741e243db7703b2">DATA_HI</a></td></tr> +<tr class="separator:a516ab9c075ef6d1fb741e243db7703b2"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>XIP module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a7ead9d6a4f784d766a6b2755c6d35235" name="a7ead9d6a4f784d766a6b2755c6d35235"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7ead9d6a4f784d766a6b2755c6d35235">&#9670;&#160;</a></span>CTRL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_xip_t::CTRL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: control register (<a class="el" href="neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceb">NEORV32_XIP_CTRL_enum</a>) </p> + +</div> +</div> +<a id="a516ab9c075ef6d1fb741e243db7703b2" name="a516ab9c075ef6d1fb741e243db7703b2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a516ab9c075ef6d1fb741e243db7703b2">&#9670;&#160;</a></span>DATA_HI</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_xip_t::DATA_HI</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 12: SPI data register high </p> + +</div> +</div> +<a id="ad64048bb3544e712b1c668c2ef343ccb" name="ad64048bb3544e712b1c668c2ef343ccb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad64048bb3544e712b1c668c2ef343ccb">&#9670;&#160;</a></span>DATA_LO</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_xip_t::DATA_LO</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 8: SPI data register low </p> + +</div> +</div> +<a id="aacb77d586c3caec518e8e0024cfe745c" name="aacb77d586c3caec518e8e0024cfe745c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aacb77d586c3caec518e8e0024cfe745c">&#9670;&#160;</a></span>reserved</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">const uint32_t neorv32_xip_t::reserved</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: reserved </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__xip_8h_source.html">neorv32_xip.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structneorv32__xirq__t.html b/sw/structneorv32__xirq__t.html new file mode 100644 index 0000000000..274ba10549 --- /dev/null +++ b/sw/structneorv32__xirq__t.html @@ -0,0 +1,181 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: neorv32_xirq_t Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">neorv32_xirq_t Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="neorv32__xirq_8h_source.html">neorv32_xirq.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:aef3c2b491207abd68bf6392f97096a74" id="r_aef3c2b491207abd68bf6392f97096a74"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aef3c2b491207abd68bf6392f97096a74">EIE</a></td></tr> +<tr class="separator:aef3c2b491207abd68bf6392f97096a74"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae4f7f3f41210ff329b6f82d5dfada88a" id="r_ae4f7f3f41210ff329b6f82d5dfada88a"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae4f7f3f41210ff329b6f82d5dfada88a">ESC</a></td></tr> +<tr class="separator:ae4f7f3f41210ff329b6f82d5dfada88a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab7117c210b5f0a8ebc369eeba6a4a5bc" id="r_ab7117c210b5f0a8ebc369eeba6a4a5bc"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab7117c210b5f0a8ebc369eeba6a4a5bc">TTYP</a></td></tr> +<tr class="separator:ab7117c210b5f0a8ebc369eeba6a4a5bc"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5fe0036a2cada585228b60aaa780e92a" id="r_a5fe0036a2cada585228b60aaa780e92a"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5fe0036a2cada585228b60aaa780e92a">TPOL</a></td></tr> +<tr class="separator:a5fe0036a2cada585228b60aaa780e92a"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>XIRQ module prototype </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="aef3c2b491207abd68bf6392f97096a74" name="aef3c2b491207abd68bf6392f97096a74"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aef3c2b491207abd68bf6392f97096a74">&#9670;&#160;</a></span>EIE</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_xirq_t::EIE</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 0: external interrupt enable register </p> + +</div> +</div> +<a id="ae4f7f3f41210ff329b6f82d5dfada88a" name="ae4f7f3f41210ff329b6f82d5dfada88a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae4f7f3f41210ff329b6f82d5dfada88a">&#9670;&#160;</a></span>ESC</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_xirq_t::ESC</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 4: external interrupt source register </p> + +</div> +</div> +<a id="a5fe0036a2cada585228b60aaa780e92a" name="a5fe0036a2cada585228b60aaa780e92a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5fe0036a2cada585228b60aaa780e92a">&#9670;&#160;</a></span>TPOL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_xirq_t::TPOL</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 12: external interrupt source register </p> + +</div> +</div> +<a id="ab7117c210b5f0a8ebc369eeba6a4a5bc" name="ab7117c210b5f0a8ebc369eeba6a4a5bc"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab7117c210b5f0a8ebc369eeba6a4a5bc">&#9670;&#160;</a></span>TTYP</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t neorv32_xirq_t::TTYP</td> + </tr> + </table> +</div><div class="memdoc"> +<p>offset 8: external interrupt source register </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32__xirq_8h_source.html">neorv32_xirq.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structrecord.html b/sw/structrecord.html new file mode 100644 index 0000000000..b61ef1b3e9 --- /dev/null +++ b/sw/structrecord.html @@ -0,0 +1,155 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: record Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">record Struct Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:ad8b33bb16e8d3101a17b5dbbf37b051f" id="r_ad8b33bb16e8d3101a17b5dbbf37b051f"><td class="memItemLeft" align="right" valign="top"><a id="ad8b33bb16e8d3101a17b5dbbf37b051f" name="ad8b33bb16e8d3101a17b5dbbf37b051f"></a> +struct <a class="el" href="structrecord.html">record</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr_Comp</b></td></tr> +<tr class="separator:ad8b33bb16e8d3101a17b5dbbf37b051f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9464937f85e9a8b11f38229764c0dff7" id="r_a9464937f85e9a8b11f38229764c0dff7"><td class="memItemLeft" align="right" valign="top"><a id="a9464937f85e9a8b11f38229764c0dff7" name="a9464937f85e9a8b11f38229764c0dff7"></a> +Enumeration&#160;</td><td class="memItemRight" valign="bottom"><b>Discr</b></td></tr> +<tr class="separator:a9464937f85e9a8b11f38229764c0dff7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a411f007775868401459a118a7b210e35" id="r_a411f007775868401459a118a7b210e35"><td class="memItemLeft" ><a id="a411f007775868401459a118a7b210e35" name="a411f007775868401459a118a7b210e35"></a> +union {&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aac622781dd01254adab01f3412b85e35" id="r_aac622781dd01254adab01f3412b85e35"><td class="memItemLeft" > +&#160;&#160;&#160;struct {&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:aa7708fbf51a87d91ed0636e13260e753"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9eb1f354ec5a2004f2444757e71595c8" id="r_a9eb1f354ec5a2004f2444757e71595c8"><td class="memItemLeft" > +&#160;&#160;&#160;&#160;&#160;&#160;Enumeration&#160;&#160;&#160;<b>Enum_Comp</b>&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:a9eb1f354ec5a2004f2444757e71595c8"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a347e674f08251f18ba82d57b050d4125" id="r_a347e674f08251f18ba82d57b050d4125"><td class="memItemLeft" > +&#160;&#160;&#160;&#160;&#160;&#160;int&#160;&#160;&#160;<b>Int_Comp</b>&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:a347e674f08251f18ba82d57b050d4125"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa8ef470d7dbb66c7c0932edd33ede2b4" id="r_aa8ef470d7dbb66c7c0932edd33ede2b4"><td class="memItemLeft" > +&#160;&#160;&#160;&#160;&#160;&#160;char&#160;&#160;&#160;<b>Str_Comp</b> [31]&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:aa8ef470d7dbb66c7c0932edd33ede2b4"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aac622781dd01254adab01f3412b85e35" id="r_aac622781dd01254adab01f3412b85e35"><td class="memItemLeft" valign="top">&#160;&#160;&#160;}&#160;&#160;&#160;<b>var_1</b>&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:aac622781dd01254adab01f3412b85e35"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acff560158cb5a697a2db95c291622399" id="r_acff560158cb5a697a2db95c291622399"><td class="memItemLeft" > +&#160;&#160;&#160;struct {&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:aa0eb18bd040c631e8d88434c5abff601"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac320afb9d4a056d72c6878e6bd56020b" id="r_ac320afb9d4a056d72c6878e6bd56020b"><td class="memItemLeft" > +&#160;&#160;&#160;&#160;&#160;&#160;Enumeration&#160;&#160;&#160;<b>E_Comp_2</b>&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:ac320afb9d4a056d72c6878e6bd56020b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3128048869b46615ddf99a930ba7cad0" id="r_a3128048869b46615ddf99a930ba7cad0"><td class="memItemLeft" > +&#160;&#160;&#160;&#160;&#160;&#160;char&#160;&#160;&#160;<b>Str_2_Comp</b> [31]&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:a3128048869b46615ddf99a930ba7cad0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:acff560158cb5a697a2db95c291622399" id="r_acff560158cb5a697a2db95c291622399"><td class="memItemLeft" valign="top">&#160;&#160;&#160;}&#160;&#160;&#160;<b>var_2</b>&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:acff560158cb5a697a2db95c291622399"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a346ca9bbcc2f93826b656ded50b2c853" id="r_a346ca9bbcc2f93826b656ded50b2c853"><td class="memItemLeft" > +&#160;&#160;&#160;struct {&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:ab188e1dd656f71796bf8751673f912e0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2dda9ded52716954a77cd6782cac2be0" id="r_a2dda9ded52716954a77cd6782cac2be0"><td class="memItemLeft" > +&#160;&#160;&#160;&#160;&#160;&#160;char&#160;&#160;&#160;<b>Ch_1_Comp</b>&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:a2dda9ded52716954a77cd6782cac2be0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8e971f4eeb0d9071cc79ad13fa7d0166" id="r_a8e971f4eeb0d9071cc79ad13fa7d0166"><td class="memItemLeft" > +&#160;&#160;&#160;&#160;&#160;&#160;char&#160;&#160;&#160;<b>Ch_2_Comp</b>&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:a8e971f4eeb0d9071cc79ad13fa7d0166"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a346ca9bbcc2f93826b656ded50b2c853" id="r_a346ca9bbcc2f93826b656ded50b2c853"><td class="memItemLeft" valign="top">&#160;&#160;&#160;}&#160;&#160;&#160;<b>var_3</b>&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:a346ca9bbcc2f93826b656ded50b2c853"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a411f007775868401459a118a7b210e35" id="r_a411f007775868401459a118a7b210e35"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><b>variant</b>&#160;</td><td class="memItemRight" valign="bottom"></td></tr> +<tr class="separator:a411f007775868401459a118a7b210e35"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/example/dhrystone/<a class="el" href="dhry_8h_source.html">dhry.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/structt__neorv32__spi.html b/sw/structt__neorv32__spi.html new file mode 100644 index 0000000000..66916d4eb2 --- /dev/null +++ b/sw/structt__neorv32__spi.html @@ -0,0 +1,228 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: t_neorv32_spi Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">t_neorv32_spi Struct Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a487a6510820871ff8d0da7699463f6d9" id="r_a487a6510820871ff8d0da7699463f6d9"><td class="memItemLeft" align="right" valign="top">uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a487a6510820871ff8d0da7699463f6d9">ptrSpiBuf</a></td></tr> +<tr class="separator:a487a6510820871ff8d0da7699463f6d9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a435c266758a440d32de4344472e3514a" id="r_a435c266758a440d32de4344472e3514a"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a435c266758a440d32de4344472e3514a">uint8Csn</a></td></tr> +<tr class="separator:a435c266758a440d32de4344472e3514a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a71fb3f91af197e1abdbe97d62130ad0f" id="r_a71fb3f91af197e1abdbe97d62130ad0f"><td class="memItemLeft" align="right" valign="top">uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a71fb3f91af197e1abdbe97d62130ad0f">uint16Fifo</a></td></tr> +<tr class="separator:a71fb3f91af197e1abdbe97d62130ad0f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa4d96f72e57fb6930ab43de6fb0a85ae" id="r_aa4d96f72e57fb6930ab43de6fb0a85ae"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa4d96f72e57fb6930ab43de6fb0a85ae">uint32Total</a></td></tr> +<tr class="separator:aa4d96f72e57fb6930ab43de6fb0a85ae"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa89b7a769e54e331798e4d68d02a7b43" id="r_aa89b7a769e54e331798e4d68d02a7b43"><td class="memItemLeft" align="right" valign="top">volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa89b7a769e54e331798e4d68d02a7b43">uint32Write</a></td></tr> +<tr class="separator:aa89b7a769e54e331798e4d68d02a7b43"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5750a54f8312ec2fed349eb9fbeff323" id="r_a5750a54f8312ec2fed349eb9fbeff323"><td class="memItemLeft" align="right" valign="top">volatile uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5750a54f8312ec2fed349eb9fbeff323">uint32Read</a></td></tr> +<tr class="separator:a5750a54f8312ec2fed349eb9fbeff323"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8ed31f9393bee5b963e08582b6c517ed" id="r_a8ed31f9393bee5b963e08582b6c517ed"><td class="memItemLeft" align="right" valign="top">volatile uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8ed31f9393bee5b963e08582b6c517ed">uint8IsBusy</a></td></tr> +<tr class="separator:a8ed31f9393bee5b963e08582b6c517ed"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<h2 class="groupheader">Field Documentation</h2> +<a id="a487a6510820871ff8d0da7699463f6d9" name="a487a6510820871ff8d0da7699463f6d9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a487a6510820871ff8d0da7699463f6d9">&#9670;&#160;</a></span>ptrSpiBuf</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t* t_neorv32_spi::ptrSpiBuf</td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI buffer data pointer </p> + +</div> +</div> +<a id="a71fb3f91af197e1abdbe97d62130ad0f" name="a71fb3f91af197e1abdbe97d62130ad0f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a71fb3f91af197e1abdbe97d62130ad0f">&#9670;&#160;</a></span>uint16Fifo</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint16_t t_neorv32_spi::uint16Fifo</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Number of elements in Fifo </p> + +</div> +</div> +<a id="a5750a54f8312ec2fed349eb9fbeff323" name="a5750a54f8312ec2fed349eb9fbeff323"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5750a54f8312ec2fed349eb9fbeff323">&#9670;&#160;</a></span>uint32Read</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">volatile uint32_t t_neorv32_spi::uint32Read</td> + </tr> + </table> +</div><div class="memdoc"> +<p>From SPI core read elements </p> + +</div> +</div> +<a id="aa4d96f72e57fb6930ab43de6fb0a85ae" name="aa4d96f72e57fb6930ab43de6fb0a85ae"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa4d96f72e57fb6930ab43de6fb0a85ae">&#9670;&#160;</a></span>uint32Total</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t t_neorv32_spi::uint32Total</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Number of elements in buffer </p> + +</div> +</div> +<a id="aa89b7a769e54e331798e4d68d02a7b43" name="aa89b7a769e54e331798e4d68d02a7b43"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa89b7a769e54e331798e4d68d02a7b43">&#9670;&#160;</a></span>uint32Write</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">volatile uint32_t t_neorv32_spi::uint32Write</td> + </tr> + </table> +</div><div class="memdoc"> +<p>To SPI core write elements </p> + +</div> +</div> +<a id="a435c266758a440d32de4344472e3514a" name="a435c266758a440d32de4344472e3514a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a435c266758a440d32de4344472e3514a">&#9670;&#160;</a></span>uint8Csn</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint8_t t_neorv32_spi::uint8Csn</td> + </tr> + </table> +</div><div class="memdoc"> +<p>SPI chip select channel </p> + +</div> +</div> +<a id="a8ed31f9393bee5b963e08582b6c517ed" name="a8ed31f9393bee5b963e08582b6c517ed"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8ed31f9393bee5b963e08582b6c517ed">&#9670;&#160;</a></span>uint8IsBusy</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">volatile uint8_t t_neorv32_spi::uint8IsBusy</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Spi Core is Busy </p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>sw/example/demo_spi_irq/drv/<a class="el" href="neorv32__spi__irq_8h_source.html">neorv32_spi_irq.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/sync_off.png b/sw/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv0009VNkl<ZcmeI* zOK4PA7{KxW<S|JmGnqI|rb(KahDirA+8B+gVk8A)%pe9yF;+3L5iKZG7xuBS&@L(k z33MTXOIxMHjirbWgs8M;qhM?(_-v^nS(KzU#%Ih_`hB-^XYSm&39)2*I6vmhow@fr z=iKj{vvuv-e;!~uA+biR6pf-n<cdGVuox5<#BBg4c>oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO<q-Bsh$IuZaopT|9E z-75alp&U9s%(|8uI^NA(#AD;nc=%{ivdZX(QFJ7~-yf%_Adjk`W@NhjJTyZ8*;|!n z9=K#TJuZz+={YZ#>8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sT<tBHx6XfOFDx2(ijpMiR>xLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/sw/sync_on.png b/sw/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv0009NNkl<ZcmeI* zUr1D09KiAKIOC-Ar)j4&EoU~y1|7@QCTmeCsMH~fFw#|0OWK8m>Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I<ojWskx{8*sm){4kXJ+p2oO6HY zoL5W7@h*VL_(ZL!7GaSmtl}SWU-XD;q7T4~4ZuW>_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F<o_Z}1zllSWC8!Z+rkFN>={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$M<u9&-IHqnYs=DL+lbi3lG2ysF!p!_2H=p zj-g89hmThki^;JHknVE4V`@zS$(ZbTd?1=dsrXLRiJbUBq7weAmVjEk@rP>j4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/sw/tab_a.png b/sw/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/sw/tab_ad.png b/sw/tab_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..e34850acfc24be58da6d2fd1ccc6b29cc84fe34d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6<r_{TVK| literal 0 HcmV?d00001 diff --git a/sw/tab_b.png b/sw/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn<f<Rf3mJ=+uzfrOMlc%s`x4TZtnrR|B~W{ zyZP0m7vvtXV80W5^J2vvp97)4WrPK1-P<H^B$Ll|TGvzm;+92|BpdT89$b1Qf7x5g UZ&RH}7SL`6Pgg&ebxsLQ0A}n&iU0rr literal 0 HcmV?d00001 diff --git a/sw/tab_bd.png b/sw/tab_bd.png new file mode 100644 index 0000000000000000000000000000000000000000..91c25249869ffe5269c24f8c441e3f1bf75df400 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QYD@)jv*C{Z|_EP9WoGMxiEXC z*+er<&!~9SeFB;qdWZkM*Qnb6=Y<v@&*3w2PyYNmP%60gwdFMP&wo;^^nBV|3(M2* z*jxC7^WBy{T+w*t)CB)8J1;C}`Wg1Eu&qNNCxPc5OM{{Il5M+!8{(pt&)hOwq4#ZF XiX*3<piHC_(0&F_S3j3^P6<r_`0_!v literal 0 HcmV?d00001 diff --git a/sw/tab_h.png b/sw/tab_h.png new file mode 100644 index 0000000000000000000000000000000000000000..fd5cb705488e60fcf30f56fcc951dee74f3b095b GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QWc&qjv*C{Z}0jF9dr<AdpNI7 zaOs_6=O($9b?lc?Qk=SJVv5%FA{O^TY1^*qJ@<p}E}!uH_1eoPJ&tpVl={bg{Skd2 zp1FO|;|R90%G3WYZM5AU=A4%H?3qaQhHt%H9G|xYJ)ff*|MmI*zD3`*Z|LP?7d&26 cn!ZiLK0QM$CeyB_80ZEDPgg&ebxsLQ0C?O;!~g&Q literal 0 HcmV?d00001 diff --git a/sw/tab_hd.png b/sw/tab_hd.png new file mode 100644 index 0000000000000000000000000000000000000000..2489273d4ce1d11d3f7557335244c02b9959351b GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq`U=jv*C{Z|8b*9dZzG*}eKq zLz7a+10_jMu|=F8x0f5va$Ursw|7c<-`q2fuRgxI>y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796<RKfbH6P<&Zg{jpvTk5 g<odruKTrK<y!3{DoqTGTH_#ajp00i_>zopr0EBT&m;e9( literal 0 HcmV?d00001 diff --git a/sw/tab_s.png b/sw/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/sw/tab_sd.png b/sw/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..757a565ced4730f85c833fb2547d8e199ae68f19 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`<jkg7 oB>4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% literal 0 HcmV?d00001 diff --git a/sw/tabs.css b/sw/tabs.css new file mode 100644 index 0000000000..7fa4268a46 --- /dev/null +++ b/sw/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} diff --git a/sw/unionfloat__conv__t.html b/sw/unionfloat__conv__t.html new file mode 100644 index 0000000000..9472e8fdaf --- /dev/null +++ b/sw/unionfloat__conv__t.html @@ -0,0 +1,148 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: float_conv_t Union Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">float_conv_t Union Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="float__corner__test_2neorv32__zfinx__extension__intrinsics_8h_source.html">neorv32_zfinx_extension_intrinsics.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a59ad19d41b1d973a6bda9032e1937606" id="r_a59ad19d41b1d973a6bda9032e1937606"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a59ad19d41b1d973a6bda9032e1937606">binary_value</a></td></tr> +<tr class="separator:a59ad19d41b1d973a6bda9032e1937606"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a95f2e38b437bd8d4e8de7f61d7474788" id="r_a95f2e38b437bd8d4e8de7f61d7474788"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a95f2e38b437bd8d4e8de7f61d7474788">float_value</a></td></tr> +<tr class="separator:a95f2e38b437bd8d4e8de7f61d7474788"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>Sanity check Custom data type to access floating-point values as native floats and in binary representation </p> +</div><h2 class="groupheader">Field Documentation</h2> +<a id="a59ad19d41b1d973a6bda9032e1937606" name="a59ad19d41b1d973a6bda9032e1937606"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a59ad19d41b1d973a6bda9032e1937606">&#9670;&#160;</a></span>binary_value</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">uint32_t float_conv_t::binary_value</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Access as native float </p> + +</div> +</div> +<a id="a95f2e38b437bd8d4e8de7f61d7474788" name="a95f2e38b437bd8d4e8de7f61d7474788"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a95f2e38b437bd8d4e8de7f61d7474788">&#9670;&#160;</a></span>float_value</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">float float_conv_t::float_value</td> + </tr> + </table> +</div><div class="memdoc"> +<p>Access in binary representation </p> + +</div> +</div> +<hr/>The documentation for this union was generated from the following files:<ul> +<li>sw/example/float_corner_test/<a class="el" href="float__corner__test_2neorv32__zfinx__extension__intrinsics_8h_source.html">neorv32_zfinx_extension_intrinsics.h</a></li> +<li>sw/example/floating_point_test/<a class="el" href="floating__point__test_2neorv32__zfinx__extension__intrinsics_8h_source.html">neorv32_zfinx_extension_intrinsics.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/unionsubwords16__t.html b/sw/unionsubwords16__t.html new file mode 100644 index 0000000000..241dbc1baf --- /dev/null +++ b/sw/unionsubwords16__t.html @@ -0,0 +1,114 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: subwords16_t Union Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">subwords16_t Union Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:af3542fb53e1cf8cf51043e17123a5955" id="r_af3542fb53e1cf8cf51043e17123a5955"><td class="memItemLeft" align="right" valign="top"><a id="af3542fb53e1cf8cf51043e17123a5955" name="af3542fb53e1cf8cf51043e17123a5955"></a> +uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>uint16</b> [sizeof(uint16_t)/sizeof(uint16_t)]</td></tr> +<tr class="separator:af3542fb53e1cf8cf51043e17123a5955"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a59531d2a833b3d540767c7fdd085a6d5" id="r_a59531d2a833b3d540767c7fdd085a6d5"><td class="memItemLeft" align="right" valign="top"><a id="a59531d2a833b3d540767c7fdd085a6d5" name="a59531d2a833b3d540767c7fdd085a6d5"></a> +uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>uint8</b> [sizeof(uint16_t)/sizeof(uint8_t)]</td></tr> +<tr class="separator:a59531d2a833b3d540767c7fdd085a6d5"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<hr/>The documentation for this union was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32_8h_source.html">neorv32.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/unionsubwords32__t.html b/sw/unionsubwords32__t.html new file mode 100644 index 0000000000..722b22aa50 --- /dev/null +++ b/sw/unionsubwords32__t.html @@ -0,0 +1,117 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: subwords32_t Union Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">subwords32_t Union Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:ae0842804ca9f19b2a295db3d978d1383" id="r_ae0842804ca9f19b2a295db3d978d1383"><td class="memItemLeft" align="right" valign="top"><a id="ae0842804ca9f19b2a295db3d978d1383" name="ae0842804ca9f19b2a295db3d978d1383"></a> +uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>uint32</b> [sizeof(uint32_t)/sizeof(uint32_t)]</td></tr> +<tr class="separator:ae0842804ca9f19b2a295db3d978d1383"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4e7b238df02515aa6624102e209d7ff6" id="r_a4e7b238df02515aa6624102e209d7ff6"><td class="memItemLeft" align="right" valign="top"><a id="a4e7b238df02515aa6624102e209d7ff6" name="a4e7b238df02515aa6624102e209d7ff6"></a> +uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>uint16</b> [sizeof(uint32_t)/sizeof(uint16_t)]</td></tr> +<tr class="separator:a4e7b238df02515aa6624102e209d7ff6"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aeb3242ba9fc1e3a49116465ce7a4239b" id="r_aeb3242ba9fc1e3a49116465ce7a4239b"><td class="memItemLeft" align="right" valign="top"><a id="aeb3242ba9fc1e3a49116465ce7a4239b" name="aeb3242ba9fc1e3a49116465ce7a4239b"></a> +uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>uint8</b> [sizeof(uint32_t)/sizeof(uint8_t)]</td></tr> +<tr class="separator:aeb3242ba9fc1e3a49116465ce7a4239b"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<hr/>The documentation for this union was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32_8h_source.html">neorv32.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/sw/unionsubwords64__t.html b/sw/unionsubwords64__t.html new file mode 100644 index 0000000000..b542c01f32 --- /dev/null +++ b/sw/unionsubwords64__t.html @@ -0,0 +1,120 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.12.0"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>NEORV32 Software Framework Documentation: subwords64_t Union Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<script type="text/javascript" src="clipboard.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="cookie.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="neorv32_logo_small.png"/></td> + <td id="projectalign"> + <div id="projectname">NEORV32 Software Framework Documentation + </div> + <div id="projectbrief">The NEORV32 RISC-V Processor</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.12.0 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { codefold.init(0); }); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search',false); + $(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function(){ initResizable(false); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div id="doc-content"> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Data Fields</a> </div> + <div class="headertitle"><div class="title">subwords64_t Union Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Data Fields</h2></td></tr> +<tr class="memitem:a7c97aa749bdf861b0e540cc39256338c" id="r_a7c97aa749bdf861b0e540cc39256338c"><td class="memItemLeft" align="right" valign="top"><a id="a7c97aa749bdf861b0e540cc39256338c" name="a7c97aa749bdf861b0e540cc39256338c"></a> +uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>uint64</b></td></tr> +<tr class="separator:a7c97aa749bdf861b0e540cc39256338c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5d33f089b353a7770bd9cf77bc37dc29" id="r_a5d33f089b353a7770bd9cf77bc37dc29"><td class="memItemLeft" align="right" valign="top"><a id="a5d33f089b353a7770bd9cf77bc37dc29" name="a5d33f089b353a7770bd9cf77bc37dc29"></a> +uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>uint32</b> [sizeof(uint64_t)/sizeof(uint32_t)]</td></tr> +<tr class="separator:a5d33f089b353a7770bd9cf77bc37dc29"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7879c29bae9e9fb59e9bc0bba632100d" id="r_a7879c29bae9e9fb59e9bc0bba632100d"><td class="memItemLeft" align="right" valign="top"><a id="a7879c29bae9e9fb59e9bc0bba632100d" name="a7879c29bae9e9fb59e9bc0bba632100d"></a> +uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>uint16</b> [sizeof(uint64_t)/sizeof(uint16_t)]</td></tr> +<tr class="separator:a7879c29bae9e9fb59e9bc0bba632100d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a2438964f074b260fa577d90de754c6f9" id="r_a2438964f074b260fa577d90de754c6f9"><td class="memItemLeft" align="right" valign="top"><a id="a2438964f074b260fa577d90de754c6f9" name="a2438964f074b260fa577d90de754c6f9"></a> +uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>uint8</b> [sizeof(uint64_t)/sizeof(uint8_t)]</td></tr> +<tr class="separator:a2438964f074b260fa577d90de754c6f9"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<hr/>The documentation for this union was generated from the following file:<ul> +<li>sw/lib/include/<a class="el" href="neorv32_8h_source.html">neorv32.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 +</small></address> +</div><!-- doc-content --> +</body> +</html> diff --git a/ug/index.html b/ug/index.html new file mode 100644 index 0000000000..889a86f13c --- /dev/null +++ b/ug/index.html @@ -0,0 +1,4499 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="UTF-8"> +<meta http-equiv="X-UA-Compatible" content="IE=edge"> +<meta name="viewport" content="width=device-width, initial-scale=1.0"> +<meta name="generator" content="Asciidoctor 2.0.20"> +<meta name="description" content="A size-optimized, customizable and highly extensible MCU-class 32-bit RISC-V soft-core CPU and microcontroller-like SoC written in platform-independent VHDL."> +<meta name="keywords" content="neorv32, risc-v, riscv, rv32, fpga, soft-core, vhdl, microcontroller, cpu, soc, processor, gcc, openocd, gdb, verilog, rtl, asip, asic"> +<meta name="author" content="The NEORV32 Community and Stephan Nolting"> +<link rel="icon" type="image/png" href="../img/icon.png"> +<title>[User Guide] The NEORV32 RISC-V Processor</title> +<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"> +<style> +/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */ +/* Uncomment the following line when using as a custom stylesheet */ +/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */ +html{font-family:sans-serif;-webkit-text-size-adjust:100%} +a{background:none} +a:focus{outline:thin dotted} +a:active,a:hover{outline:0} +h1{font-size:2em;margin:.67em 0} +b,strong{font-weight:bold} +abbr{font-size:.9em} +abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none} +dfn{font-style:italic} +hr{height:0} +mark{background:#ff0;color:#000} +code,kbd,pre,samp{font-family:monospace;font-size:1em} +pre{white-space:pre-wrap} +q{quotes:"\201C" "\201D" "\2018" "\2019"} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-.5em} +sub{bottom:-.25em} +img{border:0} +svg:not(:root){overflow:hidden} +figure{margin:0} +audio,video{display:inline-block} +audio:not([controls]){display:none;height:0} +fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} +legend{border:0;padding:0} +button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +button,input{line-height:normal} +button,select{text-transform:none} +button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +input[type=checkbox],input[type=radio]{padding:0} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +textarea{overflow:auto;vertical-align:top} +table{border-collapse:collapse;border-spacing:0} +*,::before,::after{box-sizing:border-box} +html,body{font-size:100%} +body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased} +a:hover{cursor:pointer} +img,object,embed{max-width:100%;height:auto} +object,embed{height:100%} +img{-ms-interpolation-mode:bicubic} +.left{float:left!important} +.right{float:right!important} +.text-left{text-align:left!important} +.text-right{text-align:right!important} +.text-center{text-align:center!important} +.text-justify{text-align:justify!important} +.hide{display:none} +img,object,svg{display:inline-block;vertical-align:middle} +textarea{height:auto;min-height:50px} +select{width:100%} +.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} +div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0} +a{color:#2156a5;text-decoration:underline;line-height:inherit} +a:hover,a:focus{color:#1d4b8f} +a img{border:0} +p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} +p aside{font-size:.875em;line-height:1.35;font-style:italic} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} +h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} +h1{font-size:2.125em} +h2{font-size:1.6875em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} +h4,h5{font-size:1.125em} +h6{font-size:1em} +hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em} +em,i{font-style:italic;line-height:inherit} +strong,b{font-weight:bold;line-height:inherit} +small{font-size:60%;line-height:inherit} +code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} +ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} +ul,ol{margin-left:1.5em} +ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0} +ul.circle{list-style-type:circle} +ul.disc{list-style-type:disc} +ul.square{list-style-type:square} +ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit} +ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} +dl dt{margin-bottom:.3125em;font-weight:bold} +dl dd{margin-bottom:1.25em} +blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} +blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} +@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} +h1{font-size:2.75em} +h2{font-size:2.3125em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} +h4{font-size:1.4375em}} +table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal} +table thead,table tfoot{background:#f7f8f7} +table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} +table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} +table tr.even,table tr.alt{background:#f8f8f7} +table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} +h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} +.center{margin-left:auto;margin-right:auto} +.stretch{width:100%} +.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table} +.clearfix::after,.float-group::after{clear:both} +:not(pre).nobreak{word-wrap:normal} +:not(pre).nowrap{white-space:nowrap} +:not(pre).pre-wrap{white-space:pre-wrap} +:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed} +pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed} +pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit} +pre>code{display:block} +pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal} +em em{font-style:normal} +strong strong{font-weight:400} +.keyseq{color:rgba(51,51,51,.8)} +kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap} +.keyseq kbd:first-child{margin-left:0} +.keyseq kbd:last-child{margin-right:0} +.menuseq,.menuref{color:#000} +.menuseq b:not(.caret),.menuref{font-weight:inherit} +.menuseq{word-spacing:-.02em} +.menuseq b.caret{font-size:1.25em;line-height:.8} +.menuseq i.caret{font-weight:bold;text-align:center;width:.45em} +b.button::before,b.button::after{position:relative;top:-1px;font-weight:400} +b.button::before{content:"[";padding:0 3px 0 2px} +b.button::after{content:"]";padding:0 2px 0 3px} +p a>code:hover{color:rgba(0,0,0,.9)} +#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} +#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table} +#header::after,#content::after,#footnotes::after,#footer::after{clear:both} +#content{margin-top:1.25em} +#content::before{content:none} +#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} +#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf} +#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px} +#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap} +#header .details span:first-child{margin-left:-.125em} +#header .details span.email a{color:rgba(0,0,0,.85)} +#header .details br{display:none} +#header .details br+span::before{content:"\00a0\2013\00a0"} +#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} +#header .details br+span#revremark::before{content:"\00a0|\00a0"} +#header #revnumber{text-transform:capitalize} +#header #revnumber::after{content:"\00a0"} +#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} +#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em} +#toc>ul{margin-left:.125em} +#toc ul.sectlevel0>li>a{font-style:italic} +#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} +#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} +#toc li{line-height:1.3334;margin-top:.3334em} +#toc a{text-decoration:none} +#toc a:active{text-decoration:underline} +#toctitle{color:#7a2518;font-size:1.2em} +@media screen and (min-width:768px){#toctitle{font-size:1.375em} +body.toc2{padding-left:15em;padding-right:0} +#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} +#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} +#toc.toc2>ul{font-size:.9em;margin-bottom:0} +#toc.toc2 ul ul{margin-left:0;padding-left:1em} +#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} +body.toc2.toc-right{padding-left:0;padding-right:15em} +body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}} +@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} +#toc.toc2{width:20em} +#toc.toc2 #toctitle{font-size:1.375em} +#toc.toc2>ul{font-size:.95em} +#toc.toc2 ul ul{padding-left:1.25em} +body.toc2.toc-right{padding-left:0;padding-right:20em}} +#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px} +#content #toc>:first-child{margin-top:0} +#content #toc>:last-child{margin-bottom:0} +#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em} +#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44} +#content{margin-bottom:.625em} +.sect1{padding-bottom:.625em} +@media screen and (min-width:768px){#content{margin-bottom:1.25em} +.sect1{padding-bottom:1.25em}} +.sect1:last-child{padding-bottom:0} +.sect1+.sect1{border-top:1px solid #e7e7e9} +#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} +#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} +#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} +#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} +#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} +details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} +details{margin-left:1.25rem} +details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent} +details>summary::-webkit-details-marker{display:none} +details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)} +details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)} +details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem} +.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} +table.tableblock.fit-content>caption.title{white-space:nowrap;width:0} +.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)} +.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} +.admonitionblock>table td.icon{text-align:center;width:80px} +.admonitionblock>table td.icon img{max-width:none} +.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} +.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere} +.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} +.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px} +.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px} +.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} +.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0} +.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} +.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em} +@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}} +@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}} +.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8} +.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)} +.listingblock>.content{position:relative} +.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5} +.listingblock:hover code[data-lang]::before{display:block} +.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5} +.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"} +.listingblock pre.highlightjs{padding:0} +.listingblock pre.highlightjs>code{padding:1em;border-radius:4px} +.listingblock pre.prettyprint{border-width:0} +.prettyprint{background:#f7f7f8} +pre.prettyprint .linenums{line-height:1.45;margin-left:2em} +pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0} +pre.prettyprint li code[data-lang]::before{opacity:1} +pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none} +table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none} +table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal} +table.linenotable td.code{padding-left:.75em} +table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +pre.pygments span.linenos{display:inline-block;margin-right:.75em} +.quoteblock{margin:0 1em 1.25em 1.5em;display:table} +.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em} +.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} +.quoteblock blockquote{margin:0;padding:0;border:0} +.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} +.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} +.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right} +.verseblock{margin:0 1em 1.25em} +.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} +.verseblock pre strong{font-weight:400} +.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} +.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} +.quoteblock .attribution br,.verseblock .attribution br{display:none} +.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)} +.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none} +.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0} +.quoteblock.abstract{margin:0 1em 1.25em;display:block} +.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center} +.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf} +.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0} +.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem} +.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0} +p.tableblock:last-child{margin-bottom:0} +td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere} +td.tableblock>.content>:last-child{margin-bottom:-1.25em} +table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} +table.grid-all>*>tr>*{border-width:1px} +table.grid-cols>*>tr>*{border-width:0 1px} +table.grid-rows>*>tr>*{border-width:1px 0} +table.frame-all{border-width:1px} +table.frame-ends{border-width:1px 0} +table.frame-sides{border-width:0 1px} +table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0} +table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0} +table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0} +table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0} +table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7} +th.halign-left,td.halign-left{text-align:left} +th.halign-right,td.halign-right{text-align:right} +th.halign-center,td.halign-center{text-align:center} +th.valign-top,td.valign-top{vertical-align:top} +th.valign-bottom,td.valign-bottom{vertical-align:bottom} +th.valign-middle,td.valign-middle{vertical-align:middle} +table thead th,table tfoot th{font-weight:bold} +tbody tr th{background:#f7f8f7} +tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} +p.tableblock>code:only-child{background:none;padding:0} +p.tableblock{font-size:1em} +ol{margin-left:1.75em} +ul li ol{margin-left:1.5em} +dl dd{margin-left:1.125em} +dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} +li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} +ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none} +ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em} +ul.unstyled,ol.unstyled{margin-left:0} +li>p:empty:only-child::before{content:"";display:inline-block} +ul.checklist>li>p:first-child{margin-left:-1em} +ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em} +ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em} +ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em} +ul.inline>li{margin-left:1.25em} +.unstyled dl dt{font-weight:400;font-style:normal} +ol.arabic{list-style-type:decimal} +ol.decimal{list-style-type:decimal-leading-zero} +ol.loweralpha{list-style-type:lower-alpha} +ol.upperalpha{list-style-type:upper-alpha} +ol.lowerroman{list-style-type:lower-roman} +ol.upperroman{list-style-type:upper-roman} +ol.lowergreek{list-style-type:lower-greek} +.hdlist>table,.colist>table{border:0;background:none} +.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} +td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em} +td.hdlist1{font-weight:bold;padding-bottom:1.25em} +td.hdlist2{word-wrap:anywhere} +.literalblock+.colist,.listingblock+.colist{margin-top:-.5em} +.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top} +.colist td:not([class]):first-child img{max-width:none} +.colist td:not([class]):last-child{padding:.25em 0} +.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd} +.imageblock.left{margin:.25em .625em 1.25em 0} +.imageblock.right{margin:.25em 0 1.25em .625em} +.imageblock>.title{margin-bottom:0} +.imageblock.thumb,.imageblock.th{border-width:6px} +.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} +.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} +.image.left{margin-right:.625em} +.image.right{margin-left:.625em} +a.image{text-decoration:none;display:inline-block} +a.image object{pointer-events:none} +sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} +sup.footnote a,sup.footnoteref a{text-decoration:none} +sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline} +#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} +#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0} +#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em} +#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em} +#footnotes .footnote:last-of-type{margin-bottom:0} +#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} +div.unbreakable{page-break-inside:avoid} +.big{font-size:larger} +.small{font-size:smaller} +.underline{text-decoration:underline} +.overline{text-decoration:overline} +.line-through{text-decoration:line-through} +.aqua{color:#00bfbf} +.aqua-background{background:#00fafa} +.black{color:#000} +.black-background{background:#000} +.blue{color:#0000bf} +.blue-background{background:#0000fa} +.fuchsia{color:#bf00bf} +.fuchsia-background{background:#fa00fa} +.gray{color:#606060} +.gray-background{background:#7d7d7d} +.green{color:#006000} +.green-background{background:#007d00} +.lime{color:#00bf00} +.lime-background{background:#00fa00} +.maroon{color:#600000} +.maroon-background{background:#7d0000} +.navy{color:#000060} +.navy-background{background:#00007d} +.olive{color:#606000} +.olive-background{background:#7d7d00} +.purple{color:#600060} +.purple-background{background:#7d007d} +.red{color:#bf0000} +.red-background{background:#fa0000} +.silver{color:#909090} +.silver-background{background:#bcbcbc} +.teal{color:#006060} +.teal-background{background:#007d7d} +.white{color:#bfbfbf} +.white-background{background:#fafafa} +.yellow{color:#bfbf00} +.yellow-background{background:#fafa00} +span.icon>.fa{cursor:default} +a span.icon>.fa{cursor:inherit} +.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} +.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c} +.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} +.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900} +.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400} +.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000} +.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} +.conum[data-value] *{color:#fff!important} +.conum[data-value]+b{display:none} +.conum[data-value]::after{content:attr(data-value)} +pre .conum[data-value]{position:relative;top:-.125em} +b.conum *{color:inherit!important} +.conum:not([data-value]):empty{display:none} +dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} +h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em} +p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} +p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem} +p{margin-bottom:1.25rem} +.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} +.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc} +.print-only{display:none!important} +@page{margin:1.25cm .75cm} +@media print{*{box-shadow:none!important;text-shadow:none!important} +html{font-size:80%} +a{color:inherit!important;text-decoration:underline!important} +a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} +a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} +abbr[title]{border-bottom:1px dotted} +abbr[title]::after{content:" (" attr(title) ")"} +pre,blockquote,tr,img,object,svg{page-break-inside:avoid} +thead{display:table-header-group} +svg{max-width:100%} +p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} +h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} +#header,#content,#footnotes,#footer{max-width:none} +#toc,.sidebarblock,.exampleblock>.content{background:none!important} +#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important} +body.book #header{text-align:center} +body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em} +body.book #header .details{border:0!important;display:block;padding:0!important} +body.book #header .details span:first-child{margin-left:0!important} +body.book #header .details br{display:block} +body.book #header .details br+span::before{content:none!important} +body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} +body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} +.listingblock code[data-lang]::before{display:block} +#footer{padding:0 .9375em} +.hide-on-print{display:none!important} +.print-only{display:block!important} +.hide-for-print{display:none!important} +.show-for-print{display:inherit!important}} +@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem} +.sect1{padding:0!important} +.sect1+.sect1{border:0} +#footer{background:none} +#footer-text{color:rgba(0,0,0,.6);font-size:.9em}} +@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}} +</style> +<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> +</head> +<body class="book toc2 toc-left"> +<div id="header"> +<h1>The NEORV32 RISC-V Processor - User Guide</h1> +<div class="details"> +<span id="author" class="author">The NEORV32 Community and Stephan Nolting</span><br> +<span id="email" class="email"><a href="mailto:stnolting@gmail.com">stnolting@gmail.com</a></span><br> +<span id="revnumber">version v1.10.8-r25-g208ad4ef</span> +</div> +<div id="toc" class="toc2"> +<div id="toctitle">Table of Contents</div> +<ul class="sectlevel1"> +<li><a href="#_software_toolchain_setup">1. Software Toolchain Setup</a></li> +<li><a href="#_general_hardware_setup">2. General Hardware Setup</a></li> +<li><a href="#_general_software_framework_setup">3. General Software Framework Setup</a> +<ul class="sectlevel2"> +<li><a href="#_modifying_the_linker_script">3.1. Modifying the Linker Script</a></li> +<li><a href="#_overriding_the_default_configuration">3.2. Overriding the Default Configuration</a></li> +</ul> +</li> +<li><a href="#_application_program_compilation">4. Application Program Compilation</a></li> +<li><a href="#_uploading_and_starting_of_a_binary_executable_image_via_uart">5. Uploading and Starting of a Binary Executable Image via UART</a></li> +<li><a href="#_installing_an_executable_directly_into_memory">6. Installing an Executable Directly Into Memory</a></li> +<li><a href="#_setup_of_a_new_application_program_project">7. Setup of a New Application Program Project</a></li> +<li><a href="#_application_specific_processor_configuration">8. Application-Specific Processor Configuration</a> +<ul class="sectlevel2"> +<li><a href="#_optimize_for_performance">8.1. Optimize for Performance</a></li> +<li><a href="#_optimize_for_size">8.2. Optimize for Size</a></li> +<li><a href="#_optimize_for_clock_speed">8.3. Optimize for Clock Speed</a></li> +<li><a href="#_optimize_for_energy">8.4. Optimize for Energy</a></li> +</ul> +</li> +<li><a href="#_adding_custom_hardware_modules">9. Adding Custom Hardware Modules</a> +<ul class="sectlevel2"> +<li><a href="#_standard_external_interfaces">9.1. Standard (<em>External</em>) Interfaces</a></li> +<li><a href="#_external_bus_interface">9.2. External Bus Interface</a></li> +<li><a href="#_custom_functions_subsystem">9.3. Custom Functions Subsystem</a></li> +<li><a href="#_custom_functions_unit">9.4. Custom Functions Unit</a></li> +<li><a href="#_comparative_summary">9.5. Comparative Summary</a></li> +</ul> +</li> +<li><a href="#_customizing_the_internal_bootloader">10. Customizing the Internal Bootloader</a> +<ul class="sectlevel2"> +<li><a href="#_auto_boot_configuration">10.1. Auto-Boot Configuration</a></li> +</ul> +</li> +<li><a href="#_programming_an_external_spi_flash_via_the_bootloader">11. Programming an External SPI Flash via the Bootloader</a> +<ul class="sectlevel2"> +<li><a href="#_programming_an_executable">11.1. Programming an Executable</a></li> +</ul> +</li> +<li><a href="#_packaging_the_processor_as_vivado_ip_block">12. Packaging the Processor as Vivado IP Block</a></li> +<li><a href="#_simulating_the_processor">13. Simulating the Processor</a> +<ul class="sectlevel2"> +<li><a href="#_testbench">13.1. Testbench</a></li> +<li><a href="#_faster_simulation_console_output">13.2. Faster Simulation Console Output</a></li> +<li><a href="#_ghdl_simulation">13.3. GHDL Simulation</a></li> +<li><a href="#_simulation_using_application_makefiles">13.4. Simulation using Application Makefiles</a> +<ul class="sectlevel3"> +<li><a href="#_hello_world">13.4.1. Hello World!</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_building_the_documentation">14. Building the Documentation</a></li> +<li><a href="#_zephyr_rtos_support">15. Zephyr RTOS Support</a></li> +<li><a href="#_freertos_support">16. FreeRTOS Support</a></li> +<li><a href="#_litex_soc_builder_support">17. LiteX SoC Builder Support</a> +<ul class="sectlevel2"> +<li><a href="#_litex_setup">17.1. LiteX Setup</a></li> +<li><a href="#_litex_simulation">17.2. LiteX Simulation</a></li> +</ul> +</li> +<li><a href="#_debugging_using_the_on_chip_debugger">18. Debugging using the On-Chip Debugger</a> +<ul class="sectlevel2"> +<li><a href="#_hardware_requirements">18.1. Hardware Requirements</a></li> +<li><a href="#_openocd">18.2. OpenOCD</a></li> +<li><a href="#_debugging_with_gdb">18.3. Debugging with GDB</a> +<ul class="sectlevel3"> +<li><a href="#_software_breakpoints">18.3.1. Software Breakpoints</a></li> +<li><a href="#_hardware_breakpoints">18.3.2. Hardware Breakpoints</a></li> +</ul> +</li> +<li><a href="#_segger_embedded_studio">18.4. Segger Embedded Studio</a></li> +</ul> +</li> +<li><a href="#_neorv32_in_verilog">19. NEORV32 in Verilog</a></li> +<li><a href="#_eclipse_ide">20. Eclipse IDE</a> +<ul class="sectlevel2"> +<li><a href="#_eclipse_prerequisites">20.1. Eclipse Prerequisites</a></li> +<li><a href="#_import_the_provided_eclipse_example_project">20.2. Import The Provided Eclipse Example Project</a></li> +<li><a href="#_setup_a_new_eclipse_project_from_scratch">20.3. Setup a new Eclipse Project from Scratch</a> +<ul class="sectlevel3"> +<li><a href="#_create_a_new_project">20.3.1. Create a new Project</a></li> +<li><a href="#_add_initial_files">20.3.2. Add Initial Files</a></li> +<li><a href="#_add_build_targets_optional">20.3.3. Add Build Targets (optional)</a></li> +<li><a href="#_configure_build_tools">20.3.4. Configure Build Tools</a></li> +<li><a href="#_adjust_default_build_configuration_optional">20.3.5. Adjust Default Build Configuration (optional)</a></li> +<li><a href="#_add_neorv32_software_framework">20.3.6. Add NEORV32 Software Framework</a></li> +<li><a href="#_setup_openocd">20.3.7. Setup OpenOCD</a></li> +<li><a href="#_setup_serial_terminal">20.3.8. Setup Serial Terminal</a></li> +</ul> +</li> +<li><a href="#_eclipse_setup_references">20.4. Eclipse Setup References</a></li> +</ul> +</li> +<li><a href="#_legal">21. Legal</a> +<ul class="sectlevel2"> +<li><a href="#_about">About</a></li> +<li><a href="#_license">License</a></li> +<li><a href="#_proprietary_notice">Proprietary Notice</a></li> +<li><a href="#_disclaimer">Disclaimer</a></li> +<li><a href="#_limitation_of_liability_for_external_links">Limitation of Liability for External Links</a></li> +<li><a href="#_citing">Citing</a></li> +<li><a href="#_acknowledgments">Acknowledgments</a></li> +</ul> +</li> +</ul> +</div> +</div> +<div id="content"> +<div id="preamble"> +<div class="sectionbody"> +<div class="imageblock text-center"> +<div class="content"> +<a class="image" href="https://github.com/stnolting/neorv32"><img src="../img/neorv32_logo.png" alt="neorv32 logo"></a> +</div> +</div> +<div class="imageblock text-center"> +<div class="content"> +<a class="image" href="https://riscv.org/"><img src="../img/riscv_logo.png" alt="riscv logo" width="350"></a> +</div> +</div> +<div class="paragraph text-center"> +<p><a href="https://github.com/stnolting/neorv32"><span class="image"><img src="https://img.shields.io/badge/GitHub-stnolting%2Fneorv32-ffbd00?style=flat-square&amp;logo=github&amp;" alt="GitHub stnolting%2Fneorv32 ffbd00?style=flat square&amp;logo=github&amp;" title="homepage"></span></a> +<a href="https://github.com/stnolting/neorv32/blob/main/LICENSE"><span class="image"><img src="https://img.shields.io/github/license/stnolting/neorv32?longCache=true&amp;style=flat-square" alt="neorv32?longCache=true&amp;style=flat square" title="license"></span></a> +<a href="https://github.com/stnolting/neorv32/releases/tag/nightly"><span class="image"><img src="https://img.shields.io/badge/data%20sheet-PDF-ffbd00?longCache=true&amp;style=flat-square&amp;logo=asciidoctor" alt="data%20sheet PDF ffbd00?longCache=true&amp;style=flat square&amp;logo=asciidoctor" title="datasheet (pdf)"></span></a> +<a href="https://stnolting.github.io/neorv32"><span class="image"><img src="https://img.shields.io/badge/-HTML-ffbd00?longCache=true&amp;style=flat-square" alt=" HTML ffbd00?longCache=true&amp;style=flat square" title="datasheet (html)"></span></a> +<a href="https://github.com/stnolting/neorv32/releases/tag/nightly"><span class="image"><img src="https://img.shields.io/badge/user%20guide-PDF-ffbd00?longCache=true&amp;style=flat-square&amp;logo=asciidoctor" alt="user%20guide PDF ffbd00?longCache=true&amp;style=flat square&amp;logo=asciidoctor" title="userguide (pdf)"></span></a> +<a href="https://stnolting.github.io/neorv32/sw/files.html"><span class="image"><img src="https://img.shields.io/badge/doxygen-HTML-ffbd00?longCache=true&amp;style=flat-square&amp;logo=Doxygen" alt="doxygen HTML ffbd00?longCache=true&amp;style=flat square&amp;logo=Doxygen" title="doxygen"></span></a><br> +<a href="https://github.com/stnolting/neorv32/releases"><span class="image"><img src="https://img.shields.io/github/v/release/stnolting/neorv32?longCache=true&amp;style=flat-square&amp;logo=GitHub" alt="neorv32?longCache=true&amp;style=flat square&amp;logo=GitHub" title="release"></span></a> +<a href="https://github.com/stnolting/neorv32/releases"><span class="image"><img src="https://img.shields.io/github/commits-since/stnolting/neorv32/latest?longCache=true&amp;style=flat-square&amp;logo=GitHub" alt="latest?longCache=true&amp;style=flat square&amp;logo=GitHub" title="release-commits"></span></a></p> +</div> +<div class="paragraph"> +<p><strong>Let&#8217;s Get It Started!</strong></p> +</div> +<div class="paragraph"> +<p>This user guide uses the NEORV32 project <em>as is</em> from the official <code>neorv32</code> repository. +To make your first NEORV32 project run, follow the guides from the upcoming sections. It is recommended to +follow these guides step by step and eventually in the presented order.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +This guide uses the minimalistic and platform/toolchain agnostic SoC <strong>test setups</strong> from +<code>rtl/test_setups</code> for illustration. You can use one of the provided test setups for +your first FPGA tests.<br> +<br> +For more sophisticated example setups have a look at the +<a href="https://github.com/stnolting/neorv32-setups">neorv32-setups</a> repository, +which provides <strong>SoC setups</strong> for various FPGAs, boards and toolchains. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Quick Links</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p><a href="#_software_toolchain_setup">Toolchain</a>, <a href="#_general_hardware_setup">hardware</a> and <a href="#_general_software_framework_setup">general software framework</a> setup</p> +</li> +<li> +<p><a href="#_application_program_compilation">compile</a> an application and <a href="#_uploading_and_starting_of_a_binary_executable_image_via_uart">upload</a> it or making it +<a href="#_installing_an_executable_directly_into_memory">persistent</a> in internal memory</p> +</li> +<li> +<p>setup a new <a href="#_setup_of_a_new_application_program_project">application project</a></p> +</li> +<li> +<p><a href="#_application_specific_processor_configuration">optimizing</a> the core for your application</p> +</li> +<li> +<p>add <a href="#_adding_custom_hardware_modules">custom hardware extensions</a> and <a href="#_customizing_the_internal_bootloader">customizing the bootloader</a></p> +</li> +<li> +<p><a href="#_programming_an_external_spi_flash_via_the_bootloader">program</a> an external SPI flash for persistent application storage</p> +</li> +<li> +<p>generate an AMD Vivado <a href="#_packaging_the_processor_as_vivado_ip_block">IP block</a></p> +</li> +<li> +<p><a href="#_simulating_the_processor">simulate</a> the processor and <a href="#_building_the_documentation">build the documentation</a></p> +</li> +<li> +<p>RTOS support for <a href="#_zephyr_rtos_support">Zephyr</a> and <a href="#_freertos_support">FreeRTOS</a></p> +</li> +<li> +<p>build SoCs using <a href="#_litex_soc_builder_support">LiteX</a></p> +</li> +<li> +<p>in-system <a href="#_debugging_using_the_on_chip_debugger">debugging</a> of the whole processor</p> +</li> +<li> +<p><a href="#_neorv32_in_verilog">NEORV32 in Verilog</a> - an all-Verilog "version" of the processor</p> +</li> +<li> +<p>use the <a href="#_eclipse_ide">Eclipse IDE</a> to develop and debug code for the NEORV32</p> +</li> +</ul> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect1"> +<h2 id="_software_toolchain_setup">1. Software Toolchain Setup</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>To compile (and debug) executables for the NEORV32 a RISC-V-compatible toolchain is required. +By default, the project&#8217;s software framework uses the GNU C Compiler RISC-V port "RISC-V GCC". +Basically, there are two options to obtain such a toolchain:</p> +</div> +<div class="olist arabic"> +<ol class="arabic"> +<li> +<p>Download and <em>build</em> the RISC-V GNU toolchain by yourself.</p> +</li> +<li> +<p>Download and <em>install</em> a <strong>prebuilt</strong> version of the toolchain.</p> +</li> +</ol> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Default GCC Prefix</div> +The default toolchain prefix for this project is <strong><code>riscv-none-elf-</code></strong> (<code>RISCV_PREFIX</code> variable). +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Toolchain Requirements</strong></p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Library/ISA Considerations</div> +Note that a toolchain build with <code>--with-arch=rv32imc</code> provides library code (like the C standard library) +compiled entirely using compressed (<code>C</code>) and <code>mul</code>/<code>div</code> instructions (<code>M</code>). Hence, this pre-compiled library +code CANNOT be executed (without emulation) on an architecture that does not support these ISA extensions. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p><strong>Building the Toolchain from Scratch</strong></p> +</div> +<div class="paragraph"> +<p>The official RISC-V GCC GitHub repository (<a href="https://github.com/riscv-collab/riscv-gnu-toolchain" class="bare">https://github.com/riscv-collab/riscv-gnu-toolchain</a>) provides instructions +for building the toolchain from scratch:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 1. Preparing GCC build for <code>rv32i</code> (minimal ISA only in this example)</div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">$ git clone https://github.com/riscv/riscv-gnu-toolchain +$ cd riscv-gnu-toolchain +$ riscv-gnu-toolchain$ ./configure --prefix=/opt/riscv --with-arch=rv32i --with-abi=ilp32 +$ riscv-gnu-toolchain$ make</code></pre> +</div> +</div> +<div class="paragraph"> +<p><strong>Downloading and Installing a Prebuilt Toolchain</strong></p> +</div> +<div class="paragraph"> +<p>Alternatively, a prebuilt toolchain can be used. Some OS package managers provide embedded RISC-V GCC toolchain. +However, I can highly recommend the toolchain provided by the X-Pack project (MIT license): +<a href="https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack" class="bare">https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack</a></p> +</div> +<div class="paragraph"> +<p><strong>Toolchain Installation</strong></p> +</div> +<div class="paragraph"> +<p>To integrate the toolchain of choice into the NEORV32 software framework, the toolchain&#8217;s binaries need +to be added to the system path (e.g. <code>PATH</code> environment variable) so they can be used by a shell. Therefore, +the absolute path to the toolchain&#8217;s <code>bin</code> folder has to be appended to the <code>PATH</code> variable:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">$ export PATH=$PATH:/opt/riscv/bin</code></pre> +</div> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">bashrc</div> +This command can be added to <code>.bashrc</code> (or similar) to automatically add the RISC-V +toolchain at every console start. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>To make sure everything works fine, navigate to an example project in the NEORV32 <code>sw/example</code> folder and +execute the following command:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">neorv32/sw/example/demo_blink_led$ make check</code></pre> +</div> +</div> +<div class="paragraph"> +<p>This will test all the tools required for generating NEORV32 executables. +Everything is working fine if "Toolchain check OK" appears at the end of the log output.</p> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect1"> +<h2 id="_general_hardware_setup">2. General Hardware Setup</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>This guide shows the basics of setting up a NEORV32 project for simulation or synthesis +<em>from scratch</em>. It uses a simple, exemplary test "SoC" setup of the processor to keep things simple at the beginning. +This simple setup is intended for a first test / evaluation of the NEORV32.</p> +</div> +<div class="paragraph"> +<p>The NEORV32 project features three minimalistic pre-configured test setups in +<a href="https://github.com/stnolting/neorv32/blob/main/rtl/test_setups"><code>rtl/test_setups</code></a>. +These test setups only implement very basic processor and CPU features and mainly differ in the actual boot configuration.</p> +</div> +<div class="imageblock text-center"> +<div class="content"> +<img src="../img/neorv32_test_setup.png" alt="neorv32 test setup"> +</div> +<div class="title">Figure 1. NEORV32 "hello world" test setup (<code>rtl/test_setups/neorv32_test_setup_bootloader.vhd</code>)</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>Create a new project with your FPGA/ASIC/simulator EDA tool of choice.</p> +</li> +<li> +<p>Add all VHDL files from the project&#8217;s <code>rtl/core</code> folder to your project. +Make sure to add all these rtl files to a new library called <code>neorv32</code>. If your toolchain does not +provide a field to enter the library name, check out the "properties" menu of the added rtl files.</p> +</li> +</ol> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Compile Order and File-List Files</div> +Some tools (like Lattice Radiant) might require a <em>manual compile order</em> of the VHDL source files to +identify the dependencies. The <code>rtl</code> folder features file-list files that list all required HDL files in +their recommended compilation order (see <a href="https://stnolting.github.io/neorv32/#_file_list_files" class="bare">https://stnolting.github.io/neorv32/#_file_list_files</a>). +</td> +</tr> +</table> +</div> +<div class="olist arabic"> +<ol class="arabic" start="3"> +<li> +<p>The <code>rtl/core/neorv32_top.vhd</code> VHDL file is the top entity of the NEORV32 processor, which can be +instantiated within the actual project. However, in this tutorial we will use one of the pre-defined +test setups from <code>rtl/test_setups</code> (see above).</p> +</li> +</ol> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +Make sure to include the <code>neorv32</code> package into your design when instantiating the processor: add +<code>library neorv32;</code> and <code>use neorv32.neorv32_package.all;</code> to your design unit. +</td> +</tr> +</table> +</div> +<div class="olist arabic"> +<ol class="arabic" start="4"> +<li> +<p>Add the pre-defined test setup of choice to the project, too, and select it as <strong>top entity</strong>.</p> +</li> +<li> +<p>The entity of the test setups provides a minimal set of configuration generics, that might have +to be adapted to match your FPGA and board:</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="title">Listing 2. Test setup entity - configuration generics</div> +<div class="content"> +<pre class="highlight"><code class="language-vhdl" data-lang="vhdl">generic ( + -- adapt these for your setup -- + CLOCK_FREQUENCY : natural := 100000000; <i class="conum" data-value="1"></i><b>(1)</b> + MEM_INT_IMEM_SIZE : natural := 16*1024; <i class="conum" data-value="2"></i><b>(2)</b> + MEM_INT_DMEM_SIZE : natural := 8*1024 <i class="conum" data-value="3"></i><b>(3)</b> +);</code></pre> +</div> +</div> +<div class="colist arabic"> +<table> +<tr> +<td><i class="conum" data-value="1"></i><b>1</b></td> +<td>Clock frequency of <code>clk_i</code> signal in Hertz</td> +</tr> +<tr> +<td><i class="conum" data-value="2"></i><b>2</b></td> +<td>Default size of internal instruction memory: 16kB</td> +</tr> +<tr> +<td><i class="conum" data-value="3"></i><b>3</b></td> +<td>Default size of internal data memory: 8kB</td> +</tr> +</table> +</div> +<div class="olist arabic"> +<ol class="arabic" start="6"> +<li> +<p>If you want to or if your FPGA does not provide sufficient resources you can modify the +<em>memory sizes</em> (<code>MEM_INT_IMEM_SIZE</code> and <code>MEM_INT_DMEM_SIZE</code>).</p> +</li> +<li> +<p>There is one generic that has to be set according to your FPGA board setup: the actual clock frequency +of the top&#8217;s clock input signal (<code>clk_i</code>). Use the <code>CLOCK_FREQUENCY</code> generic to specify your clock source&#8217;s +frequency in Hertz (Hz).</p> +</li> +</ol> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Memory Layout</div> +If you have changed the default memory configuration (<code>MEM_INT_IMEM_SIZE</code> and <code>MEM_INT_DMEM_SIZE</code> generics) +keep those new sizes in mind - these values are required for setting up the software framework in the next +section <a href="#_general_software_framework_setup">General Software Framework Setup</a>. +</td> +</tr> +</table> +</div> +<div class="olist arabic"> +<ol class="arabic" start="8"> +<li> +<p>Assign the signals of the test setup top entity to the according pins of your FPGA board. +All the signals can be found in the entity declaration of the corresponding test setup, e.g.:</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="title">Listing 3. Ports of <code>neorv32_test_setup_bootloader.vhd</code></div> +<div class="content"> +<pre class="highlight"><code class="language-vhdl" data-lang="vhdl">port ( + -- Global control -- + clk_i : in std_ulogic; -- global clock, rising edge + rstn_i : in std_ulogic; -- global reset, low-active, async + -- GPIO -- + gpio_o : out std_ulogic_vector(7 downto 0); -- parallel output + -- UART0 -- + uart0_txd_o : out std_ulogic; -- UART0 send data + uart0_rxd_i : in std_ulogic -- UART0 receive data +);</code></pre> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Signal Polarity</div> +If your FPGA board has inverse polarity for certain input/output you need to add inverters. Example: The reset signal +<code>rstn_i</code> is low-active by default; the LEDs connected to <code>gpio_o</code> are high-active by default. +</td> +</tr> +</table> +</div> +<div class="olist arabic"> +<ol class="arabic" start="9"> +<li> +<p>Attach the clock input <code>clk_i</code> to your clock source and connect the reset line <code>rstn_i</code> to a button of +your FPGA board. Check whether it is low-active or high-active - the reset signal of the processor is +<strong>low-active</strong>, so maybe you need to invert the input signal.</p> +</li> +<li> +<p>If possible, connected at least bit <code>0</code> of the GPIO output port <code>gpio_o</code> to a LED (see "Signal Polarity" note above).</p> +</li> +<li> +<p>If your are using a UART-based test setup connect the UART communication signals <code>uart0_txd_o</code> and <code>uart0_rxd_i</code> +to the host interface (e.g. a USB-UART converter).</p> +</li> +<li> +<p>If you are using the on-chip debugger setup connect the processor&#8217;s JTAG signal <code>jtag_*</code> to a suitable JTAG adapter.</p> +</li> +<li> +<p>Perform the project HDL compilation (synthesis, mapping, placement, routing, bitstream generation).</p> +</li> +<li> +<p>Program the generated bitstream into your FPGA and press the button connected to the reset signal.</p> +</li> +<li> +<p>Done! The LED(s) connected to <code>gpio_o</code> should be flashing now.</p> +</li> +</ol> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect1"> +<h2 id="_general_software_framework_setup">3. General Software Framework Setup</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>To allow executables to be <em>actually executed</em> on the NEORV32 Processor the configuration of the software framework +has to be aware to the hardware configuration. This guide focuses on the <strong>memory configuration</strong>. To enable +certain CPU ISA features refer to the <a href="#_enabling_risc_v_cpu_extensions">[_enabling_risc_v_cpu_extensions]</a> section.</p> +</div> +<div class="paragraph"> +<p>This guide shows how to configure the linker script for a given hardware memory configuration. More information regarding the +linker script itself can be found in the according section of the data sheet: <a href="https://stnolting.github.io/neorv32/#_linker_script" class="bare">https://stnolting.github.io/neorv32/#_linker_script</a></p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +If you have <strong>not</strong> changed the <em>default</em> memory configuration in section <a href="#_general_hardware_setup">General Hardware Setup</a> +you are already done and you can skip the rest of this section. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +Always keep the processor&#8217;s <a href="https://stnolting.github.io/neorv32/#_address_space">Address Space</a> layout in mind +when modifying the linker script +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>There are two options to modify the default memory configuration of the linker script:</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p><a href="#_modifying_the_linker_script">Modifying the Linker Script</a></p> +</li> +<li> +<p><a href="#_overriding_the_default_configuration">Overriding the Default Configuration</a> (recommended!)</p> +</li> +</ol> +</div> +<div class="sect2"> +<h3 id="_modifying_the_linker_script">3.1. Modifying the Linker Script</h3> +<div class="paragraph"> +<p>This will modify the linker script <em>itself</em>.</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>Open the NEORV32 linker script <code>sw/common/neorv32.ld</code> with a text editor. Right at the +beginning of this script you will find the <code> NEORV32 memory configuration </code> configuration section:</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="title">Listing 4. Cut-out of the linker script <code>neorv32.ld</code></div> +<div class="content"> +<pre class="highlight"><code>/* Default rom/ram (IMEM/DMEM) sizes */ +__neorv32_rom_size = DEFINED(__neorv32_rom_size) ? __neorv32_rom_size : 2048M; <i class="conum" data-value="1"></i><b>(1)</b> +__neorv32_ram_size = DEFINED(__neorv32_ram_size) ? __neorv32_ram_size : 8K; <i class="conum" data-value="2"></i><b>(2)</b> + +/* Default HEAP size (= 0; no heap at all) */ +__neorv32_heap_size = DEFINED(__neorv32_heap_size) ? __neorv32_heap_size : 0; <i class="conum" data-value="3"></i><b>(3)</b> + +/* Default section base addresses - do not change this unless the hardware-defined address space layout is changed! */ +__neorv32_rom_base = DEFINED(__neorv32_rom_base) ? __neorv32_rom_base : 0x00000000; /* = VHDL package's "ispace_base_c" */ <i class="conum" data-value="4"></i><b>(4)</b> +__neorv32_ram_base = DEFINED(__neorv32_ram_base) ? __neorv32_ram_base : 0x80000000; /* = VHDL package's "dspace_base_c" */ <i class="conum" data-value="5"></i><b>(5)</b></code></pre> +</div> +</div> +<div class="colist arabic"> +<table> +<tr> +<td><i class="conum" data-value="1"></i><b>1</b></td> +<td>Default (max) size of the instruction memory address space (right-most value) (internal/external IMEM): 2048MB</td> +</tr> +<tr> +<td><i class="conum" data-value="2"></i><b>2</b></td> +<td>Default size of the data memory address space (right-most value) (internal/external DMEM): 8kB</td> +</tr> +<tr> +<td><i class="conum" data-value="3"></i><b>3</b></td> +<td>Default size of the HEAP (right-most value): 0kB</td> +</tr> +<tr> +<td><i class="conum" data-value="4"></i><b>4</b></td> +<td>Default base address of the instruction memory address space (right-most value): <code>0x00000000</code></td> +</tr> +<tr> +<td><i class="conum" data-value="5"></i><b>5</b></td> +<td>Default base address of the data memory address space (right-most value): <code>0x80000000</code></td> +</tr> +</table> +</div> +<div class="olist arabic"> +<ol class="arabic" start="2"> +<li> +<p>Only the the <code>neorv32_ram_size</code> variable needs to modified! If you have changed the default DMEM (<em>MEM_INT_DMEM_SIZE</em> generic) +size then change the right-most parameter (here: <code>8kB</code>) so it is equal to your DMEM hardware configuration. The <code>neorv32_rom_size</code> +does not need to be modified even if you have changed the default IMEM size. +For more information see <a href="https://stnolting.github.io/neorv32/#_linker_script" class="bare">https://stnolting.github.io/neorv32/#_linker_script</a></p> +</li> +</ol> +</div> +<div class="olist arabic"> +<ol class="arabic" start="3"> +<li> +<p>Done! Save your changes and close the linker script.</p> +</li> +</ol> +</div> +</div> +<div class="sect2"> +<h3 id="_overriding_the_default_configuration">3.2. Overriding the Default Configuration</h3> +<div class="paragraph"> +<p>This will not change the default linker script at all. Hence, <strong>this approach is recommended</strong> as it allows a +per-project memory configuration without changing the code base.</p> +</div> +<div class="paragraph"> +<p>The RAM and ROM sizes from <a href="#_modifying_the_linker_script">Modifying the Linker Script</a> (as well as the according base addresses) can also be modified +by overriding the default values when invoking <code>make</code>. Therefore, the command needs to pass the according +values to the linker using the makefile&#8217;s <code>USER_FLAGS</code> variable.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +See section "Application Makefile" of the data sheet for more information regarding the default makefile variables: +<a href="https://stnolting.github.io/neorv32/#_application_makefile" class="bare">https://stnolting.github.io/neorv32/#_application_makefile</a> +</td> +</tr> +</table> +</div> +<div class="listingblock"> +<div class="title">Listing 5. Example: override default RAM (DMEM) and ROM (IMEM) size while invoking make</div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">$ make USER_FLAGS+="-Wl,--defsym,__neorv32_ram_size=16k -Wl,--defsym,__neorv32_rom_size=32k" clean_all exe</code></pre> +</div> +</div> +<div class="paragraph"> +<p>The <code>-Wl</code> passes the following command/flag to the linker while <code>--defsym</code> defines a symbol for the linker. +Hence, the default linker script section sizes are overridden. In this example the RAM size (=DMEM) is set to +16kB and the ROM size (=IMEM) is set to 32kB.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +When using this approach the customized attributes have to be specified every time the makefile is invoked! +You can put the RAM/ROM override commands into the project&#8217;s local makefile or define a simple shell script that defines +all the setup-related parameters (memory sizes, RISC-V ISA extensions, optimization goal, further tuning flags, etc.). +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_application_program_compilation">4. Application Program Compilation</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>This guide shows how to compile an example C-code application into a NEORV32 executable that +can be uploaded via the bootloader or the on-chip debugger.</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>Open a terminal console and navigate to one of the project&#8217;s example programs. For instance, navigate to the +simple <code>sw/example_demo_blink_led</code> example program. This program uses the NEORV32 GPIO module to display +an 8-bit counter on the lowest eight bit of the <code>gpio_o</code> output port.</p> +</li> +<li> +<p>To compile the project and generate an executable simply execute:</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">neorv32/sw/example/demo_blink_led$ make clean_all exe</code></pre> +</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="3"> +<li> +<p>The <code>clean_all</code> target is used (instead of just <code>clean</code>) to ensure everything is re-build.</p> +</li> +<li> +<p>The <code>exe</code> target will compile and link the application sources together with all the included libraries. +At the end an ELF file (<code>main.elf</code>) is generated. The <em>NEORV32 image generator</em> (in <code>sw/image_gen</code>) +takes this file and creates the final executable (<code>neorv32_exe.bin</code>). The makefile will show the resulting +memory utilization and the executable size:</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">neorv32/sw/example/demo_blink_led$ make clean_all exe +Memory utilization: + text data bss dec hex filename + 1004 0 0 1004 3ec main.elf +Compiling ../../../sw/image_gen/image_gen +Executable (neorv32_exe.bin) size in bytes: +1016</code></pre> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Build Artifacts</div> +All <em>intermediate</em> build artifacts (like object files and binaries) will be places into a (new) project-local +folder named <code>build</code>. The <em>resulting</em> build artifacts (like executable, the main ELF and all memory +initialization/image files) will be placed in the root project folder. +</td> +</tr> +</table> +</div> +<div class="olist arabic"> +<ol class="arabic" start="5"> +<li> +<p>That&#8217;s it. The <code>exe</code> target has created the actual executable <code>neorv32_exe.bin</code> in the current folder +that is ready to be uploaded to the processor using the build-in bootloader. Alternatively, the ELF file can +be uploaded using the on-chip debugger.</p> +</li> +</ol> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect1"> +<h2 id="_uploading_and_starting_of_a_binary_executable_image_via_uart">5. Uploading and Starting of a Binary Executable Image via UART</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Follow this guide to use the bootloader to upload an executable via UART.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +This concept uses the default "Indirect Boot" scenario that uses the bootloader to upload new executables. +See datasheet section <a href="https://stnolting.github.io/neorv32/#_indirect_boot">Indirect Boot</a> for more information. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +If your FPGA board does not provide such an interface - don&#8217;t worry! +Section <a href="#_installing_an_executable_directly_into_memory">Installing an Executable Directly Into Memory</a> shows how to +run custom programs on your FPGA setup without having a UART. +</td> +</tr> +</table> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>Connect the primary UART (UART0) interface of your FPGA board to a serial port of your host computer.</p> +</li> +<li> +<p>Start a terminal program. In this tutorial, I am using TeraTerm for Windows. You can download it for free +from <a href="https://ttssh2.osdn.jp/index.html.en" class="bare">https://ttssh2.osdn.jp/index.html.en</a> . On Linux you could use <code>cutecom</code> (recommended) or <code>GTKTerm</code>, +which you can get here <a href="https://github.com/Jeija/gtkterm.git" class="bare">https://github.com/Jeija/gtkterm.git</a> (or install via your package manager).</p> +</li> +</ol> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<em>Any</em> terminal program that can connect to a serial port should work. However, make sure the program +can transfer data in <em>raw</em> byte mode without any protocol overhead around it. Some terminal programs struggle with +transmitting files larger than 4kB (see <a href="https://github.com/stnolting/neorv32/pull/215" class="bare">https://github.com/stnolting/neorv32/pull/215</a>). Try a different program +if uploading a binary does not work (terminal stall). +</td> +</tr> +</table> +</div> +<div class="olist arabic"> +<ol class="arabic" start="3"> +<li> +<p>Open a connection to the the serial port your UART is connected to. Configure the terminal setting according to the +following parameters:</p> +<div class="ulist"> +<ul> +<li> +<p>19200 Baud</p> +</li> +<li> +<p>8 data bits</p> +</li> +<li> +<p>1 stop bit</p> +</li> +<li> +<p>no parity bits</p> +</li> +<li> +<p><em>no</em> transmission/flow control protocol</p> +</li> +<li> +<p>newline on <code>\r\n</code> (carriage return <strong>and</strong> line feed)</p> +</li> +</ul> +</div> +</li> +</ol> +</div> +<div class="olist arabic"> +<ol class="arabic" start="4"> +<li> +<p>Also make sure that single chars are send from your computer <em>without</em> any consecutive "new line" or "carriage +return" commands. This is highly dependent on your terminal application of choice, TeraTerm only +sends the raw chars by default. In <code>cutecom</code>, change <code>LF</code> to <code>None</code> in the drop-down menu +next to the input text box.</p> +</li> +<li> +<p>Press the NEORV32 reset button to restart the bootloader. The status LED starts blinking and the +bootloader intro screen appears in your console. Hurry up and press any key (hit space!) to abort the +automatic boot sequence and to start the actual bootloader user interface console.</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="title">Listing 6. Bootloader console; aborted auto-boot sequence</div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">&lt;&lt; NEORV32 Bootloader &gt;&gt; + +BLDV: Mar 7 2023 +HWV: 0x01080107 +CID: 0x00000000 +CLK: 0x05f5e100 +MISA: 0x40901106 +XISA: 0xc0000fab +SOC: 0xffff402f +IMEM: 0x00008000 +DMEM: 0x00002000 + +Autoboot in 10s. Press any key to abort. +Aborted. + +Available CMDs: + h: Help + r: Restart + u: Upload + s: Store to flash + l: Load from flash + x: Boot from flash (XIP) + e: Execute +CMD:&gt;</code></pre> +</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="6"> +<li> +<p>Execute the "Upload" command by typing <code>u</code>. Now the bootloader is waiting for a binary executable to be send.</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">CMD:&gt; u +Awaiting neorv32_exe.bin...</code></pre> +</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="7"> +<li> +<p>Use the "send file" option of your terminal program to send a NEORV32 executable (<code>neorv32_exe.bin</code>).</p> +</li> +<li> +<p>Again, make sure to transmit the executable in raw binary mode (no transfer protocol). +When using TeraTerm, select the "binary" option in the send file dialog.</p> +</li> +<li> +<p>If everything went fine, OK will appear in your terminal:</p> +</li> +</ol> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +Make sure to upload the NEORV32 executable <code>neorv32_exe.bin</code>. Uploading any other file (like <code>main.bin</code>) +will cause an <code>ERR_EXE</code> bootloader error (see <a href="https://stnolting.github.io/neorv32/#_bootloader_error_codes" class="bare">https://stnolting.github.io/neorv32/#_bootloader_error_codes</a>). +</td> +</tr> +</table> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">CMD:&gt; u +Awaiting neorv32_exe.bin... OK</code></pre> +</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="10"> +<li> +<p>The executable is now in the instruction memory of the processor. To execute the program right +now run the "Execute" command by typing <code>e</code>:</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">CMD:&gt; u +Awaiting neorv32_exe.bin... OK +CMD:&gt; e +Booting... +Blinking LED demo program</code></pre> +</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="11"> +<li> +<p>If everything went fine, you should see the LEDs blinking.</p> +</li> +</ol> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +The bootloader will print error codes if something went wrong. +See section <a href="https://stnolting.github.io/neorv32/#_bootloader">Bootloader</a> of the NEORV32 datasheet for more information. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +See section <a href="#_programming_an_external_spi_flash_via_the_bootloader">Programming an External SPI Flash via the Bootloader</a> to learn how to use an external SPI +flash for nonvolatile program storage. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +Executables can also be uploaded via the <strong>on-chip debugger</strong>. +See section <a href="#_debugging_with_gdb">Debugging with GDB</a> for more information. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect1"> +<h2 id="_installing_an_executable_directly_into_memory">6. Installing an Executable Directly Into Memory</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>If you do not want to use the bootloader (or the on-chip debugger) for executable upload or if your setup does not provide +a serial interface for that, you can also directly install an application into embedded memory.</p> +</div> +<div class="paragraph"> +<p>This concept uses the "Direct Boot" scenario that implements the processor-internal IMEM as ROM, which is +pre-initialized with the application&#8217;s executable during synthesis. Hence, it provides <em>non-volatile</em> storage of the +executable inside the processor. This storage cannot be altered during runtime and any source code modification of +the application requires to re-program the FPGA via the bitstream.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +See datasheet section <a href="https://stnolting.github.io/neorv32/#_direct_boot">Direct Boot</a> for more information. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>Using the IMEM as ROM:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>for this boot concept the bootloader is no longer required</p> +</li> +<li> +<p>this concept only works for the internal IMEM (but can be extended to work with external memories coupled via the processor&#8217;s bus interface)</p> +</li> +<li> +<p>make sure that the memory components (like block RAM) the IMEM is mapped to support an initialization via the bitstream</p> +</li> +</ul> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>At first, make sure your processor setup actually implements the internal IMEM: the <code>MEM_INT_IMEM_EN</code> generics has to be set to <code>true</code>:</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="title">Listing 7. Processor top entity configuration - enable internal IMEM</div> +<div class="content"> +<pre class="highlight"><code class="language-vhdl" data-lang="vhdl"> -- Internal Instruction memory -- + MEM_INT_IMEM_EN =&gt; true, -- implement processor-internal instruction memory</code></pre> +</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="2"> +<li> +<p>For this setup we do not want the bootloader to be implemented at all. Disable implementation of the bootloader by setting the +<code>INT_BOOTLOADER_EN</code> generic to <code>false</code>. This will also modify the processor-internal IMEM so it is initialized with the executable during synthesis.</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="title">Listing 8. Processor top entity configuration - disable internal bootloader</div> +<div class="content"> +<pre class="highlight"><code class="language-vhdl" data-lang="vhdl"> -- General -- + INT_BOOTLOADER_EN =&gt; false, -- boot configuration: false = boot from int/ext (I)MEM</code></pre> +</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="3"> +<li> +<p>To generate an "initialization image" for the IMEM that contains the actual application, run the <code>install</code> target when compiling your application:</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">neorv32/sw/example/demo_blink_led$ make clean_all install +Memory utilization: + text data bss dec hex filename + 1004 0 0 1004 3ec main.elf +Compiling ../../../sw/image_gen/image_gen +Executable (neorv32_exe.bin) size in bytes: +1016 +Installing application image to ../../../rtl/core/neorv32_application_image.vhd</code></pre> +</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="4"> +<li> +<p>The <code>install</code> target has compiled all the application sources but instead of creating an executable (<code>neorv32_exe.bit</code>) that can be uploaded via the +bootloader, it has created a VHDL memory initialization image <code>core/neorv32_application_image.vhd</code>.</p> +</li> +<li> +<p>This VHDL file is automatically copied to the core&#8217;s rtl folder (<code>rtl/core</code>) so it will be included for the next synthesis.</p> +</li> +<li> +<p>Perform a new synthesis. The IMEM will be build as pre-initialized ROM (inferring embedded memories if possible).</p> +</li> +<li> +<p>Upload your bitstream. Your application code now resides unchangeable in the processor&#8217;s IMEM and is directly executed after reset.</p> +</li> +</ol> +</div> +<div class="paragraph"> +<p>The synthesis tool / simulator will print asserts to inform about the (IMEM) memory / boot configuration:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code>NEORV32 PROCESSOR CONFIG NOTE: Boot configuration: Direct boot from memory (processor-internal IMEM). +NEORV32 PROCESSOR CONFIG NOTE: Implementing processor-internal IMEM as ROM (1016 bytes), pre-initialized with application.</code></pre> +</div> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect1"> +<h2 id="_setup_of_a_new_application_program_project">7. Setup of a New Application Program Project</h2> +<div class="sectionbody"> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>The easiest way of creating a <em>new</em> software application project is to copy an <em>existing</em> one. This will keep all +file dependencies. For example you can copy <code>sw/example/demo_blink_led</code> to <code>sw/example/flux_capacitor</code>.</p> +</li> +<li> +<p>If you want to place you application somewhere outside <code>sw/example</code> you need to adapt the application&#8217;s makefile. +In the makefile you will find a variable that keeps the relative or absolute path to the NEORV32 repository home +folder. Just modify this variable according to your new project&#8217;s home location:</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-makefile" data-lang="makefile"># Relative or absolute path to the NEORV32 home folder (use default if not set by user) +NEORV32_HOME ?= ../../..</code></pre> +</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="3"> +<li> +<p>If your project contains additional source files outside of the project folder, you can add them to +the <code>APP_SRC</code> variable:</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-makefile" data-lang="makefile"># User's application sources (add additional files here) +APP_SRC = $(wildcard *.c) ../somewhere/some_file.c</code></pre> +</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="4"> +<li> +<p>You also can add a folder containing your application&#8217;s include files to the +<code>APP_INC</code> variable (do not forget the <code>-I</code> prefix):</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-makefile" data-lang="makefile"># User's application include folders (don't forget the '-I' before each entry) +APP_INC = -I . -I ../somewhere/include_stuff_folder</code></pre> +</div> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect1"> +<h2 id="_application_specific_processor_configuration">8. Application-Specific Processor Configuration</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The processor&#8217;s configuration options, which are mainly defined via the top entity VHDL generics, allow +to tailor the entire SoC according to the application-specific requirements. Note that this chapter does not focus on optional +<em>SoC features</em> like IO/peripheral modules - it rather gives ideas on how to optimize for <em>overall goals</em> +like performance and area.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +Please keep in mind that optimizing the design in one direction (like performance) will also effect other potential +optimization goals (like area and energy). +</td> +</tr> +</table> +</div> +<div class="sect2"> +<h3 id="_optimize_for_performance">8.1. Optimize for Performance</h3> +<div class="paragraph"> +<p>The following points show some concepts to optimize the processor for performance regardless of the costs +(i.e. increasing area and energy requirements):</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Enable all performance-related RISC-V CPU extensions that implement dedicated hardware accelerators instead +of emulating operations entirely in software: <code>M</code>, <code>C</code>, <code>Zfinx</code></p> +</li> +<li> +<p>Enable mapping of compleX CPU operations to dedicated hardware: <code>FAST_MUL_EN &#8658; true</code> to use DSP slices for +multiplications, <code>FAST_SHIFT_EN &#8658; true</code> use a fast barrel shifter for shift operations.</p> +</li> +<li> +<p>Implement the instruction cache: <code>ICACHE_EN &#8658; true</code></p> +</li> +<li> +<p>Use as many <em>internal</em> memory as possible to reduce memory access latency: <code>MEM_INT_IMEM_EN &#8658; true</code> and +<code>MEM_INT_DMEM_EN &#8658; true</code>, maximize <code>MEM_INT_IMEM_SIZE</code> and <code>MEM_INT_DMEM_SIZE</code></p> +</li> +<li> +<p><em>To be continued&#8230;&#8203;</em></p> +</li> +</ul> +</div> +</div> +<div class="sect2"> +<h3 id="_optimize_for_size">8.2. Optimize for Size</h3> +<div class="paragraph"> +<p>The NEORV32 is a size-optimized processor system that is intended to fit into tiny niches within large SoC +designs or to be used a customized microcontroller in really tiny / low-power FPGAs (like Lattice iCE40). +Here are some ideas how to make the processor even smaller while maintaining it&#8217;s <em>general purpose system</em> +concept and maximum RISC-V compatibility.</p> +</div> +<div class="paragraph"> +<p><strong>SoC</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p>This is obvious, but exclude all unused optional IO/peripheral modules from synthesis via the processor +configuration generics.</p> +</li> +<li> +<p>If an IO module provides an option to configure the number of "channels", constrain this number to the +actually required value (e.g. the PWM module <code>IO_PWM_NUM_CH</code> or the external interrupt controller <code>XIRQ_NUM_CH</code>).</p> +</li> +<li> +<p>Disable the instruction cache (<code>ICACHE_EN &#8658; false</code>) if the design only uses processor-internal IMEM +and DMEM memories.</p> +</li> +<li> +<p><em>To be continued&#8230;&#8203;</em></p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><strong>CPU</strong></p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Use the <em>embedded</em> RISC-V CPU architecture extension (<code>CPU_EXTENSION_RISCV_E</code>) to reduce block RAM utilization.</p> +</li> +<li> +<p>The compressed instructions extension (<code>CPU_EXTENSION_RISCV_C</code>) requires additional logic for the decoder but +also reduces program code size by approximately 30%.</p> +</li> +<li> +<p>If not explicitly used/required, exclude the CPU standard counters <code>[m]instret[h]</code> +(number of instruction) and <code>[m]cycle[h]</code> (number of cycles) from synthesis by disabling the <code>Zicntr</code> ISA extension +(note, this is not RISC-V compliant).</p> +</li> +<li> +<p>Map CPU shift operations to a small and iterative shifter unit (<code>FAST_SHIFT_EN &#8658; false</code>).</p> +</li> +<li> +<p>If you have unused DSP block available, you can map multiplication operations to those slices instead of +using LUTs to implement the multiplier (<code>FAST_MUL_EN &#8658; true</code>).</p> +</li> +<li> +<p>If there is no need to execute division in hardware, use the <code>Zmmul</code> extension instead of the full-scale +<code>M</code> extension.</p> +</li> +<li> +<p>Disable CPU extension that are not explicitly used.</p> +</li> +<li> +<p><em>To be continued&#8230;&#8203;</em></p> +</li> +</ul> +</div> +</div> +<div class="sect2"> +<h3 id="_optimize_for_clock_speed">8.3. Optimize for Clock Speed</h3> +<div class="paragraph"> +<p>The NEORV32 Processor and CPU are designed to provide minimal logic between register stages to keep the +critical path as short as possible. When enabling additional extension or modules the impact on the existing +logic is also kept at a minimum to prevent timing degrading. If there is a major impact on existing +logic (example: many physical memory protection address configuration registers) the VHDL code automatically +adds additional register stages to maintain critical path length. Obviously, this increases operation latency.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +Enable the "ASIC style" / full-reset register file option (<code>REGFILE_HW_RST</code>) to obtain maximum clock speed for +the CPU (at the cost of an increased hardware footprint). +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>In order to optimize for a minimal critical path (= maximum clock speed) the following points should be considered:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Complex CPU extensions (in terms of hardware requirements) should be avoided (examples: floating-point unit, physical memory protection).</p> +</li> +<li> +<p>Large carry chains (&gt;32-bit) should be avoided (i.e. constrain the HPM counter sizes via <code>HPM_CNT_WIDTH</code>).</p> +</li> +<li> +<p>If the target FPGA provides sufficient DSP resources, CPU multiplication operations can be mapped to DSP slices (<code>FAST_MUL_EN &#8658; true</code>) +reducing LUT usage and critical path impact while also increasing overall performance.</p> +</li> +<li> +<p>Use the synchronous (registered) RX path configuration of the external bus interface (<code>XBUS_ASYNC_RX &#8658; false</code>).</p> +</li> +<li> +<p><em>To be continued&#8230;&#8203;</em></p> +</li> +</ul> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +The short and fixed-length critical path allows to integrate the core into existing clock domains. +So no clock domain-crossing and no sub-clock generation is required. However, for very high clock +frequencies (this is technology / platform dependent) clock domain crossing becomes crucial for chip-internal +connections. +</td> +</tr> +</table> +</div> +</div> +<div class="sect2"> +<h3 id="_optimize_for_energy">8.4. Optimize for Energy</h3> +<div class="paragraph"> +<p>There are no <em>dedicated</em> configuration options to optimize the processor for energy (minimal consumption; +energy/instruction ratio) yet. However, a reduced processor area (<a href="#_optimize_for_size">Optimize for Size</a>) will also reduce +static energy consumption.</p> +</div> +<div class="paragraph"> +<p>To optimize your setup for low-power applications, you can make use of the CPU sleep mode (<code>wfi</code> instruction). +Put the CPU to sleep mode whenever possible. If the clock gating feature is enabled (<code>CLOCK_GATING_EN</code>) the entire +CPU complex will be disconnected from the clock tree while in sleep mode.</p> +</div> +<div class="paragraph"> +<p>Disable all processor modules that are not actually used (exclude them +from synthesis if they will be <em>never</em> used; disable a module via it&#8217;s control register if the module is not +<em>currently</em> used).</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Processor-internal clock generator shutdown</div> +If <em>no</em> IO/peripheral module is currently enabled, the processor&#8217;s internal clock generator circuit will be +shut down reducing switching activity and thus, dynamic energy consumption. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_adding_custom_hardware_modules">9. Adding Custom Hardware Modules</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>In resemblance to the RISC-V ISA, the NEORV32 processor was designed to ease customization and <em>extensibility</em>. +The processor provides several predefined options to add application-specific custom hardware modules and accelerators. +A <a href="#_comparative_summary">Comparative Summary</a> is given at the end of this section.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Debugging/Testing Custom Hardware Modules</div> +Custom hardware IP modules connected via the external bus interface or integrated as CFU can be debugged "in-system" using the +"bus explorer" example program (<code>sw/example_bus_explorer</code>). This program provides an interactive console (via UART0) +that allows to perform arbitrary read and write access from/to any memory-mapped register. +</td> +</tr> +</table> +</div> +<div class="sect2"> +<h3 id="_standard_external_interfaces">9.1. Standard (<em>External</em>) Interfaces</h3> +<div class="paragraph"> +<p>The processor already provides a set of standard interfaces that are intended to connect <em>chip-external</em> devices. +However, these interfaces can also be used chip-internally. The most suitable interfaces are +<a href="https://stnolting.github.io/neorv32/#_general_purpose_input_and_output_port_gpio">GPIO</a>, +<a href="https://stnolting.github.io/neorv32/#_primary_universal_asynchronous_receiver_and_transmitter_uart0">UART</a>, +<a href="https://stnolting.github.io/neorv32/#_serial_peripheral_interface_controller_spi">SPI</a> and +<a href="https://stnolting.github.io/neorv32/#_two_wire_serial_interface_controller_twi">TWI</a>.</p> +</div> +<div class="paragraph"> +<p>The SPI and especially the GPIO interfaces might be the most straightforward approaches since they +have a minimal protocol overhead. Device-specific interrupt capabilities could be added using the +<a href="https://stnolting.github.io/neorv32/#_external_interrupt_controller_xirq">External Interrupt Controller (XIRQ)</a>.</p> +</div> +<div class="paragraph"> +<p>Beyond simplicity, these interface only provide a very limited bandwidth and require more sophisticated +software handling ("bit-banging" for the GPIO). Hence, it is not recommend to use them for <em>chip-internal</em> communication.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_external_bus_interface">9.2. External Bus Interface</h3> +<div class="paragraph"> +<p>The <a href="https://stnolting.github.io/neorv32/#_processor_external_bus_interface_xbus">External Bus Interface</a> +provides the classic approach for attaching custom IP. By default, the bus interface implements the widely adopted +Wishbone interface standard. This project also includes wrappers to convert to other protocol standards like ARM&#8217;s +AXI4-Lite or Intel&#8217;s Avalon protocols. By using a full-featured bus protocol, complex SoC designs can be implemented +including several modules and even multi-core architectures. Many FPGA EDA tools provide graphical editors to build +and customize whole SoC architectures and even include pre-defined IP libraries.</p> +</div> +<div class="paragraph"> +<p>Custom hardware modules attached to the processor&#8217;s bus interface have no limitations regarding their functionality. +User-defined interfaces (like DDR memory access) can be implemented and the hardware module can operate completely +independent of the CPU.</p> +</div> +<div class="paragraph"> +<p>The bus interface uses a memory-mapped approach. All data transfers are handled by simple load/store operations since the +external bus interface is mapped into the processor&#8217;s <a href="https://stnolting.github.io/neorv32/#_address_space">address space</a>. +This allows a very simple still high-bandwidth communications. However, high bus traffic may increase access latencies.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_custom_functions_subsystem">9.3. Custom Functions Subsystem</h3> +<div class="paragraph"> +<p>The <a href="https://stnolting.github.io/neorv32/#_custom_functions_subsystem_cfs">Custom Functions Subsystem (CFS)</a> is +an "empty" template for a memory-mapped, processor-internal module.</p> +</div> +<div class="paragraph"> +<p>The basic idea of this subsystem is to provide a convenient, simple and flexible platform, where the user can +concentrate on implementing the actual design logic rather than taking care of the communication between the +CPU/software and the design logic. Note that the CFS does not have direct access to memory. All data (and control +instruction) have to be send by the CPU.</p> +</div> +<div class="paragraph"> +<p>The use-cases for the CFS include medium-scale hardware accelerators that need to be tightly-coupled to the CPU. +Potential use cases could be DSP modules like CORDIC, cryptographic accelerators or custom interfaces (like IIS).</p> +</div> +</div> +<div class="sect2"> +<h3 id="_custom_functions_unit">9.4. Custom Functions Unit</h3> +<div class="paragraph"> +<p>The <a href="https://stnolting.github.io/neorv32/#_custom_functions_unit_cfu">Custom Functions Unit (CFU)</a> is a functional +unit that is integrated right into the CPU&#8217;s pipeline. It allows to implement custom RISC-V instructions. +This extension option is intended for rather small logic that implements operations, which cannot be emulated +in pure software in an efficient way. Since the CFU has direct access to the core&#8217;s register file it can operate +with minimal data latency.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_comparative_summary">9.5. Comparative Summary</h3> +<div class="paragraph"> +<p>The following table gives a comparative summary of the most important factors when choosing one of the +chip-internal extension options:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><a href="https://stnolting.github.io/neorv32/#_custom_functions_unit_cfu">Custom Functions Unit (CFU)</a> for CPU-internal custom RISC-V instructions</p> +</li> +<li> +<p><a href="https://stnolting.github.io/neorv32/#_custom_functions_subsystem_cfs">Custom Functions Subsystem (CFS)</a> for tightly-coupled processor-internal co-processors</p> +</li> +<li> +<p><a href="https://stnolting.github.io/neorv32/#_processor_external_memory_interface_wishbone">External Bus Interface (WISHBONE)</a> for processor-external memory-mapped modules</p> +</li> +</ul> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 1. Comparison of On-Chip Extension Options</caption> +<colgroup> +<col style="width: 25%;"> +<col style="width: 25%;"> +<col style="width: 25%;"> +<col style="width: 25%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"></th> +<th class="tableblock halign-center valign-top">Custom Functions Unit (CFU)</th> +<th class="tableblock halign-center valign-top">Custom Functions Subsystem (CFS)</th> +<th class="tableblock halign-center valign-top">External Bus Interface</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>RTL location</strong></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">CPU-internal</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">processor-internal</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">processor-external</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>HW complexity/size</strong></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">small</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">medium</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">large</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CPU-independent operation</strong></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">no</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">yes</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">yes</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CPU interface</strong></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">register file access</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">memory-mapped</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">memory-mapped</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Low-level access mechanism</strong></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">custom instructions</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">load/store</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">load/store</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Access latency</strong></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">minimal</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">low</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">medium to high</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>External IO interfaces</strong></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">not supported</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">yes, but limited</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">yes, user-defined</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Exception capability</strong></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">yes</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">no</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">no</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Interrupt capability</strong></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">no</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">yes</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">user-defined</p></td> +</tr> +</tbody> +</table> +<div style="page-break-after: always;"></div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_customizing_the_internal_bootloader">10. Customizing the Internal Bootloader</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The NEORV32 bootloader provides several options to configure and customize it for a certain application setup. +This configuration is done by passing <em>defines</em> when compiling the bootloader. Of course you can also +modify to bootloader source code to provide a setup that perfectly fits your needs.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +Each time the bootloader sources are modified, the bootloader has to be re-compiled (and re-installed to the +bootloader ROM) and the processor has to be re-synthesized. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +Keep in mind that the maximum size for the bootloader is limited to 8kB and it should be compiled using the +minimal base &amp; privileged ISA <code>rv32e_zicsr_zifencei</code> only to ensure it can work with any actual CPU configuration. +</td> +</tr> +</table> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 2. Bootloader configuration parameters</caption> +<colgroup> +<col style="width: 18.1818%;"> +<col style="width: 9.0909%;"> +<col style="width: 18.1818%;"> +<col style="width: 54.5455%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Parameter</th> +<th class="tableblock halign-center valign-top">Default</th> +<th class="tableblock halign-center valign-top">Legal values</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock">Memory layout</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>EXE_BASE_ADDR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x00000000</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>any</em></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Base address / boot address for the executable (see section "Address Space" in the NEORV32 data sheet)</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock">Serial console interface</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>UART_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>1</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code>, <code>1</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set to <code>0</code> to disable UART0 (no serial console at all)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>UART_BAUD</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>19200</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>any</em></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Baud rate of UART0</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>UART_HW_HANDSHAKE_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code>, <code>1</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set to <code>1</code> to enable UART0 hardware flow control</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock">Status LED</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>STATUS_LED_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>1</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code>, <code>1</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Enable bootloader status led ("heart beat") at <code>GPIO</code> output port pin #<code>STATUS_LED_PIN</code> when <code>1</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>STATUS_LED_PIN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code> &#8230;&#8203; <code>31</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>GPIO</code> output pin used for the high-active status LED</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock">Auto-boot configuration</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>AUTO_BOOT_TIMEOUT</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>10</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>any</em></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Time in seconds after the auto-boot sequence starts (if there is no UART input by the user); set to 0 to disabled auto-boot sequence</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock">SPI configuration</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SPI_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>1</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code>, <code>1</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set <code>1</code> to enable the usage of the SPI module (including load/store executables from/to SPI flash options)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SPI_FLASH_CS</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code> &#8230;&#8203; <code>7</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SPI chip select output (<code>spi_csn_o</code>) for selecting flash</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SPI_FLASH_ADDR_BYTES</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>3</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>2</code>, <code>3</code>, <code>4</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SPI flash address size in number of bytes (2=16-bit, 3=24-bit, 4=32-bit)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SPI_FLASH_SECTOR_SIZE</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>65536</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>any</em></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SPI flash sector size in bytes</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SPI_FLASH_CLK_PRSC</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CLK_PRSC_8</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>CLK_PRSC_2</code> <code>CLK_PRSC_4</code> <code>CLK_PRSC_8</code> <code>CLK_PRSC_64</code> <code>CLK_PRSC_128</code> <code>CLK_PRSC_1024</code> <code>CLK_PRSC_2024</code> <code>CLK_PRSC_4096</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">SPI clock pre-scaler (dividing main processor clock)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SPI_BOOT_BASE_ADDR</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0x00400000</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><em>any</em> 32-bit value</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Defines the <em>base</em> address of the executable in external flash</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top" colspan="4"><p class="tableblock">XIP configuration</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>XIP_EN</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>0</code>, <code>1</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Set <code>1</code> to enable the XIP options</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +The XIP options re-use the "SPI configuration" options for configuring the XIP&#8217;s SPI connection. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>Each configuration parameter is implemented as C-language <code>define</code> that can be manually overridden (<em>redefined</em>) when +invoking the bootloader&#8217;s makefile. The according parameter and its new value has to be <em>appended</em> +(using <code>+=</code>) to the makefile <code>USER_FLAGS</code> variable. Make sure to use the <code>-D</code> prefix here.</p> +</div> +<div class="paragraph"> +<p>For example, to configure a UART Baud rate of 57600 and redirecting the status LED to GPIO output pin 20 +use the following command:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 9. Example: customizing, re-compiling and re-installing the bootloader</div> +<div class="content"> +<pre class="highlight"><code class="language-console" data-lang="console">sw/bootloader$ make USER_FLAGS+=-DUART_BAUD=57600 USER_FLAGS+=-DSTATUS_LED_PIN=20 clean_all bootloader</code></pre> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +The <code>clean_all</code> target ensure that all libraries are re-compiled. The <code>bootloader</code> target will automatically +compile and install the bootloader to the HDL boot ROM (updating <code>rtl/core/neorv32_bootloader_image.vhd</code>). +</td> +</tr> +</table> +</div> +<div class="sect2"> +<h3 id="_auto_boot_configuration">10.1. Auto-Boot Configuration</h3> +<div class="paragraph"> +<p>The default bootloader provides a UART-based user interface that allows to upload new executables +at any time. Optionally, the executable can also be programmed to an external SPI flash by the bootloader (see +section <a href="#_programming_an_external_spi_flash_via_the_bootloader">Programming an External SPI Flash via the Bootloader</a>).</p> +</div> +<div class="paragraph"> +<p>The bootloader also provides an <em>automatic boot sequence</em> (auto-boot) which will start copying an executable +from external SPI flash to IMEM using the default SPI configuration. By this, the default bootloader +provides a "non-volatile program storage" mechanism that automatically boots from external SPI flash +(after <code>AUTO_BOOT_TIMEOUT</code>) while still providing the option to re-program the SPI flash at any time +via the UART console.</p> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_programming_an_external_spi_flash_via_the_bootloader">11. Programming an External SPI Flash via the Bootloader</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The default processor-internal NEORV32 bootloader supports automatic booting from an external SPI flash. +This guide shows how to write an executable to the SPI flash via the bootloader so it can be automatically +fetched and executed after processor reset. For example, you can use a section of the FPGA bitstream configuration +memory to store an application executable.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Customization</div> +This section assumes the <em>default</em> configuration of the NEORV32 bootloader. +See section <a href="#_customizing_the_internal_bootloader">Customizing the Internal Bootloader</a> on how to customize the bootloader and its setting +(for example the SPI chip-select port, the SPI clock speed or the <strong>flash base address</strong> for storing the executable). +</td> +</tr> +</table> +</div> +<div class="sect2"> +<h3 id="_programming_an_executable">11.1. Programming an Executable</h3> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>At first, reset the NEORV32 processor and wait until the bootloader start screen appears in your terminal program.</p> +</li> +<li> +<p>Abort the auto boot sequence and start the user console by pressing any key.</p> +</li> +<li> +<p>Press u to upload the executable that you want to store to the external flash:</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code>CMD:&gt; u +Awaiting neorv32_exe.bin...</code></pre> +</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="4"> +<li> +<p>Send the binary in raw binary via your terminal program. When the upload is completed and "OK" +appears, press <code>s</code> to trigger the programming of the flash (do not execute the image via the <code>e</code> +command as this might corrupt the image):</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code>CMD:&gt; u +Awaiting neorv32_exe.bin... OK +CMD:&gt; s +Write 0x000013FC bytes to SPI flash @ 0x02000000? (y/n)</code></pre> +</div> +</div> +<div class="olist arabic"> +<ol class="arabic" start="5"> +<li> +<p>The bootloader shows the size of the executable and the base address inside the SPI flash where the +executable is going to be stored. A prompt appears: Type <code>y</code> to start the programming or type <code>n</code> to +abort.</p> +</li> +</ol> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +Section <a href="#_customizing_the_internal_bootloader">Customizing the Internal Bootloader</a> show the according C-language <code>define</code> that can be modified +to specify the base address of the executable inside the SPI flash. +</td> +</tr> +</table> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code>CMD:&gt; u +Awaiting neorv32_exe.bin... OK +CMD:&gt; s +Write 0x000013FC bytes to SPI flash @ 0x02000000? (y/n) y +Flashing... OK +CMD:&gt;</code></pre> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +The bootloader stores the executable in <strong>little-endian</strong> byte-order to the flash. +</td> +</tr> +</table> +</div> +<div class="olist arabic"> +<ol class="arabic" start="6"> +<li> +<p>If "OK" appears in the terminal line, the programming process was successful. Now you can use the +auto boot sequence to automatically boot your application from the flash at system start-up without +any user interaction.</p> +</li> +</ol> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_packaging_the_processor_as_vivado_ip_block">12. Packaging the Processor as Vivado IP Block</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Packaging the entire processor as IP module allows easy integration of the core (or even several cores) +into a block-design-based Vivado project. The NEORV32 repository provides a full-scale TCL script that +automatically packages the processor as Vivado IP block. For this, a specialized wrapper for the processor&#8217;s +top entity is provided (<code>rtl/system_integration/neorv32_vivado_ip.vhd</code>) that features AXI4-Lite (via XBUS) +and AXI4-Stream (via SLINK) compatible interfaces.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">General AXI Wrapper</div> +The provided AXI wrapper can also be used for custom (AXI) setups outside of Vivado and/or IP block designs. +</td> +</tr> +</table> +</div> +<div class="imageblock"> +<div class="content"> +<img src="../img/vivado_ip_soc.png" alt="vivado ip soc"> +</div> +<div class="title">Figure 2. Example Vivado SoC using the NEORV32 IP Block</div> +</div> +<div class="paragraph"> +<p>Besides packaging the HDL modules, the TCL script also generates a simplified customization GUI that allows an easy +and intuitive configuration of the processor. The rather complex VHDL configuration generics are renamed and provided +with tool tips to make it easier to understand the different configuration options.</p> +</div> +<div class="imageblock"> +<div class="content"> +<img src="../img/vivado_ip_gui.png" alt="vivado ip gui"> +</div> +<div class="title">Figure 3. NEORV32 IP Customization GUI</div> +</div> +<div class="paragraph"> +<p>The following steps show how to package the processor using the provided TCL script and how to import +the generated IP block into the Vivado IP repository.</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>Open the Vivado GUI.</p> +</li> +<li> +<p>In GUI mode select either "Tools &#8594; Run TCL Script" to directly execute the script or open the TCL +shell ("Window &#8594; Tcl Console") to manually invoke the script.</p> +</li> +<li> +<p>Use <code>cd</code> in the TCL console to navigate to the project&#8217;s <code>neorv32/rtl/system_integration</code> folder.</p> +</li> +<li> +<p>Execute <code>source neorv32_vivado_ip.tcl</code> in the TCL console.</p> +</li> +<li> +<p>A second Vivado instance will open automatically packaging the IP module. After this process is completed, +the second Vivado instance will automatically close again.</p> +</li> +<li> +<p>A new folder <code>neorv32_vivado_ip_work</code> is created in <code>neorv32/rtl/system_integration</code> which contains the IP-packaging +Vivado project.</p> +</li> +<li> +<p>Inside, the <code>packaged_ip</code> folder provides the actual IP module.</p> +</li> +<li> +<p>Open your design project in Vivado.</p> +</li> +<li> +<p>Click on "Settings" in the "Project Manager" on the left side.</p> +</li> +<li> +<p>Under "Project Settings" expand the "IP" section and click on "Repository".</p> +</li> +<li> +<p>Click the large plus button and select the previously generated IP folder (<code>path/to/neorv32/rtl/system_integration/neorv32_vivado_ip_work/packaged_ip</code>).</p> +</li> +<li> +<p>Click "Select" and close the Settings menu with "Apply" and "OK".</p> +</li> +<li> +<p>You will find the NEORV32 in the "User Repository" section of the Vivado IP catalog.</p> +</li> +</ol> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +<div class="title">Combinatorial Loops DRC Errors</div> +If the TRNG is enabled it is recommended to add the following commands to the project&#8217;s constraints file in order +to prevent DRC errors during bitstream generation. +</td> +</tr> +</table> +</div> +<div class="listingblock"> +<div class="title">Listing 10. Allow Combinatorial Loops</div> +<div class="content"> +<pre class="highlight"><code class="language-xdc" data-lang="xdc">set_property SEVERITY {warning} [get_drc_checks LUTLP-1] +set_property IS_ENABLED FALSE [get_drc_checks LUTLP-1] +set_property ALLOW_COMBINATORIAL_LOOPS TRUE</code></pre> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Re-Packaging the IP Core</div> +For every change that is made right to the hardware (excluding configuration made via the customization GUI!) +the NEORV32 IP module needs to be re-packaged by re-executing the packing script (<code>neorv32_vivado_ip.tcl</code>).<br> +<br> +This also applies if an executable installed right into the IMEM (see section <a href="#_installing_an_executable_directly_into_memory">Installing an Executable Directly Into Memory</a>) +shall be updated. It is <strong>not</strong> not possible to replace the IMEM image (<code>neorv32_application_image.vhd</code>) file +in the packaged_ip folder. For the Vivado design suite, the new program to be executed must be compiled and installed using the +<code>install</code> makefile target. Next, the <code>neorv32_vivado_ip.tcl</code> script has to be executed again. Finally, Vivado will prompt to upgrade +the NEORV32 IP. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">AMD Vivado / ISIM - Incremental Compilation of Simulation Sources</div> +When using AMD Vivado (ISIM for simulation) make sure to <strong>TURN OFF</strong> "incremental compilation" (<em>Project Setting</em> +&#8594; <em>Simulation</em> &#8594; <em>Advanced</em> &#8594; _Enable incremental compilation). This will slow down simulation relaunch but will +ensure that all application images (<code>*_image.vhd</code>) are reanalyzed when recompiling the NEORV32 application or bootloader. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect1"> +<h2 id="_simulating_the_processor">13. Simulating the Processor</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Due to the complexity of the NEORV32 processor and all the different configuration options, +there is a wide range of possible testing and verification strategies.</p> +</div> +<div class="paragraph"> +<p>On the one hand, a simple smoke testbench allows ensuring that functionality is correct from a software point of view. +That is used for running the RISC-V architecture tests, in order to guarantee compliance with the ISA specification(s). +All required simulation sources are located in <code>sim</code>.</p> +</div> +<div class="paragraph"> +<p>On the other hand, <a href="http://vunit.github.io/">VUnit</a> and <a href="http://vunit.github.io/verification_components/user_guide.html">Verification Components</a> +are used for verifying the functionality of the various peripherals from a hardware point of view.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">AMD Vivado / ISIM - Incremental Compilation</div> +When using AMD Vivado (ISIM for simulation) make sure to <strong>TURN OFF</strong> "incremental compilation" (<em>Project Setting</em> +&#8594; <em>Simulation</em> &#8594; <em>Advanced</em> &#8594; _Enable incremental compilation). This will slow down simulation relaunch but will +ensure that all application images (<code>*_image.vhd</code>) are reanalyzed when recompiling the NEORV32 application or bootloader. +</td> +</tr> +</table> +</div> +<div class="sect2"> +<h3 id="_testbench">13.1. Testbench</h3> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">VUnit Testbench</div> +A more sophisticated testbench using <strong>VUnit</strong> is available in a separate repository: +<a href="https://github.com/stnolting/neorv32-vunit" class="bare">https://github.com/stnolting/neorv32-vunit</a> +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>A plain-VHDL testbench without any third-party libraries / dependencies (<code>sim/neorv32_tb.vhd</code>) can be used for simulating +and testing the processor and all its configurations. This testbench features clock and reset generators and enables all +optional peripheral and CPU extensions. The processor check program (<code>sw/example/processor_check</code>) is develop in close +relation to the default testbench in order to test all primary processor functions.</p> +</div> +<div class="paragraph"> +<p>The simulation setup is configured via the "User Configuration" section located right at the beginning of +the testbench architecture. Each configuration generic provides a default value and a comments to explain the functionality. +Basically, these configuration generics represent most of the processor&#8217;s <strong>top generics</strong>.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">UART output during simulation</div> +Data written to the NEORV32 UART0 / UART1 transmitter is send to a virtual UART receiver implemented as part of the default +testbench. The received chars are send to the simulator console and are also stored to a log file (<code>neorv32_tb.uart0_rx.out</code> +for UART0, <code>neorv32_tb.uart1_rx.out</code> for UART1) inside the simulator&#8217;s home folder. <strong>Please note that printing via the +native UART receiver takes a lot of time.</strong> For faster simulation console output see section <a href="#_faster_simulation_console_output">Faster Simulation Console Output</a>. +</td> +</tr> +</table> +</div> +</div> +<div class="sect2"> +<h3 id="_faster_simulation_console_output">13.2. Faster Simulation Console Output</h3> +<div class="paragraph"> +<p>When printing data via the physical UART the communication speed will always be based on the configured BAUD rate. For a +simulation this might take some time. To have faster output you can enable the <strong>simulation mode</strong> for UART0/UART1 (see +section <a href="https://stnolting.github.io/neorv32/#_primary_universal_asynchronous_receiver_and_transmitter_uart0" class="bare">https://stnolting.github.io/neorv32/#_primary_universal_asynchronous_receiver_and_transmitter_uart0</a>).</p> +</div> +<div class="paragraph"> +<p>ASCII data sent to UART0 / UART1 will be immediately printed to the simulator console and logged to files in the +simulator&#8217;s home directory.</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>neorv32.uart0_sim_mode.out</code>: ASCII data send via UART0</p> +</li> +<li> +<p><code>neorv32.uart1_sim_mode.out</code>: ASCII data send via UART1</p> +</li> +</ul> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Automatic Simulation Mode</div> +You can "automatically" enable the simulation mode of UART0/UART1 when compiling an application. In this case, the "real" +UART0/UART1 transmitter unit is permanently disabled by setting the UART&#8217;s "sim-mode" bit. +To enable the simulation mode just compile and install the application and add <code>-DUART0_SIM_MODE</code> <code>-DUART0_SIM_MODE</code> / +<code>-DUART1_SIM_MODE</code> to the compiler&#8217;s <code>USER_FLAGS</code> variable (do not forget the <code>-D</code> suffix flag): +</td> +</tr> +</table> +</div> +<div class="listingblock"> +<div class="title">Listing 11. Auto-Enable UART0 Simulation-Mode while Compiling</div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">sw/example/demo_blink_led$ make USER_FLAGS+=-DUART0_SIM_MODE clean_all all</code></pre> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_ghdl_simulation">13.3. GHDL Simulation</h3> +<div class="paragraph"> +<p>The default simulation setup that is also used by the project&#8217;s CI pipeline is based on the free and open-source VHDL +simulator <strong>GHDL</strong>. The <code>sim</code> folder also contains a simple script that evaluates and simulates all core files. +This script can be called right from the command. Optionally, additional GHDL flags can be passes.</p> +</div> +<div class="listingblock"> +<div class="title">Listing 12. Invoking the default GHDL simulation script</div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">neorv32/sim$ sh ghdl.sh --stop-time=20ms</code></pre> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_simulation_using_application_makefiles">13.4. Simulation using Application Makefiles</h3> +<div class="paragraph"> +<p>The <a href="#_ghdl_simulation">GHDL Simulation</a> can also be started by the main application makefile (i.e. from each SW project folder).</p> +</div> +<div class="listingblock"> +<div class="title">Listing 13. Starting the GHDL simulation from the application makefile</div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">sw/example/demo_blink_led$ make USER_FLAGS+=-DUART0_SIM_MODE clean_all install sim +[...] +Blinking LED demo program</code></pre> +</div> +</div> +<div class="paragraph"> +<p>Makefile targets:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>clean_all</code>: delete all artifacts and rebuild everything</p> +</li> +<li> +<p><code>install</code>: install executable</p> +</li> +<li> +<p><code>sim</code>: run GHDL simulation</p> +</li> +</ul> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Adjusting the Testbench Configuration</div> +The testbench provides several generics for customization. These can be adjusted in-console using the +makefile&#8217;s <code>GHDL_RUN_FLAGS</code> variable. E.g.: <code>make GHDL_RUN_FLAGS+="-gBOOT_MODE_SELECT=1" sim</code> +</td> +</tr> +</table> +</div> +<div class="sect3"> +<h4 id="_hello_world">13.4.1. Hello World!</h4> +<div class="paragraph"> +<p>To do a quick test of the NEORV32 make and the required tools navigate to the project&#8217;s <code>sw/example/hello_world</code> +folder and run <code>make USER_FLAGS+=-DUART0_SIM_MODE clean_all install sim</code>:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">neorv32/sw/example/hello_world$ make USER_FLAGS+=-DUART0_SIM_MODE clean_all install sim +../../../sw/lib/source/neorv32_uart.c: In function 'neorv32_uart_setup': +../../../sw/lib/source/neorv32_uart.c:109:2: warning: #warning UART0_SIM_MODE (primary UART) enabled! Sending all UART0.TX data to text.io simulation output instead of real UART0 transmitter. Use this for simulation only! [-Wcpp] + 109 | #warning UART0_SIM_MODE (primary UART) enabled! Sending all UART0.TX data to text.io simulation output instead of real UART0 transmitter. Use this for simulation only! <i class="conum" data-value="1"></i><b>(1)</b> + | ^~~~~~~ +Memory utilization: + text data bss dec hex filename + 5540 0 116 5656 1618 main.elf <i class="conum" data-value="2"></i><b>(2)</b> +Compiling image generator... +Generating neorv32_application_image.vhd +Installing application image to ../../../rtl/core/neorv32_application_image.vhd <i class="conum" data-value="3"></i><b>(3)</b> +Simulating processor using default testbench... +GHDL simulation run parameters: --stop-time=10ms <i class="conum" data-value="4"></i><b>(4)</b> +../rtl/core/neorv32_top.vhd:351:5:@0ms:(assertion note): [NEORV32] The NEORV32 RISC-V Processor (v1.10.7.6), github.com/stnolting/neorv32 +../rtl/core/neorv32_top.vhd:357:5:@0ms:(assertion note): [NEORV32] Processor Configuration: CPU IMEM-ROM DMEM I-CACHE D-CACHE XBUS XBUS-CACHE XIP XIP-CACHE CLINT GPIO UART0 UART1 SPI SDI TWI TWD PWM WDT TRNG CFS NEOLED XIRQ GPTMR ONEWIRE DMA SLINK CRC SYSINFO OCD-AUTH +../rtl/core/neorv32_top.vhd:411:5:@0ms:(assertion note): [NEORV32] BOOT_MODE_SELECT = 2: booting IMEM image +../rtl/core/neorv32_clockgate.vhd:38:3:@0ms:(assertion warning): [NEORV32] Clock gating enabled (using default/generic clock switch). +../rtl/core/neorv32_cpu.vhd:135:3:@0ms:(assertion note): [NEORV32] CPU ISA: rv32ibmux_zalrsc_zba_zbb_zbkb_zbkc_zbkx_zbs_zicntr_zicond_zicsr_zifencei_zihpm_zfinx_zkn_zknd_zkne_zknh_zks_zksed_zksh_zkt_zmmul_zxcfu_sdext_sdtrig_smpmp +../rtl/core/neorv32_cpu.vhd:171:3:@0ms:(assertion note): [NEORV32] CPU tuning options: fast_mul fast_shift rf_hw_rst +../rtl/core/neorv32_cpu.vhd:178:3:@0ms:(assertion warning): [NEORV32] Assuming this is a simulation. +../rtl/core/neorv32_imem.vhd:59:3:@0ms:(assertion note): [NEORV32] Implementing processor-internal IMEM as pre-initialized ROM. +../rtl/core/neorv32_trng.vhd:277:3:@0ms:(assertion note): [neoTRNG] The neoTRNG (v3.2) - A Tiny and Platform-Independent True Random Number Generator, https://github.com/stnolting/neoTRNG +../rtl/core/neorv32_trng.vhd:284:3:@0ms:(assertion warning): [neoTRNG] Simulation-mode enabled (NO TRUE/PHYSICAL RANDOM)! +../rtl/core/neorv32_debug_auth.vhd:48:3:@0ms:(assertion warning): [NEORV32] using DEFAULT on-chip debugger authenticator. Replace by custom module. +<i class="conum" data-value="5"></i><b>(5)</b> + ## ## ## ## + ## ## ######### ######## ######## ## ## ######## ######## ## ################ +#### ## ## ## ## ## ## ## ## ## ## ## ## ## #### #### +## ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ## +## ## ## ######### ## ## ######### ## ## ##### ## ## #### ###### #### +## ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ## +## #### ## ## ## ## ## ## ## ## ## ## ## #### #### +## ## ######### ######## ## ## ## ######## ########## ## ################ + ## ## ## ## +Hello world! :)</code></pre> +</div> +</div> +<div class="colist arabic"> +<table> +<tr> +<td><i class="conum" data-value="1"></i><b>1</b></td> +<td>Notifier that "simulation mode" of UART0 is enabled (by the <code>USER_FLAGS+=-DUART0_SIM_MODE</code> makefile flag). All UART0 output is send to the simulator console.</td> +</tr> +<tr> +<td><i class="conum" data-value="2"></i><b>2</b></td> +<td>Final executable size (<code>text</code>) and <em>static</em> data memory requirements (<code>data</code>, <code>bss</code>).</td> +</tr> +<tr> +<td><i class="conum" data-value="3"></i><b>3</b></td> +<td>The application code is <em>installed</em> as pre-initialized IMEM. This is the default approach for simulation.</td> +</tr> +<tr> +<td><i class="conum" data-value="4"></i><b>4</b></td> +<td>List of (default) arguments that were send to the simulator. Here: maximum simulation time (10ms).</td> +</tr> +<tr> +<td><i class="conum" data-value="5"></i><b>5</b></td> +<td>Execution of the actual program starts. UART0 TX data is printed right to the console.</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_building_the_documentation">14. Building the Documentation</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The documentation (datasheet + user guide) is written using <code>asciidoc</code>. The according source files +can be found in <code>docs/&#8230;&#8203;</code>. The documentation of the software framework is written <em>in-code</em> using <code>doxygen</code>.</p> +</div> +<div class="paragraph"> +<p>A makefiles in the project&#8217;s <code>docs</code> directory is provided to build all of the documentation as HTML pages +or as PDF documents.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +Pre-rendered PDFs are available online as <em>nightly pre-releases</em>: <a href="https://github.com/stnolting/neorv32/releases" class="bare">https://github.com/stnolting/neorv32/releases</a>. +The HTML-based documentation is also available online at the project&#8217;s <a href="https://stnolting.github.io/neorv32/">GitHub Pages</a>. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The makefile provides a help target to show all available build options and their according outputs.</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">neorv32/docs$ make help</code></pre> +</div> +</div> +<div class="listingblock"> +<div class="title">Listing 14. Example: Generate HTML documentation (data sheet) using <code>asciidoctor</code></div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">neorv32/docs$ make html</code></pre> +</div> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +If you don&#8217;t have <code>asciidoctor</code> / <code>asciidoctor-pdf</code> installed, you can still generate all the documentation using +a <em>docker container</em> via <code>make container</code>. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect1"> +<h2 id="_zephyr_rtos_support">15. Zephyr RTOS Support</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The NEORV32 processor is supported by upstream Zephyr RTOS: <a href="https://docs.zephyrproject.org/latest/boards/others/neorv32/doc/index.html" class="bare">https://docs.zephyrproject.org/latest/boards/others/neorv32/doc/index.html</a></p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +The absolute path to the NEORV32 executable image generator binary (<code>&#8230;&#8203;/neorv32/sw/image_gen</code>) has to be added to the <code>PATH</code> variable +so the Zephyr build system can generate executables and memory-initialization images. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +Zephyr OS port provided by GitHub user <a href="https://github.com/henrikbrixandersen">henrikbrixandersen</a> +(see <a href="https://github.com/stnolting/neorv32/discussions/172" class="bare">https://github.com/stnolting/neorv32/discussions/172</a>). ❤️ +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect1"> +<h2 id="_freertos_support">16. FreeRTOS Support</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>A NEORV32-specific port and a simple demo for FreeRTOS (<a href="https://github.com/FreeRTOS/FreeRTOS" class="bare">https://github.com/FreeRTOS/FreeRTOS</a>) are +available in a separate repository on GitHub: <a href="https://github.com/stnolting/neorv32-freertos" class="bare">https://github.com/stnolting/neorv32-freertos</a></p> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect1"> +<h2 id="_litex_soc_builder_support">17. LiteX SoC Builder Support</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p><a href="https://github.com/enjoy-digital/litex">LiteX</a> is a SoC builder framework by <a href="https://github.com/enjoy-digital">Enjoy-Digital</a> +that allows easy creation of complete system-on-chip designs - including sophisticated interfaces like Ethernet, serial ATA +and DDR memory controller. The NEORV32 has been ported to the LiteX framework to be used as central processing unit.</p> +</div> +<div class="paragraph"> +<p>The default microcontroller-like NEORV32 processor is not directly supported as all the peripherals would provide some <em>redundancy</em>. +Instead, the LiteX port uses a <em>core complex wrapper</em> that only includes the actual NEORV32 CPU, the instruction cache (optional), +the RISC-V machine system timer (optional), the on-chip debugger (optional) and the internal bus infrastructure. +The specific implementation of optional modules as well as RISC-V ISA configuration and performance optimization options are +controlled by a single <em>CONFIGURATION</em> option wrapped in the LiteX build flow. The external bus interface is used to connect to +other LiteX SoC parts.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Core Complex Wrapper</div> +The NEORV32 core complex wrapper used by LiteX for integration can be found in +<code>rtl/system_integration/neorv32_litex_core_complex.vhd</code>. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">LiteX NEORV32 Documentation</div> +More information can be found in the "NEORV32" section of the LiteX project wiki: <a href="https://github.com/enjoy-digital/litex/wiki/CPUs" class="bare">https://github.com/enjoy-digital/litex/wiki/CPUs</a> +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Work-In-Progress 🚧</div> +UG: synthesis - how to create a whole NEORV32 + LiteX SoC for a FPGA<br> +LiteX: debugger - the NEORV32 on-chip-debugger is not supported by the LiteX port yet<br> +LiteX: external interrupt - the "RISC-V machine external interrupt" is not supported by the LiteX port yet +</td> +</tr> +</table> +</div> +<div class="sect2"> +<h3 id="_litex_setup">17.1. LiteX Setup</h3> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>Install LiteX and the RISC-V compiler following the excellent quick start guide: <a href="https://github.com/enjoy-digital/litex/wiki#quick-start-guide" class="bare">https://github.com/enjoy-digital/litex/wiki#quick-start-guide</a></p> +</li> +<li> +<p>The NEORV32 port for LiteX uses GHDL and yosys for converting the VHDL files via the <a href="https://github.com/ghdl/ghdl-yosys-plugin">GHDL-yosys-plugin</a>. +You can download prebuilt packages for example from <a href="https://github.com/YosysHQ/fpga-toolchain" class="bare">https://github.com/YosysHQ/fpga-toolchain</a>, which is _no longer maintained. It is superdesed +by <a href="https://github.com/YosysHQ/fpga-toolchain" class="bare">https://github.com/YosysHQ/fpga-toolchain</a>.</p> +</li> +<li> +<p><em>EXPERIMENTAL:</em> GHDL provides a <a href="https://ghdl.github.io/ghdl/using/Synthesis.html">synthesis options</a>, which converts a VHDL setup into a plain-Verilog +module (not tested on LiteX yet). Check out <a href="https://github.com/stnolting/neorv32-verilog">neorv32-verilog</a> for more information.</p> +</li> +</ol> +</div> +<div class="admonitionblock warning"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-warning" title="Warning"></i> +</td> +<td class="content"> +<div class="title">GHDL-yosys Plugin</div> +If you would like to use the experimental GHDL Yosys plugin for VHDL on Linux or MacOS, you will need to set +the <code>GHDL_PREFIX</code> environment variable. e.g. <code>export GHDL_PREFIX=&lt;install_dir&gt;/fpga-toolchain/lib/ghdl</code>. +On Windows this is not necessary.<br> +<br> +If you are using an existing Makefile set up for ghdl-yosys-plugin and see ERROR: This version of yosys +is built without plugin support you probably need to remove <code>-m ghdl</code> from your yosys parameters. This is +because the plugin is typically loaded from a separate file but it is provided built into yosys in this +package.<br> +- from <a href="https://github.com/YosysHQ/fpga-toolchain" class="bare">https://github.com/YosysHQ/fpga-toolchain</a><br> +<br> +<strong>This means you might have to edit the call to yosys in <code>litex/soc/cores/cpu/neorv32/core.py</code>.</strong> +</td> +</tr> +</table> +</div> +<div class="olist arabic"> +<ol class="arabic" start="3"> +<li> +<p>Add the <code>bin</code> folder of the ghdl-yosys-plugin to your <code>PATH</code> environment variable. You can test your yosys installation +and check for the GHDL plugin:</p> +</li> +</ol> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">$ yosys -H + + /----------------------------------------------------------------------------\ + | | + | yosys -- Yosys Open SYnthesis Suite | + | | + | Copyright (C) 2012 - 2020 Claire Xenia Wolf &lt;claire@yosyshq.com&gt; | + | | + | Permission to use, copy, modify, and/or distribute this software for any | + | purpose with or without fee is hereby granted, provided that the above | + | copyright notice and this permission notice appear in all copies. | + | | + | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | + | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | + | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | + | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | + | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | + | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | + | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | + | | + \----------------------------------------------------------------------------/ + + Yosys 0.10+12 (open-tool-forge build) (git sha1 356ec7bb, gcc 9.3.0-17ubuntu1~20.04 -Os) + + +-- Running command `help' -- + + ... <i class="conum" data-value="1"></i><b>(1)</b> + ghdl load VHDL designs using GHDL <i class="conum" data-value="2"></i><b>(2)</b> + ...</code></pre> +</div> +</div> +<div class="colist arabic"> +<table> +<tr> +<td><i class="conum" data-value="1"></i><b>1</b></td> +<td>A long list of plugins&#8230;&#8203;</td> +</tr> +<tr> +<td><i class="conum" data-value="2"></i><b>2</b></td> +<td>This is the plugin we need.</td> +</tr> +</table> +</div> +</div> +<div class="sect2"> +<h3 id="_litex_simulation">17.2. LiteX Simulation</h3> +<div class="paragraph"> +<p>Start a simulation right in your console using the NEORV32 as target CPU:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">$ litex_sim --cpu-type=neorv32</code></pre> +</div> +</div> +<div class="paragraph"> +<p>LiteX will start running its BIOS:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code> __ _ __ _ __ + / / (_) /____ | |/_/ + / /__/ / __/ -_)&gt; &lt; + /____/_/\__/\__/_/|_| + Build your hardware, easily! + + (c) Copyright 2012-2022 Enjoy-Digital + (c) Copyright 2007-2015 M-Labs + + BIOS built on Jul 19 2022 12:21:36 + BIOS CRC passed (6f76f1e8) + + LiteX git sha1: 0654279a + +--=============== SoC ==================-- +CPU: NEORV32-standard @ 1MHz +BUS: WISHBONE 32-bit @ 4GiB +CSR: 32-bit data +ROM: 128KiB +SRAM: 8KiB + + +--============== Boot ==================-- +Booting from serial... +Press Q or ESC to abort boot completely. +sL5DdSMmkekro +Timeout +No boot medium found + +--============= Console ================-- + +litex&gt; help + +LiteX BIOS, available commands: + +flush_cpu_dcache - Flush CPU data cache +crc - Compute CRC32 of a part of the address space +ident - Identifier of the system +help - Print this help + +serialboot - Boot from Serial (SFL) +reboot - Reboot +boot - Boot from Memory + +mem_cmp - Compare memory content +mem_speed - Test memory speed +mem_test - Test memory access +mem_copy - Copy address space +mem_write - Write address space +mem_read - Read address space +mem_list - List available memory regions + + +litex&gt;</code></pre> +</div> +</div> +<div class="paragraph"> +<p>You can use the provided console to execute LiteX commands.</p> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_debugging_using_the_on_chip_debugger">18. Debugging using the On-Chip Debugger</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The NEORV32 on-chip debugger ("OCD") allows <em>online</em> in-system debugging via an external JTAG access port from a +host machine. The general flow is independent of the host machine&#8217;s operating system. However, this tutorial uses +Windows and Linux (Ubuntu on Windows / WSL) in parallel running the upstream version of OpenOCD and the +RISC-V <em>GNU debugger</em> <code>gdb</code>.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">TLDR</div> +You can start a pre-configured debug session (using default <code>main.elf</code> as executable and +<code>target extended-remote localhost:3333</code> as GDB connection configuration) by using the <strong>GDB</strong> makefile target +(i.e. <code>make gdb</code>). +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">OCD Hardware Implementation</div> +See datasheet section <a href="https://stnolting.github.io/neorv32/#_on_chip_debugger_ocd">On Chip Debugger (OCD)</a> +for more information regarding the actual hardware. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">OCD CPU Requirements</div> +The on-chip debugger is only implemented if the <em>ON_CHIP_DEBUGGER_EN</em> generic is set <em>true</em>. Furthermore, it requires +the <code>Zicsr</code> and <code>Zifencei</code> CPU extension, which are always enabled by the CPU. +</td> +</tr> +</table> +</div> +<div class="sect2"> +<h3 id="_hardware_requirements">18.1. Hardware Requirements</h3> +<div class="paragraph"> +<p>Make sure the on-chip debugger of your NEORV32 setup is implemented (<code>ON_CHIP_DEBUGGER_EN</code> generic = true). This +tutorial uses <code>gdb</code> to <strong>directly upload an executable</strong> to the processor. If you are using the default +processor setup <em>with</em> internal instruction memory (IMEM) make sure it is implemented as RAM +(<code>INT_BOOTLOADER_EN</code> generic = true).</p> +</div> +<div class="paragraph"> +<p>Connect a JTAG adapter to the NEORV32 <code>jtag_*</code> interface signals. If you do not have a full-scale JTAG adapter, you can +also use a FTDI-based adapter like the "FT2232H-56Q Mini Module", which is a simple and inexpensive FTDI breakout board.</p> +</div> +<table class="tableblock frame-all grid-rows stretch"> +<caption class="title">Table 3. JTAG pin mapping</caption> +<colgroup> +<col style="width: 42.8571%;"> +<col style="width: 28.5714%;"> +<col style="width: 28.5715%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-center valign-top">NEORV32 top signal</th> +<th class="tableblock halign-center valign-top">JTAG signal</th> +<th class="tableblock halign-center valign-top">Default FTDI port</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>jtag_tck_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">TCK</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">D0</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>jtag_tdi_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">TDI</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">D1</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>jtag_tdo_o</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">TDO</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">D2</p></td> +</tr> +<tr> +<td class="tableblock halign-center valign-top"><p class="tableblock"><code>jtag_tms_i</code></p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">TMS</p></td> +<td class="tableblock halign-center valign-top"><p class="tableblock">D3</p></td> +</tr> +</tbody> +</table> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">JTAG TAP Reset</div> +The NEORV32 JTAG TAP does not provide a dedicated reset signal ("TRST"). However, the missing TRST is not a problem, +since JTAG-level resets can be triggered using with TMS signaling. +</td> +</tr> +</table> +</div> +</div> +<div class="sect2"> +<h3 id="_openocd">18.2. OpenOCD</h3> +<div class="paragraph"> +<p>The NEORV32 on-chip debugger can be accessed using the upstream version of OpenOCD. A pre-configured OpenOCD configuration +file is provided (<code>sw/openocd/openocd_neorv32.cfg</code>) that allows an easy access to the NEORV32 CPU.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +You might need to adapt <code>ftdi vid_pid</code>, <code>ftdi channel</code> and <code>ftdi layout_init</code> in <code>sw/openocd/openocd_neorv32.cfg</code> +according to your interface chip and your operating system. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +If you want to modify the JTAG clock speed (via <code>adapter speed</code> in <code>sw/openocd/openocd_neorv32.cfg</code>) make sure to meet +the clock requirements noted in <a href="https://stnolting.github.io/neorv32/#_debug_module_dm">Documentation: Debug Transport Module (DTM)</a>. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>To access the processor using OpenOCD, open a terminal and start OpenOCD with the pre-configured configuration file.</p> +</div> +<div class="listingblock"> +<div class="title">Listing 15. Connecting via OpenOCD (on Windows) using the default <code>openocd_neorv32.cfg</code> script</div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">N:\Projects\neorv32\sw\openocd&gt;openocd -f openocd_neorv32.cfg +Open On-Chip Debugger 0.11.0 (2021-11-18) [https://github.com/sysprogs/openocd] +Licensed under GNU GPL v2 +libusb1 09e75e98b4d9ea7909e8837b7a3f00dda4589dc3 +For bug reports, read + http://openocd.org/doc/doxygen/bugs.html +Info : clock speed 1000 kHz +Info : JTAG tap: neorv32.cpu tap/device found: 0x00000000 (mfg: 0x000 (&lt;invalid&gt;), part: 0x0000, ver: 0x0) +Info : datacount=1 progbufsize=2 +Info : Disabling abstract command reads from CSRs. +Info : Examined RISC-V core; found 1 harts +Info : hart 0: XLEN=32, misa=0x40901107 +Info : starting gdb server for neorv32.cpu.0 on 3333 +Info : Listening on port 3333 for gdb connections +Target HALTED. +Ready for remote connections. +Info : Listening on port 6666 for tcl connections +Info : Listening on port 4444 for telnet connections</code></pre> +</div> +</div> +<div class="paragraph"> +<p>OpenOCD has successfully connected to the NEORV32 on-chip debugger and has examined the CPU (showing the content of +the <code>misa</code> CSRs). The processor is halted and OpenOCD waits fot <code>gdb</code> to connect via port 3333.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_debugging_with_gdb">18.3. Debugging with GDB</h3> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">GDB + SVD</div> +Together with a third-party plugin the processor&#8217;s SVD file can be imported right into GDB to allow comfortable +debugging of peripheral/IO devices (see <a href="https://github.com/stnolting/neorv32/discussions/656" class="bare">https://github.com/stnolting/neorv32/discussions/656</a>). +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>This guide uses the simple "blink example" from <code>sw/example/demo_blink_led</code> as simplified test application to +show the basics of in-system debugging.</p> +</div> +<div class="paragraph"> +<p>At first, the application needs to be compiled. We will use the minimal machine architecture configuration +(<code>rv32i</code>) here to be independent of the actual processor/CPU configuration. +Navigate to <code>sw/example/demo_blink_led</code> and compile the application:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 16. Compile the test application</div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">.../neorv32/sw/example/demo_blink_led$ make MARCH=rv32i USER_FLAGS+=-g clean_all all</code></pre> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Adding debug symbols to the executable</div> +<code>USER_FLAGS+=-g</code> passes the <code>-g</code> flag to the compiler so it adds debug information/symbols +to the generated ELF file. This is optional but will provide more sophisticated debugging information +(like source file line numbers). +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>This will generate an ELF file <code>main.elf</code> that contains all the symbols required for debugging. +Furthermore, an assembly listing file <code>main.asm</code> is generated that we will use to define breakpoints.</p> +</div> +<div class="paragraph"> +<p>Open another terminal in <code>sw/example/demo_blink_led</code> and start <code>gdb</code>.</p> +</div> +<div class="listingblock"> +<div class="title">Listing 17. Starting GDB (on Linux (Ubuntu on Windows))</div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">.../neorv32/sw/example/demo_blink_led$ riscv32-unknown-elf-gdb +GNU gdb (GDB) 10.1 +Copyright (C) 2020 Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later &lt;http://gnu.org/licenses/gpl.html&gt; +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +Type "show copying" and "show warranty" for details. +This GDB was configured as "--host=x86_64-pc-linux-gnu --target=riscv32-unknown-elf". +Type "show configuration" for configuration details. +For bug reporting instructions, please see: +&lt;https://www.gnu.org/software/gdb/bugs/&gt;. +Find the GDB manual and other documentation resources online at: + &lt;http://www.gnu.org/software/gdb/documentation/&gt;. + +For help, type "help". +Type "apropos word" to search for commands related to "word". +(gdb)</code></pre> +</div> +</div> +<div class="paragraph"> +<p>Now connect to OpenOCD using the default port 3333 on your machine. +We will use the previously generated ELF file <code>main.elf</code> from the <code>demo_blink_led</code> example. +Finally, upload the program to the processor and start debugging.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +The executable that is uploaded to the processor is <strong>not</strong> the default NEORV32 executable (<code>neorv32_exe.bin</code>) that +is used for uploading via the bootloader. Instead, all the required sections (like <code>.text</code>) are extracted from <code>mail.elf</code> +by GDB and uploaded via the debugger&#8217;s indirect memory access. +</td> +</tr> +</table> +</div> +<div class="listingblock"> +<div class="title">Listing 18. Running GDB</div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">(gdb) target extended-remote localhost:3333 <i class="conum" data-value="1"></i><b>(1)</b> +Remote debugging using localhost:3333 +warning: No executable has been specified and target does not support +determining executable automatically. Try using the "file" command. +0xffff0c94 in ?? () <i class="conum" data-value="2"></i><b>(2)</b> +(gdb) file main.elf <i class="conum" data-value="3"></i><b>(3)</b> +A program is being debugged already. +Are you sure you want to change the file? (y or n) y +Reading symbols from main.elf... +(gdb) load <i class="conum" data-value="4"></i><b>(4)</b> +Loading section .text, size 0xd0c lma 0x0 +Loading section .rodata, size 0x39c lma 0xd0c +Start address 0x00000000, load size 4264 +Transfer rate: 43 KB/sec, 2132 bytes/write. +(gdb)</code></pre> +</div> +</div> +<div class="colist arabic"> +<table> +<tr> +<td><i class="conum" data-value="1"></i><b>1</b></td> +<td>Connect to OpenOCD</td> +</tr> +<tr> +<td><i class="conum" data-value="2"></i><b>2</b></td> +<td>The CPU was still executing code from the bootloader ROM - but that does not matter here</td> +</tr> +<tr> +<td><i class="conum" data-value="3"></i><b>3</b></td> +<td>Select <code>mail.elf</code> from the <code>demo_blink_led</code> example</td> +</tr> +<tr> +<td><i class="conum" data-value="4"></i><b>4</b></td> +<td>Upload the executable</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>After the upload, GDB will make the processor jump to the beginning of the uploaded executable +(by default, this is the beginning of the instruction memory at <code>0x00000000</code>) skipping the bootloader +and halting the CPU right before executing the <code>demo_blink_led</code> application.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +After gdb has connected to the CPU, it is recommended to disable the CPU&#8217;s global interrupt flag +(<code>mstatus.mie</code>, = bit #3) to prevent unintended calls of potentially outdated trap handlers. The global +interrupt flag can be cleared using the following gdb command: +<code>set $mstatus = ($mstatus &amp; ~(1&lt;&lt;3))</code>. Interrupts can be enabled globally again by the following command: +<code>set $mstatus = ($mstatus | (1&lt;&lt;3))</code>. +</td> +</tr> +</table> +</div> +<div class="sect3"> +<h4 id="_software_breakpoints">18.3.1. Software Breakpoints</h4> +<div class="paragraph"> +<p>The following steps are just a small showcase that illustrate a simple debugging scheme.</p> +</div> +<div class="paragraph"> +<p>While compiling <code>demo_blink_led</code>, an assembly listing file <code>main.asm</code> was generated. +Open this file with a text editor to check out what the CPU is going to do when resumed.</p> +</div> +<div class="paragraph"> +<p>The <code>demo_blink_led</code> example implements a simple counter on the 8 lowest GPIO output ports. The program uses +"busy wait" to have a visible delay between increments. This waiting is done by calling the <code>neorv32_cpu_delay_ms</code> +function. We will add a <em>breakpoint</em> right at the end of this wait function so we can step through the iterations +of the counter.</p> +</div> +<div class="listingblock"> +<div class="title">Listing 19. Cut-out from <code>main.asm</code> generated from the <code>demo_blink_led</code> example</div> +<div class="content"> +<pre class="highlight"><code class="language-assembly" data-lang="assembly">00000688 &lt;__neorv32_cpu_delay_ms_end&gt;: + 688: 01c12083 lw ra,28(sp) + 68c: 02010113 addi sp,sp,32 + 690: 00008067 ret</code></pre> +</div> +</div> +<div class="paragraph"> +<p>The very last instruction of the <code>neorv32_cpu_delay_ms</code> function is <code>ret</code> (= return) +at hexadecimal <code>690</code> in this example. Add this address as <em>breakpoint</em> to GDB.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +The address might be different if you use a different version of the software framework or +if different ISA options are configured. +</td> +</tr> +</table> +</div> +<div class="listingblock"> +<div class="title">Listing 20. Adding a GDB software breakpoint</div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">(gdb) b * 0x690 <i class="conum" data-value="1"></i><b>(1)</b> +Breakpoint 1 at 0x690</code></pre> +</div> +</div> +<div class="colist arabic"> +<table> +<tr> +<td><i class="conum" data-value="1"></i><b>1</b></td> +<td><code>b</code> is an alias for <code>break</code>, which adds a <em>software</em> breakpoint.</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">How do <em>software</em> breakpoints work?</div> +Software breakpoints are used for debugging programs that are accessed from read/write memory (RAM) like IMEM. The debugger +temporarily replaces the instruction word of the instruction, where the breakpoint shall be inserted, by a <code>ebreak</code> / <code>c.ebreak</code> +instruction. Whenever execution reaches this instruction, debug mode is entered and the debugger restores the original +instruction at this address to maintain original program behavior.<br> +<br> +When debugging programs executed from ROM <em>hardware-assisted</em> breakpoints using the core&#8217;s trigger module have to be used. +See section <a href="#_hardware_breakpoints">Hardware Breakpoints</a> for more information. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>Now execute <code>c</code> (= continue). The CPU will resume operation until it hits the break-point. +By this we can move from one counter increment to another.</p> +</div> +<div class="listingblock"> +<div class="title">Listing 21. Iterating from breakpoint to breakpoint</div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">Breakpoint 1 at 0x690 +(gdb) c +Continuing. + +Breakpoint 1, 0x00000690 in neorv32_cpu_delay_ms () +(gdb) c +Continuing. + +Breakpoint 1, 0x00000690 in neorv32_cpu_delay_ms () +(gdb) c +Continuing.</code></pre> +</div> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Hardcoded EBREAK Instructions In The Program Code</div> +If your original application code uses the BREAK instruction (for example for some OS calls/signaling) this +instruction will cause an enter to debug mode when executed. These situation cannot be continued using gdb&#8217;s +<code>c</code> nor can they be "stepped-over" using the single-step command <code>s</code>. You need to declare the <code>ebreak</code> instruction +as breakpoint to be able to resume operation after executing it. See <a href="https://sourceware.org/pipermail/gdb/2021-January/049125.html" class="bare">https://sourceware.org/pipermail/gdb/2021-January/049125.html</a> +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_hardware_breakpoints">18.3.2. Hardware Breakpoints</h4> +<div class="paragraph"> +<p>Hardware-assisted breakpoints using the CPU&#8217;s trigger module are required when debugging code that is executed from +read-only memory (ROM) as GDB cannot temporarily replace instructions by BREAK instructions.</p> +</div> +<div class="paragraph"> +<p>From a user point of view hardware breakpoints behave like software breakpoints. GDB provides a command to setup +a hardware-assisted breakpoint:</p> +</div> +<div class="listingblock"> +<div class="title">Listing 22. Adding a GDB hardware breakpoint</div> +<div class="content"> +<pre class="highlight"><code class="language-bash" data-lang="bash">(gdb) hb * 0x690 <i class="conum" data-value="1"></i><b>(1)</b> +Breakpoint 1 at 0x690</code></pre> +</div> +</div> +<div class="colist arabic"> +<table> +<tr> +<td><i class="conum" data-value="1"></i><b>1</b></td> +<td><code>hb</code> is an alias for <code>hbreak</code>, which adds a <em>hardware</em> breakpoint.</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +The CPU&#8217;s trigger module only provides a single <em>instruction address match</em> type trigger. Hence, only +a single <code>hb</code> hardware-assisted breakpoint can be used. +</td> +</tr> +</table> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_segger_embedded_studio">18.4. Segger Embedded Studio</h3> +<div class="paragraph"> +<p>Software for the NEORV32 processor can also be developed and debugged <em>in-system</em> using Segger Embedded Studio +and a Segger J-Link probe. The following links provide further information as well as an excellent tutorial.</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Segger Embedded Studio: <a href="https://www.segger.com/products/development-tools/embedded-studio" class="bare">https://www.segger.com/products/development-tools/embedded-studio</a></p> +</li> +<li> +<p>Segger notes regarding NEORV32: <a href="https://wiki.segger.com/J-Link_NEORV32" class="bare">https://wiki.segger.com/J-Link_NEORV32</a></p> +</li> +<li> +<p>Excellent tutorial: <a href="https://www.emb4fun.com/riscv/ses4rv/index.html" class="bare">https://www.emb4fun.com/riscv/ses4rv/index.html</a></p> +</li> +</ul> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_neorv32_in_verilog">19. NEORV32 in Verilog</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>If you are more of a Verilog fan or if your EDA toolchain does not support VHDL or mixed-language designs +you can use an <strong>all-Verilog</strong> version of the processor provided by the +<a href="https://github.com/stnolting/neorv32-verilog"><code>neorv32-verilog</code></a> repository.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +Note that this is <strong>not a manual re-implementation of the core in Verilog</strong> but rather an automated conversion. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>GHDL&#8217;s synthesis feature is used to convert a pre-configured NEORV32 setup - including all peripherals, memories +and memory images - into a single, unoptimized plain-Verilog module file without any (technology-specific) primitives.</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">GHDL Synthesis</div> +More information regarding GHDL&#8217;s synthesis option can be found at <a href="https://ghdl.github.io/ghdl/using/Synthesis.html" class="bare">https://ghdl.github.io/ghdl/using/Synthesis.html</a>. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>An intermediate VHDL wrapper is provided that can be used to configure the processor (using VHDL generics) and to +customize the interface ports. After conversion, a single Verilog file is generated that contains the whole NEORV32 +processor. The original processor module hierarchy is preserved as well as most (all?) signal names, which allows +easy inspection and debugging of simulation waveforms and synthesis results.</p> +</div> +<div class="listingblock"> +<div class="title">Listing 23. Example: interface of the resulting NEORV32 Verilog module (for a minimal SoC configuration)</div> +<div class="content"> +<pre class="highlight"><code class="language-verilog" data-lang="verilog">module neorv32_verilog_wrapper + (input clk_i, + input rstn_i, + input uart0_rxd_i, + output uart0_txd_o);</code></pre> +</div> +</div> +<div class="paragraph"> +<p>The generated Verilog code has been simulated and verified with +<a href="https://github.com/steveicarus/iverilog">Icarus Verilog</a> +(simulation) and AMD Vivado (simulation and synthesis).</p> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +For detailed information check out the <code>neorv32-verilog</code> repository at <a href="https://github.com/stnolting/neorv32-verilog" class="bare">https://github.com/stnolting/neorv32-verilog</a>. +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +<div class="sect1"> +<h2 id="_eclipse_ide">20. Eclipse IDE</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Eclipse (<a href="https://www.eclipse.org/" class="bare">https://www.eclipse.org/</a>) is an interactive development environment that can be used to develop, debug and profile +application code for the NEORV32 RISC-V Processor. This chapter shows how to import the provided <strong>example setup</strong> +from the NEORV32 project repository. Additionally, all the required steps to create a compatible project from +scratch are illustrated in this chapter.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">This is a Makefile-Based Project!</div> +Note that the provided Eclipse example project (as well as the setup tutorial in this section) implements a +<strong>makefile-based project</strong>. Hence, the makefile in the example folder is used for building the application +instead of the Eclipse-managed build system. Therefore, <strong>all compiler options, include folder, source files, +etc. have to be defined within this makefile</strong>. +</td> +</tr> +</table> +</div> +<div class="imageblock text-center"> +<div class="content"> +<img src="../img/eclipse.png" alt="eclipse"> +</div> +<div class="title">Figure 4. Developing and debugging code for the NEORV32 using the Eclipse IDE</div> +</div> +<div class="sect2"> +<h3 id="_eclipse_prerequisites">20.1. Eclipse Prerequisites</h3> +<div class="paragraph"> +<p>The following tools are required:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Eclipse IDE (<strong>Eclipse IDE for Embedded C/C++ Developers</strong>): <a href="https://www.eclipse.org/downloads/" class="bare">https://www.eclipse.org/downloads/</a></p> +</li> +<li> +<p>Precompiled RISC-V GCC toolchain: e.g. <a href="https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack" class="bare">https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack</a></p> +</li> +<li> +<p>Precompiled OpenOCD binaries: e.g. <a href="https://github.com/xpack-dev-tools/openocd-xpack" class="bare">https://github.com/xpack-dev-tools/openocd-xpack</a></p> +</li> +<li> +<p>Build tools like make and busybox: e.g. <a href="https://github.com/xpack-dev-tools/windows-build-tools-xpack" class="bare">https://github.com/xpack-dev-tools/windows-build-tools-xpack</a></p> +</li> +</ul> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">XPack Windows Build Tools</div> +The NEORV32 makefile relies on the <code>basename</code> command which might not be part of the default XPack Windows Build Tools. +However, you can just open the according <code>bin</code> folder, copy <code>busybox.exe</code> and rename that copy to <code>basename.exe</code>. +</td> +</tr> +</table> +</div> +</div> +<div class="sect2"> +<h3 id="_import_the_provided_eclipse_example_project">20.2. Import The Provided Eclipse Example Project</h3> +<div class="paragraph"> +<p>A preconfigured Eclipse project is available in <code>neorv32/sw/example/eclipse</code>. +To import it:</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>Open Eclipse.</p> +</li> +<li> +<p>Click on <strong>File &gt; Import</strong>, expand <strong>General</strong> and select <strong>Projects from Folder or Archive</strong>.</p> +</li> +<li> +<p>Click <strong>Next</strong>.</p> +</li> +<li> +<p>Click on <strong>Directory</strong> and select the provided example project folder (see directory above).</p> +</li> +<li> +<p>Click <strong>Finish</strong>.</p> +</li> +</ol> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">NEORV32 Folder and File Paths</div> +The provided example project uses <strong>relative paths</strong> for including all the NEORV32-specific files and folders +(in the Eclipse configuration files). Note that these paths need to be adjusted when moving the example setup +to a different location. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Tool Configuration</div> +Make sure to adjust the binaries / installation folders of the RISC-V GCC toolchain, openOCD and Windows build tools +according to your installation. See the section <a href="#_configure_build_tools">Configure Build Tools</a> for more information. +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Makefile Adjustment</div> +Make sure to adjust the variables inside the project&#8217;s makefile to match your processor +configuration (memory sizes, CPU ISA configuration, etc.): +<a href="https://stnolting.github.io/neorv32/#_application_makefile" class="bare">https://stnolting.github.io/neorv32/#_application_makefile</a> +</td> +</tr> +</table> +</div> +</div> +<div class="sect2"> +<h3 id="_setup_a_new_eclipse_project_from_scratch">20.3. Setup a new Eclipse Project from Scratch</h3> +<div class="paragraph"> +<p>This chapter shows all the steps required to create an Eclipse project for the NEORV32 entirely from scratch.</p> +</div> +<div class="sect3"> +<h4 id="_create_a_new_project">20.3.1. Create a new Project</h4> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>Select <strong>File &gt; New &gt; Project</strong>.</p> +</li> +<li> +<p>Expand <strong>C/C** and select **C project</strong>.</p> +</li> +<li> +<p>In the <strong>C++ Project</strong> wizard:</p> +<div class="ulist"> +<ul> +<li> +<p>Enter a <strong>Project name</strong>.</p> +</li> +<li> +<p>Uncheck the box next to <strong>Use default location</strong> and specify a location using <strong>Browse</strong> where you want to create the project.</p> +</li> +<li> +<p>From the <strong>Project type</strong> list expand <strong>Makefile project</strong> and select <strong>Empty Project</strong>.</p> +</li> +<li> +<p>Select <strong>RISC-V Cross GCC</strong> from the <strong>Toolchain</strong> list on the right side.</p> +</li> +<li> +<p>Click <strong>Next</strong>.</p> +</li> +<li> +<p>Skip the next page using the default configuration by clicking <strong>Next</strong>.</p> +</li> +</ul> +</div> +</li> +<li> +<p>In the <strong>GNU RISC-V Cross Toolchain</strong> wizard configure the <strong>Toolchain name</strong> and <strong>Toolchain path</strong> according to your RISC-V GCC installation.</p> +<div class="ulist"> +<ul> +<li> +<p>Example: <code>Toolchain name: xPack GNU RISC-V Embedded GCC (riscv-none-elf-gcc)</code></p> +</li> +<li> +<p>Example: <code>Toolchain path: C:\Program Files (x86)\xpack-riscv-none-elf-gcc-13.2.0-2\bin</code></p> +</li> +</ul> +</div> +</li> +<li> +<p>Click <strong>Finish</strong>.</p> +</li> +</ol> +</div> +<div class="paragraph"> +<p>If you need to reconfigure the RISC-V GCC binaries and/or paths:</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>right-click on the project in the left view, select <strong>Properties</strong></p> +</li> +<li> +<p>expand <strong>MCU</strong> and select <strong>RISC-V Toolchain Paths</strong></p> +</li> +<li> +<p>adjust the <strong>Toolchain folder</strong> and the <strong>Toolchain name</strong> if required</p> +</li> +<li> +<p>Click <strong>Apply</strong>.</p> +</li> +</ol> +</div> +</div> +<div class="sect3"> +<h4 id="_add_initial_files">20.3.2. Add Initial Files</h4> +<div class="paragraph"> +<p>Start a simple project by adding two initial files. Further files can be added later. Only the makefile is really +relevant here.</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>Add a new file by right-clicking on the project and select <strong>New &gt; File</strong> and enter <code>main.c</code> in the filename box.</p> +</li> +<li> +<p>Add another new file by right-clicking on the project and select <strong>New &gt; File</strong> and enter <code>makefile</code> in the filename</p> +</li> +<li> +<p>Copy the makefile of an existing NEORV32 example program and paste it to the new (empty) makefile.</p> +</li> +</ol> +</div> +</div> +<div class="sect3"> +<h4 id="_add_build_targets_optional">20.3.3. Add Build Targets (optional)</h4> +<div class="paragraph"> +<p>This step adds some of the targets of the NEORV32 makefile for easy access. This step is optional.</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>In the project explorer right-click on the project and select <strong>Build Target &gt; Create&#8230;&#8203;</strong>.</p> +</li> +<li> +<p>Add &#8220;all&#8221; as <strong>Target name</strong> (keep all the default checked boxes).</p> +</li> +<li> +<p>Repeat these steps for all further targets that you wish to add (e..g <code>clean_all</code>, <code>exe</code>, <code>elf</code>).</p> +</li> +</ol> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Clean-All Target</div> +Adding the <code>clean_all</code> target is highly recommended. Executing this target once after importing the project ensures +that there are no (incompatible) artifacts left from previous builds. +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-tip" title="Tip"></i> +</td> +<td class="content"> +<div class="title">Available Target</div> +See the NEORV32 data sheet for a list and description of all available makefile targets: +<a href="https://stnolting.github.io/neorv32/#_makefile_targets" class="bare">https://stnolting.github.io/neorv32/#_makefile_targets</a> +</td> +</tr> +</table> +</div> +</div> +<div class="sect3"> +<h4 id="_configure_build_tools">20.3.4. Configure Build Tools</h4> +<div class="paragraph"> +<p>This step is only required if your system does not provide any build tools (like <code>make</code>) by default.</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>In the project explorer right-click on the project and select <strong>Properties</strong>.</p> +</li> +<li> +<p>Expand <strong>MCU</strong> and click on <strong>Build Tools Path</strong>.</p> +</li> +<li> +<p>Configure the <strong>Build tools folder</strong>.</p> +<div class="ulist"> +<ul> +<li> +<p>Example: <code>Build tools folder: C:/xpack/xpack-windows-build-tools-4.4.1-2/bin</code></p> +</li> +</ul> +</div> +</li> +<li> +<p>Click <strong>Apply and Close</strong>.</p> +</li> +</ol> +</div> +</div> +<div class="sect3"> +<h4 id="_adjust_default_build_configuration_optional">20.3.5. Adjust Default Build Configuration (optional)</h4> +<div class="paragraph"> +<p>This will simplify the auto-build by replacing the default <code>make all</code> command by <code>make elf</code>. Thus, only +the required <code>main.elf</code> file gets generated instead of <em>all</em> executable files (like HDL and memory image files).</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>In the project explorer right-click on the project and select <strong>Properties</strong>.</p> +</li> +<li> +<p>Select <strong>C/C++ Build</strong> and click on the <strong>Behavior</strong> Tab.</p> +</li> +<li> +<p>Update the default targets in the <strong>Workbench Build Behavior</strong> box:</p> +<div class="ulist"> +<ul> +<li> +<p><strong>Build on resource save:</strong> <code>elf</code> (only build the ELF file)</p> +</li> +<li> +<p><strong>Build (Incremental build):</strong> <code>elf</code> (only build the ELF file)</p> +</li> +<li> +<p><strong>Clean:</strong> <code>clean</code> (only remove project-local build artifacts)</p> +</li> +</ul> +</div> +</li> +<li> +<p>Click <strong>Apply and Close</strong>.</p> +</li> +</ol> +</div> +</div> +<div class="sect3"> +<h4 id="_add_neorv32_software_framework">20.3.6. Add NEORV32 Software Framework</h4> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>In the project explorer right-click on the project and select <strong>Properties</strong>.</p> +</li> +<li> +<p>Expand <strong>C/C++ General</strong>, click on <strong>Paths and Symbols</strong> and highlight <strong>Assembly</strong> under <strong>Languages</strong>.</p> +</li> +<li> +<p>In the <strong>Include</strong> tab click <strong>Add&#8230;&#8203;</strong></p> +<div class="ulist"> +<ul> +<li> +<p>Check the box in front of <strong>Add to all languages</strong> and click on <strong>File System&#8230;&#8203;</strong> and select the NEORV32 library include folder (<code>path/to/neorv32/sw/lib/include</code>).</p> +</li> +<li> +<p>Click <strong>OK</strong>.</p> +</li> +</ul> +</div> +</li> +<li> +<p>In the <strong>Include</strong> tab click <strong>Add&#8230;&#8203;</strong>.</p> +<div class="ulist"> +<ul> +<li> +<p>Check the box in front of <strong>Add to all languages</strong> and click on <strong>File System&#8230;&#8203;</strong> and select the NEORV32 commons folder (<code>path/to/neorv32/sw/common</code>).</p> +</li> +<li> +<p>Click <strong>OK</strong>.</p> +</li> +</ul> +</div> +</li> +<li> +<p>Click on the <strong>Source Location<strong> tab and click </strong>Link Folder&#8230;&#8203;</strong>*.</p> +<div class="ulist"> +<ul> +<li> +<p>Check the box in front of <strong>Link to folder in the system</strong> and click the <strong>Browse</strong> button.</p> +</li> +<li> +<p>Select the source folder of the NEORV32 software framework (<code>path/to/neorv32/sw/lib/source</code>).</p> +</li> +<li> +<p>Click <strong>OK</strong>.</p> +</li> +</ul> +</div> +</li> +<li> +<p>Click <strong>Apply and Close</strong>.</p> +</li> +</ol> +</div> +</div> +<div class="sect3"> +<h4 id="_setup_openocd">20.3.7. Setup OpenOCD</h4> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>In the project explorer right-click on the project and select <strong>Properties</strong>.</p> +</li> +<li> +<p>Expand <strong>MCU</strong> and select <strong>OpenOCD Path</strong>.</p> +<div class="ulist"> +<ul> +<li> +<p>Configure the <strong>Executable</strong> and <strong>Folder</strong> according to your openOCD installation.</p> +</li> +<li> +<p>Example: <code>Executable: openocd.exe</code></p> +</li> +<li> +<p>Example: <code>Folder: C:\OpenOCD\bin</code></p> +</li> +<li> +<p>Click <strong>Apply and Close</strong>.</p> +</li> +</ul> +</div> +</li> +<li> +<p>In the top bar of Eclipse click on the tiny arrow right next to the <strong>Debug</strong> bug icon and select <strong>Debug Configurations</strong>.</p> +</li> +<li> +<p>Double-click on <strong>GDB OpenOCD Debugging</strong>; several menu tabs will open on the right.</p> +<div class="ulist"> +<ul> +<li> +<p>In the <strong>Main</strong> tab add <code>main.elf</code> to the <strong>C/C++ Application</strong> box.</p> +</li> +<li> +<p>In the <strong>Debugger</strong> tab add the NEORV32 OpenOCD script with a <code>-f</code> in front of it-</p> +</li> +<li> +<p>Example: <code>Config options: -f ../../openocd/openocd_neorv32.cfg</code></p> +</li> +<li> +<p>In the <strong>Startup</strong> tab uncheck he box in front of <strong>Initial Reset</strong> and add <code>monitor reset halt</code> to the box below.</p> +</li> +<li> +<p>In the "Common" tab mark <strong>Shared file</strong> to store the run-configuration right in the project folder instead of the workspace(optional).</p> +</li> +<li> +<p>In the <strong>SVD Path</strong> tab add the NEORV32 SVD file (<code>path/to/neorv32/sw/svd/neorv32.svd</code>).</p> +</li> +</ul> +</div> +</li> +<li> +<p>Click <strong>Apply</strong> and then <strong>Close</strong>.</p> +</li> +</ol> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Default Debug Configuration</div> +When you start debugging the first time you might need to select the provided debug configuration: +<strong>GDB OpenOCD Debugging &gt; eclipse_example Default</strong> +</td> +</tr> +</table> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-important" title="Important"></i> +</td> +<td class="content"> +<div class="title">Debug Symbols</div> +For debugging the ELF has to compiled to contain according debug symbols. +Debug symbols are enabled by the project&#8217;s local makefile: <code>USER_FLAGS += -ggdb -gdwarf-3</code> +(this configuration seems to work best for Eclipse - at least for me). +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>If you need to reconfigure OpenOCD binaries and/or paths:</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>right-click on the project in the left view, select <strong>Properties</strong></p> +</li> +<li> +<p>expand <strong>MCU</strong> and select <strong>OpenOCD Path</strong></p> +</li> +<li> +<p>adjust the <strong>Folder</strong> and the <strong>Executable</strong> name if required</p> +</li> +<li> +<p>Click <strong>Apply</strong>.</p> +</li> +</ol> +</div> +</div> +<div class="sect3"> +<h4 id="_setup_serial_terminal">20.3.8. Setup Serial Terminal</h4> +<div class="paragraph"> +<p>A serial terminal can be added to Eclipse by installing it as a plugin. +I recommend "TM Terminal" which is already installed in some Eclipse bundles.</p> +</div> +<div class="paragraph"> +<p>Open a TM Terminal serial console:</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>Click on <strong>Window &gt; Show View &gt; Terminal</strong> to open the terminal.</p> +</li> +<li> +<p>A <strong>Terminal</strong> tab appears on the bottom. Click the tiny screen button on the right (or press Ctrl+Alt+Shift) +to open the terminal configuration.</p> +</li> +<li> +<p>Select <strong>Serial Terminal</strong> in <strong>Choose Terminal</strong> and configure the settings according to the processor&#8217;s +UART configuration.</p> +</li> +</ol> +</div> +<div class="paragraph"> +<p>Installing TM Terminal from the Eclipse market place:</p> +</div> +<div class="olist arabic"> +<ol class="arabic" start="1"> +<li> +<p>Click on <strong>Help &gt; Eclipse Marketplace&#8230;&#8203;</strong>.</p> +</li> +<li> +<p>Enter "TM Terminal" to the <strong>Find</strong> line and hit enter.</p> +</li> +<li> +<p>Select <strong>TM Terminal</strong> from the list and install it.</p> +</li> +<li> +<p>After installation restart Eclipse.</p> +</li> +</ol> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_eclipse_setup_references">20.4. Eclipse Setup References</h3> +<div class="ulist"> +<ul> +<li> +<p>Eclipse help: <a href="https://help.eclipse.org/latest/index.jsp" class="bare">https://help.eclipse.org/latest/index.jsp</a></p> +</li> +<li> +<p>Importing an existing project into Eclipse: <a href="https://help.eclipse.org/latest/index.jsp?topic=%2Forg.eclipse.cdt.doc.user%2Fgetting_started%2Fcdt_w_import.htm" class="bare">https://help.eclipse.org/latest/index.jsp?topic=%2Forg.eclipse.cdt.doc.user%2Fgetting_started%2Fcdt_w_import.htm</a></p> +</li> +<li> +<p>Eclipse OpenOCD Plug-In: <a href="https://eclipse-embed-cdt.github.io/debug/openocd/" class="bare">https://eclipse-embed-cdt.github.io/debug/openocd/</a></p> +</li> +</ul> +</div> +<div style="page-break-after: always;"></div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_legal">21. Legal</h2> +<div class="sectionbody"> +<div class="sect2"> +<h3 id="_about">About</h3> +<div class="exampleblock"> +<div class="content"> +<div class="paragraph"> +<p><strong>The NEORV32 RISC-V Processor</strong><br> +<a href="https://github.com/stnolting/neorv32" class="bare">https://github.com/stnolting/neorv32</a><br> +Stephan Nolting, M.Sc.<br> +🇪🇺 European Union<br> +<a href="mailto:stnolting@gmail.com">stnolting@gmail.com</a></p> +</div> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_license">License</h3> +<div class="paragraph"> +<p><strong>BSD 3-Clause License</strong></p> +</div> +<div class="paragraph"> +<p>Copyright (c) NEORV32 contributors. +Copyright (c) 2020 - 2024, Stephan Nolting. All rights reserved.</p> +</div> +<div class="paragraph"> +<p>Redistribution and use in source and binary forms, with or without modification, are permitted provided that +the following conditions are met:</p> +</div> +<div class="olist arabic"> +<ol class="arabic"> +<li> +<p>Redistributions of source code must retain the above copyright notice, this list of conditions and the +following disclaimer.</p> +</li> +<li> +<p>Redistributions in binary form must reproduce the above copyright notice, this list of conditions and +the following disclaimer in the documentation and/or other materials provided with the distribution.</p> +</li> +<li> +<p>Neither the name of the copyright holder nor the names of its contributors may be used to endorse or +promote products derived from this software without specific prior written permission.</p> +</li> +</ol> +</div> +<div class="paragraph"> +<p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">SPDX Identifier</div> +<code>SPDX-License-Identifier: BSD-3-Clause</code> +</td> +</tr> +</table> +</div> +<div style="page-break-after: always;"></div> +</div> +<div class="sect2"> +<h3 id="_proprietary_notice">Proprietary Notice</h3> +<div class="ulist"> +<ul> +<li> +<p>"GitHub" is a subsidiary of Microsoft Corporation.</p> +</li> +<li> +<p>"Vivado" and "Artix" are trademarks of AMD Inc.</p> +</li> +<li> +<p>"AXI", "AXI", "AXI4-Lite", "AXI4-Stream", "AHB", "AHB3" and "AHB3-Lite" are trademarks of Arm Holdings plc.</p> +</li> +<li> +<p>"ModelSim" is a trademark of Mentor Graphics – A Siemens Business.</p> +</li> +<li> +<p>"Quartus [Prime]" and "Cyclone" are trademarks of Intel Corporation.</p> +</li> +<li> +<p>"iCE40", "UltraPlus" and "Radiant" are trademarks of Lattice Semiconductor Corporation.</p> +</li> +<li> +<p>"GateMate" is a trademark of Cologne Chip AG.</p> +</li> +<li> +<p>"Windows" is a trademark of Microsoft Corporation.</p> +</li> +<li> +<p>"Tera Term" copyright by T. Teranishi.</p> +</li> +<li> +<p>"NeoPixel" is a trademark of Adafruit Industries.</p> +</li> +<li> +<p>"Segger Embedded Studio" and "J-Link" are trademarks of Segger Microcontroller Systems GmbH.</p> +</li> +<li> +<p>Images/figures made with <em>Microsoft Power Point</em>.</p> +</li> +<li> +<p>Timing diagrams made with <em>WaveDrom Editor</em>.</p> +</li> +<li> +<p>Documentation made with <code>asciidoctor</code>.</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>All further/unreferenced projects/products/brands belong to their according copyright holders. +No copyright infringement intended.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_disclaimer">Disclaimer</h3> +<div class="paragraph"> +<p>This project is released under the BSD 3-Clause license. NO COPYRIGHT INFRINGEMENT INTENDED. +Other implied or used projects/sources might have different licensing – see their according +documentation for more information.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_limitation_of_liability_for_external_links">Limitation of Liability for External Links</h3> +<div class="paragraph"> +<p>This document contains links to the websites of third parties ("external links"). As the content of these websites +is not under our control, we cannot assume any liability for such external content. In all cases, the provider of +information of the linked websites is liable for the content and accuracy of the information provided. At the +point in time when the links were placed, no infringements of the law were recognizable to us. As soon as an +infringement of the law becomes known to us, we will immediately remove the link in question.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_citing">Citing</h3> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +This is an open-source project that is free of charge. Use this project in any way you like +(as long as it complies to the permissive license). Please cite it appropriately. 👍 +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">Contributors &amp; Community 🤝</div> +Please add as many <a href="https://github.com/stnolting/neorv32/graphs/contributors">contributors</a> as possible to the <code>author</code> field.<br> +This project would not be where it is without them. +</td> +</tr> +</table> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<i class="fa icon-note" title="Note"></i> +</td> +<td class="content"> +<div class="title">DOI</div> +This project provides a <em>digital object identifier</em> provided by <a href="https://zenodo.org">zenodo</a>: +<a href="https://doi.org/10.5281/zenodo.5018888"><span class="image"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.5018888.svg" alt="zenodo.5018888" title="zenodo"></span></a> +</td> +</tr> +</table> +</div> +</div> +<div class="sect2"> +<h3 id="_acknowledgments">Acknowledgments</h3> +<div class="paragraph"> +<p><strong>A big shout-out to the community and all the <a href="https://github.com/stnolting/neorv32/graphs/contributors">contributors</a>, +who helped improving this project! This project would not be where it is without them. ❤️</strong></p> +</div> +<div class="paragraph"> +<p><a href="https://riscv.org">RISC-V</a> - instruction sets want to be free!</p> +</div> +<div class="paragraph"> +<p>Continuous integration provided by <a href="https://github.com/features/actions">GitHub Actions</a> +and powered by <a href="https://github.com/ghdl/ghdl">GHDL</a>.</p> +</div> +</div> +</div> +</div> +</div> +<div id="footer"> +<div id="footer-text"> +Version v1.10.8-r25-g208ad4ef<br> +</div> +</div> +<script type="text/x-mathjax-config"> +MathJax.Hub.Config({ + messageStyle: "none", + tex2jax: { + inlineMath: [["\\(", "\\)"]], + displayMath: [["\\[", "\\]"]], + ignoreClass: "nostem|nolatexmath" + }, + asciimath2jax: { + delimiters: [["\\$", "\\$"]], + ignoreClass: "nostem|noasciimath" + }, + TeX: { equationNumbers: { autoNumber: "none" } } +}) +MathJax.Hub.Register.StartupHook("AsciiMath Jax Ready", function () { + MathJax.InputJax.AsciiMath.postfilterHooks.Add(function (data, node) { + if ((node = data.script.parentNode) && (node = node.parentNode) && node.classList.contains("stemblock")) { + data.math.root.display = "block" + } + return data + }) +}) +</script> +<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-MML-AM_HTMLorMML"></script> +</body> +</html> \ No newline at end of file