69 lines
1.6 KiB
C
69 lines
1.6 KiB
C
|
/*
|
||
|
* Copyright (c) 2018, Synopsys, Inc.
|
||
|
*
|
||
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
*/
|
||
|
#include <rtthread.h>
|
||
|
|
||
|
#include "inc/arc/arc_exception.h"
|
||
|
|
||
|
/* enable interrupt and set interrupt priority mask */
|
||
|
#define ARC_INIT_STATUS (AUX_STATUS_MASK_IE | ((-1 - INT_PRI_MIN) << 1))
|
||
|
|
||
|
|
||
|
extern void start_r(void);
|
||
|
|
||
|
|
||
|
rt_uint32_t context_switch_reqflg;
|
||
|
rt_uint32_t rt_interrupt_from_thread;
|
||
|
rt_uint32_t rt_interrupt_to_thread;
|
||
|
|
||
|
struct init_stack_frame {
|
||
|
rt_uint32_t pc;
|
||
|
rt_uint32_t blink;
|
||
|
rt_uint32_t task;
|
||
|
rt_uint32_t status32;
|
||
|
rt_uint32_t r0;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* shutdown CPU
|
||
|
*/
|
||
|
void rt_hw_cpu_shutdown(void)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
rt_uint8_t *rt_hw_stack_init(void *tentry,
|
||
|
void *parameter,
|
||
|
rt_uint8_t *stack_addr,
|
||
|
void *texit)
|
||
|
{
|
||
|
struct init_stack_frame *stack_frame;
|
||
|
rt_uint8_t *stk;
|
||
|
|
||
|
stk = stack_addr + sizeof(rt_uint32_t);
|
||
|
stk = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stk, 8);
|
||
|
stk -= sizeof(struct init_stack_frame);
|
||
|
|
||
|
stack_frame = (struct init_stack_frame *)stk;
|
||
|
|
||
|
stack_frame->pc = (rt_uint32_t)start_r;
|
||
|
stack_frame->blink = (rt_uint32_t)texit;
|
||
|
stack_frame->task = (rt_uint32_t)tentry;
|
||
|
stack_frame->status32 = ARC_INIT_STATUS;
|
||
|
stack_frame->r0 = (rt_uint32_t)parameter;
|
||
|
|
||
|
return stk;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* This function set the hook, which is invoked on fault exception handling.
|
||
|
*
|
||
|
* @param exception_handle the exception handling hook function.
|
||
|
*/
|
||
|
void rt_hw_exception_install(rt_err_t (*exception_handle)(void *context))
|
||
|
{
|
||
|
exception_handle = exception_handle;
|
||
|
}
|