OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_47/] [or1ksim/] [testbench/] [uos/] [except_or32.S] - Diff between revs 511 and 970

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 511 Rev 970
Line 1... Line 1...
/* This file is part of test microkernel for OpenRISC 1000. */
/* This file is part of test microkernel for OpenRISC 1000. */
/* (C) 2000 Damjan Lampret, lampret@opencores.org */
/* (C) 2000 Damjan Lampret, lampret@opencores.org */
 
 
#include "spr_defs.h"
#include "spr_defs.h"
 
#include "../board.h"
 
 
 
#define MC_CSR          (0x00)
 
#define MC_POC          (0x04)
 
#define MC_BA_MASK      (0x08)
 
#define MC_CSC(i)       (0x10 + (i) * 8)
 
#define MC_TMS(i)       (0x14 + (i) * 8)
 
 
 
 
/*
/*
 * Context is saved to area pointed by pointer in R3. Original
 * Context is saved to area pointed by pointer in R3. Original
 * R3 is at memory location 0 and task's PC is at memory location 4.
 * R3 is at memory location 0 and task's PC is at memory location 4.
 */
 */
Line 163... Line 171...
/*
/*
 * Reset Exception handler
 * Reset Exception handler
 */
 */
.org 0x100
.org 0x100
_reset_vector:
_reset_vector:
 
 
 
  l.movhi r3,hi(MC_BASE_ADDR)
 
  l.ori   r3,r3,lo(MC_BASE_ADDR)
 
 
 
  l.addi  r4,r3,MC_CSC(0)
 
  l.movhi r5,hi(FLASH_BASE_ADDR)
 
  l.srai  r5,r5,6
 
  l.ori   r5,r5,0x0025
 
  l.sw    0(r4),r5
 
 
 
  l.addi  r4,r3,MC_TMS(0)
 
  l.movhi r5,hi(FLASH_TMS_VAL)
 
  l.ori   r5,r5,lo(FLASH_TMS_VAL)
 
  l.sw    0(r4),r5
 
 
 
  l.addi  r4,r3,MC_BA_MASK
 
  l.addi  r5,r0,MC_MASK_VAL
 
  l.sw    0(r4),r5
 
 
 
  l.addi  r4,r3,MC_CSR
 
  l.movhi r5,hi(MC_CSR_VAL)
 
  l.ori   r5,r5,lo(MC_CSR_VAL)
 
  l.sw    0(r4),r5
 
 
 
  l.addi  r4,r3,MC_TMS(1)
 
  l.movhi r5,hi(SDRAM_TMS_VAL)
 
  l.ori   r5,r5,lo(SDRAM_TMS_VAL)
 
  l.sw    0(r4),r5
 
 
 
  l.addi  r4,r3,MC_CSC(1)
 
  l.movhi r5,hi(SDRAM_BASE_ADDR)
 
  l.srai  r5,r5,6
 
  l.ori   r5,r5,0x0411
 
  l.sw    0(r4),r5
 
 
 
  l.jr    r9
 
  l.nop
 
 
 
  /* Copy data section */
 
  l.movhi r3,hi(_src_beg)
 
  l.ori   r3,r3,lo(_src_beg)
 
  l.addi  r4,r0,0x200
 
  l.movhi r5,hi(_except_end)
 
  l.ori   r5,r5,lo(_except_end)
 
  l.movhi r6,hi(_except_beg)
 
  l.ori   r6,r6,lo(_except_beg)
 
  l.sub   r5,r6,r5
 
1:
 
  l.lwz   r6,0(r3)
 
  l.sw    0(r4),r6
 
  l.addi  r3,r3,4
 
  l.addi  r4,r4,4
 
  l.addi  r5,r5,-4
 
  l.sfgtsi r5,0
 
  l.bf    1b
 
  l.nop
 
 
 
  l.movhi r4,hi(_dst_beg)
 
  l.ori   r4,r4,lo(_dst_beg)
 
  l.movhi r5,hi(_dst_end)
 
  l.ori   r5,r5,lo(_dst_end)
 
  l.sub   r5,r5,r4
 
  l.sfeqi r5,0
 
  l.bf    2f
        l.nop
        l.nop
 
1:
 
  l.lwz   r6,0(r3)
 
  l.sw    0(r4),r6
 
  l.addi  r3,r3,4
 
  l.addi  r4,r4,4
 
  l.addi  r5,r5,-4
 
  l.sfgtsi r5,0
 
  l.bf          1b
 
  l.nop
 
 
 
2:
 
 
 
 
  l.movhi r2,hi(_reset)
  l.movhi r2,hi(_reset)
  l.ori   r2,r2,lo(_reset)
  l.ori   r2,r2,lo(_reset)
  l.jr    r2
  l.jr    r2
  l.nop
  l.nop
 
 
/*
/*
 
 * Switch to a new context pointed by _task_context
 
 */
 
.global _dispatch
 
.align 4
 
_dispatch:
 
        /* load user task GPRs and PC */
 
        l.movhi r3,hi(_task_context)
 
        l.addi  r3,r0,lo(_task_context)
 
        LOADREGS_N_GO
 
 
 
.section .except, "ax"
 
 
 
/*
 * Bus Error Exception handler
 * Bus Error Exception handler
 */
 */
.org 0x0200
.org 0x0200
_buserr:
_buserr:
        l.nop
        l.nop
Line 193... Line 291...
_extint:
_extint:
        l.nop
        l.nop
        l.sw    0(r0),r3        /* Save r3 */
        l.sw    0(r0),r3        /* Save r3 */
        PRINTF(r3,_extint_str)
        PRINTF(r3,_extint_str)
        l.mfspr r3,r0,SPR_EPCR_BASE     /* Get EPCR */
        l.mfspr r3,r0,SPR_EPCR_BASE     /* Get EPCR */
/*      l.addi  r3,r3,4         /* increment because EPCR instruction was already executed */
 
        l.sw    4(r0),r3        /* and save it */
        l.sw    4(r0),r3        /* and save it */
 
 
        /* now save user task context */
        /* now save user task context */
        l.movhi r3,hi(_task_context)
        l.movhi r3,hi(_task_context)
        l.addi  r3,r0,lo(_task_context)
        l.addi  r3,r0,lo(_task_context)
Line 249... Line 346...
        LOADREGS_N_GO
        LOADREGS_N_GO
 
 
_syscall_str:
_syscall_str:
        .ascii  "System call exception.\n\000"
        .ascii  "System call exception.\n\000"
 
 
/*
 
 * Switch to a new context pointed by _task_context
 
 */
 
.global _dispatch
 
.align 4
 
_dispatch:
 
        /* load user task GPRs and PC */
 
        l.movhi r3,hi(_task_context)
 
        l.addi  r3,r0,lo(_task_context)
 
        LOADREGS_N_GO
 
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.