URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [tags/] [nog_patch_57/] [or1ksim/] [peripheral/] [test.c] - Rev 1765
Compare with Previous | Blame | View Log
#include <stdio.h> #include "config.h" #ifdef HAVE_INTTYPES_H #include <inttypes.h> #endif #include "port.h" #include "arch.h" #include "sim-config.h" #include "abstract.h" #include "except.h" struct test_config { uint32_t array[128]; oraddr_t baseaddr; }; /* Test write */ void test_write32 (oraddr_t addr, uint32_t value, void *dat) { struct test_config *test = dat; if (addr & 0x00000080) test->array[addr & 0x7f] = value; else except_handle(EXCEPT_BUSERR, cur_vadd); } /* Test read */ uint32_t test_read32 (oraddr_t addr, void *dat) { struct test_config *test = dat; if (addr & 0x00000080) return ~test->array[addr & 0x7f]; else except_handle(EXCEPT_BUSERR, cur_vadd); return 0x00000000; } void test_reset (void *dat) { struct test_config *test = dat; int i; for (i = 0; i < 128; i++) test->array[i] = 0x00000000; } /*---------------------------------------------------[ Test configuration ]---*/ void test_baseaddr(union param_val val, void *dat) { struct test_config *test = dat; test->baseaddr = val.addr_val; } void *test_sec_start(void) { struct test_config *test = malloc(sizeof(struct test_config)); if(!test) { fprintf(stderr, "Peripheral Test: Run out of memory\n"); exit(-1); } test->baseaddr = 0; return test; } void test_sec_end(void *dat) { struct test_config *test = dat; if(test->baseaddr) register_memoryarea(test->baseaddr, 256, 4, 0, test_read32, test_write32, NULL); reg_sim_reset(test_reset, dat); } void reg_test_sec(void) { struct config_section *sec = reg_config_sec("test", test_sec_start, test_sec_end); reg_config_param(sec, "baseaddr", paramt_addr, test_baseaddr); }