diff options
Diffstat (limited to 'c/src/lib/libbsp/arm/tms570/pom/tms570-pom.c')
-rw-r--r-- | c/src/lib/libbsp/arm/tms570/pom/tms570-pom.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/arm/tms570/pom/tms570-pom.c b/c/src/lib/libbsp/arm/tms570/pom/tms570-pom.c new file mode 100644 index 0000000000..6514368e55 --- /dev/null +++ b/c/src/lib/libbsp/arm/tms570/pom/tms570-pom.c @@ -0,0 +1,53 @@ +/** + * @file tms570-pom.c + * + * @ingroup tms570 + * + * @brief TMS570 Parameter Overlay Module functions definitions. + */ + + /* + * Copyright (c) 2014 Pavel Pisa <pisa@cmp.felk.cvut.cz> + * + * Czech Technical University in Prague + * Zikova 1903/4 + * 166 36 Praha 6 + * Czech Republic + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#include <stdint.h> +#include <bsp/tms570-pom.h> +#include <bsp/linker-symbols.h> +#include <bsp.h> + +/** + * @brief remaps vector table + * + * transfer the rtems start vector table to address 0x0 + * + * @retval Void + */ +void tms570_pom_remap(void) +{ + int i; + uint32_t vec_overlay_start = 0x08000000; + + memcpy((void*)vec_overlay_start, bsp_start_vector_table_begin, 64); + + TMS570_POM.GLBCTRL = 0; + + for ( i = 0; i < TMS570_POM_REGIONS; ++i ) { + TMS570_POM.REG[i].REGSIZE = TMS570_POM_REGSIZE_DISABLED; + } + + TMS570_POM.REG[0].PROGSTART = 0x0 & TMS570_POM_REGADDRMASK; + TMS570_POM.REG[0].OVLSTART = vec_overlay_start & TMS570_POM_REGADDRMASK; + TMS570_POM.REG[0].REGSIZE = TMS570_POM_REGSIZE_64B; + + TMS570_POM.GLBCTRL = TMS570_POM_GLBCTRL_ENABLE | + (vec_overlay_start & ~TMS570_POM_REGADDRMASK); +} |