]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1_FreedomStudio/freedom-metal/src/drivers/sifive_test0.c
Update RISCC-V-RV32-SiFive_HiFive1_FreedomStudio project to latest tools and metal...
[freertos] / FreeRTOS / Demo / RISC-V_RV32_SiFive_HiFive1_FreedomStudio / freedom-metal / src / drivers / sifive_test0.c
1 /* Copyright 2018 SiFive, Inc */
2 /* SPDX-License-Identifier: Apache-2.0 */
3
4 #include <metal/machine/platform.h>
5
6 #ifdef METAL_SIFIVE_TEST0
7
8 #include <metal/machine.h>
9
10 #include <stdint.h>
11
12 #include <metal/drivers/sifive_test0.h>
13 #include <metal/io.h>
14
15 void __metal_driver_sifive_test0_exit(const struct __metal_shutdown *sd, int code) __attribute__((noreturn));
16 void __metal_driver_sifive_test0_exit(const struct __metal_shutdown *sd, int code)
17 {
18     long base = __metal_driver_sifive_test0_base(sd);
19     uint32_t out = (code << 16) + (code == 0 ? 0x5555 : 0x3333);
20     while (1) {
21         __METAL_ACCESS_ONCE((__metal_io_u32 *)(base + METAL_SIFIVE_TEST0_FINISHER_OFFSET)) = out;
22     }
23 }
24
25 __METAL_DEFINE_VTABLE(__metal_driver_vtable_sifive_test0) = {
26     .shutdown.exit       = &__metal_driver_sifive_test0_exit,
27 };
28 #endif /* METAL_SIFIVE_TEST0 */
29
30 typedef int no_empty_translation_units;