diff --git a/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Makefile b/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Makefile index 0f748baba0..0cdd94d451 100644 --- a/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Makefile +++ b/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Makefile @@ -47,7 +47,7 @@ SRCS = main.c main_blinky.c riscv-virt.c ns16550.c \ $(RTOS_SOURCE_DIR)/portable/MemMang/heap_4.c \ $(RTOS_SOURCE_DIR)/portable/GCC/RISC-V/port.c -ASMS = start.S \ +ASMS = start.S vector.S\ $(RTOS_SOURCE_DIR)/portable/GCC/RISC-V/portASM.S OBJS = $(SRCS:%.c=$(BUILD_DIR)/%.o) $(ASMS:%.S=$(BUILD_DIR)/%.o) diff --git a/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/main.c b/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/main.c index f73dacf1ef..d42cef4154 100644 --- a/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/main.c +++ b/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/main.c @@ -20,7 +20,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * https://www.FreeRTOS.org - * https://www.github.com/FreeRTOS + * https://github.com/FreeRTOS * */ @@ -30,6 +30,10 @@ /* Run a simple demo just prints 'Blink' */ #define DEMO_BLINKY 1 +#define mainVECTOR_MODE_DIRECT 1 + +extern void freertos_risc_v_trap_handler( void ); +extern void freertos_vector_table( void ); void vApplicationMallocFailedHook( void ); void vApplicationIdleHook( void ); @@ -43,6 +47,16 @@ int main_blinky( void ); int main( void ) { int ret; + // trap handler initialization + #if( mainVECTOR_MODE_DIRECT == 1 ) + { + __asm__ volatile( "csrw mtvec, %0" :: "r"( freertos_risc_v_trap_handler ) ); + } + #else + { + __asm__ volatile( "csrw mtvec, %0" :: "r"( ( uintptr_t )freertos_vector_table | 0x1 ) ); + } + #endif #if defined(DEMO_BLINKY) ret = main_blinky(); diff --git a/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/vector.S b/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/vector.S new file mode 100644 index 0000000000..dd5e656459 --- /dev/null +++ b/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/vector.S @@ -0,0 +1,62 @@ +/* + * FreeRTOS V202112.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * 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. + * + * https://www.FreeRTOS.org + * https://github.com/FreeRTOS + * + */ + +.balign 128, 0 +.option norvc +.global freertos_vector_table +freertos_vector_table: +IRQ_0: + j freertos_risc_v_exception_handler +IRQ_1: + j freertos_risc_v_interrupt_handler +IRQ_2: + j freertos_risc_v_interrupt_handler +IRQ_3: + j freertos_risc_v_interrupt_handler +IRQ_4: + j freertos_risc_v_interrupt_handler +IRQ_5: + j freertos_risc_v_interrupt_handler +IRQ_6: + j freertos_risc_v_interrupt_handler +IRQ_7: + j freertos_risc_v_mtimer_interrupt_handler +IRQ_8: + j freertos_risc_v_interrupt_handler +IRQ_9: + j freertos_risc_v_interrupt_handler +IRQ_10: + j freertos_risc_v_interrupt_handler +IRQ_11: + j freertos_risc_v_interrupt_handler +IRQ_12: + j freertos_risc_v_interrupt_handler +IRQ_13: + j freertos_risc_v_interrupt_handler +IRQ_14: + j freertos_risc_v_interrupt_handler +IRQ_15: + j freertos_risc_v_interrupt_handler