sysview.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * Copyright (c) 2018 Intel Corporation
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include <zephyr.h>
  7. #include <kernel_structs.h>
  8. #include <init.h>
  9. #include <ksched.h>
  10. #include <SEGGER_SYSVIEW.h>
  11. static uint32_t interrupt;
  12. uint32_t sysview_get_timestamp(void)
  13. {
  14. return k_cycle_get_32();
  15. }
  16. uint32_t sysview_get_interrupt(void)
  17. {
  18. #ifdef CONFIG_CPU_CORTEX_M
  19. interrupt = ((SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) >>
  20. SCB_ICSR_VECTACTIVE_Pos);
  21. #endif
  22. return interrupt;
  23. }
  24. void sys_trace_k_thread_switched_in(void)
  25. {
  26. struct k_thread *thread;
  27. thread = k_current_get();
  28. if (z_is_idle_thread_object(thread)) {
  29. SEGGER_SYSVIEW_OnIdle();
  30. } else {
  31. SEGGER_SYSVIEW_OnTaskStartExec((uint32_t)(uintptr_t)thread);
  32. }
  33. }
  34. void sys_trace_k_thread_switched_out(void)
  35. {
  36. SEGGER_SYSVIEW_OnTaskStopExec();
  37. }
  38. void sys_trace_isr_enter(void)
  39. {
  40. SEGGER_SYSVIEW_RecordEnterISR();
  41. }
  42. void sys_trace_isr_exit(void)
  43. {
  44. SEGGER_SYSVIEW_RecordExitISR();
  45. }
  46. void sys_trace_isr_exit_to_scheduler(void)
  47. {
  48. SEGGER_SYSVIEW_RecordExitISRToScheduler();
  49. }
  50. void sys_trace_idle(void)
  51. {
  52. SEGGER_SYSVIEW_OnIdle();
  53. }
  54. static int sysview_init(const struct device *arg)
  55. {
  56. ARG_UNUSED(arg);
  57. SEGGER_SYSVIEW_Conf();
  58. if (IS_ENABLED(CONFIG_SEGGER_SYSTEMVIEW_BOOT_ENABLE)) {
  59. SEGGER_SYSVIEW_Start();
  60. }
  61. return 0;
  62. }
  63. SYS_INIT(sysview_init, POST_KERNEL, 0);