cpuport.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. * Copyright (c) 2018, Synopsys, Inc.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include <rtthread.h>
  7. #include "inc/arc/arc_exception.h"
  8. /* enable interrupt and set interrupt priority mask */
  9. #define ARC_INIT_STATUS (AUX_STATUS_MASK_IE | ((-1 - INT_PRI_MIN) << 1))
  10. extern void start_r(void);
  11. rt_uint32_t context_switch_reqflg;
  12. rt_uint32_t rt_interrupt_from_thread;
  13. rt_uint32_t rt_interrupt_to_thread;
  14. struct init_stack_frame {
  15. rt_uint32_t pc;
  16. rt_uint32_t blink;
  17. rt_uint32_t task;
  18. rt_uint32_t status32;
  19. rt_uint32_t r0;
  20. };
  21. /**
  22. * shutdown CPU
  23. */
  24. void rt_hw_cpu_shutdown(void)
  25. {
  26. }
  27. rt_uint8_t *rt_hw_stack_init(void *tentry,
  28. void *parameter,
  29. rt_uint8_t *stack_addr,
  30. void *texit)
  31. {
  32. struct init_stack_frame *stack_frame;
  33. rt_uint8_t *stk;
  34. stk = stack_addr + sizeof(rt_uint32_t);
  35. stk = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stk, 8);
  36. stk -= sizeof(struct init_stack_frame);
  37. stack_frame = (struct init_stack_frame *)stk;
  38. stack_frame->pc = (rt_uint32_t)start_r;
  39. stack_frame->blink = (rt_uint32_t)texit;
  40. stack_frame->task = (rt_uint32_t)tentry;
  41. stack_frame->status32 = ARC_INIT_STATUS;
  42. stack_frame->r0 = (rt_uint32_t)parameter;
  43. return stk;
  44. }
  45. /**
  46. * This function set the hook, which is invoked on fault exception handling.
  47. *
  48. * @param exception_handle the exception handling hook function.
  49. */
  50. void rt_hw_exception_install(rt_err_t (*exception_handle)(void *context))
  51. {
  52. exception_handle = exception_handle;
  53. }