csi_core.h 996 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. * Copyright (C) 2017-2019 Alibaba Group Holding Limited
  3. */
  4. /******************************************************************************
  5. * @file csi_core.h
  6. * @brief Header File for csi_core
  7. * @version V1.0
  8. * @date 12. june 2019
  9. ******************************************************************************/
  10. #ifndef _CSI_CORE_H_
  11. #define _CSI_CORE_H_
  12. #include <stddef.h>
  13. #include <cmsis_gcc.h>
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. #ifdef __GNUC__
  18. __STATIC_INLINE size_t csi_irq_save(void)
  19. {
  20. uint32_t result;
  21. result = __get_PRIMASK();
  22. __disable_irq();
  23. return (result);
  24. }
  25. __STATIC_INLINE void csi_irq_restore(size_t irq_state)
  26. {
  27. __set_PRIMASK(irq_state);
  28. }
  29. #else
  30. static inline __asm size_t csi_irq_save(void)
  31. {
  32. MRS R0, PRIMASK
  33. CPSID I
  34. BX LR
  35. return 0;
  36. }
  37. static inline __asm void csi_irq_restore(size_t irq_state)
  38. {
  39. MSR PRIMASK, R0
  40. BX LR
  41. }
  42. #endif
  43. #ifdef __cplusplus
  44. }
  45. #endif
  46. #endif /* _CSI_CORE_H_ */