furi_hal_task.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "furi_hal_task.h"
  2. //-----------------------------cmsis_os2.c-------------------------------
  3. // helpers to get isr context
  4. // get arch
  5. #ifndef __ARM_ARCH_6M__
  6. #define __ARM_ARCH_6M__ 0
  7. #endif
  8. #ifndef __ARM_ARCH_7M__
  9. #define __ARM_ARCH_7M__ 0
  10. #endif
  11. #ifndef __ARM_ARCH_7EM__
  12. #define __ARM_ARCH_7EM__ 0
  13. #endif
  14. #ifndef __ARM_ARCH_8M_MAIN__
  15. #define __ARM_ARCH_8M_MAIN__ 0
  16. #endif
  17. #ifndef __ARM_ARCH_7A__
  18. #define __ARM_ARCH_7A__ 0
  19. #endif
  20. // get masks
  21. #if((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M_MAIN__ == 1U))
  22. #define IS_IRQ_MASKED() ((__get_PRIMASK() != 0U) || (__get_BASEPRI() != 0U))
  23. #elif(__ARM_ARCH_6M__ == 1U)
  24. #define IS_IRQ_MASKED() (__get_PRIMASK() != 0U)
  25. #elif(__ARM_ARCH_7A__ == 1U)
  26. /* CPSR mask bits */
  27. #define CPSR_MASKBIT_I 0x80U
  28. #define IS_IRQ_MASKED() ((__get_CPSR() & CPSR_MASKBIT_I) != 0U)
  29. #else
  30. #define IS_IRQ_MASKED() (__get_PRIMASK() != 0U)
  31. #endif
  32. // get is irq mode
  33. #if(__ARM_ARCH_7A__ == 1U)
  34. /* CPSR mode bitmasks */
  35. #define CPSR_MODE_USER 0x10U
  36. #define CPSR_MODE_SYSTEM 0x1FU
  37. #define IS_IRQ_MODE() ((__get_mode() != CPSR_MODE_USER) && (__get_mode() != CPSR_MODE_SYSTEM))
  38. #else
  39. #define IS_IRQ_MODE() (__get_IPSR() != 0U)
  40. #endif
  41. // added osKernelGetState(), because KernelState is a static var
  42. #define IS_IRQ() (IS_IRQ_MODE() || (IS_IRQ_MASKED() && (osKernelGetState() == osKernelRunning)))
  43. //-------------------------end of cmsis_os2.c----------------------------
  44. bool task_is_isr_context(void) {
  45. return IS_IRQ();
  46. }