fix_math.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #ifndef _FIX_MATH_H__
  2. #define _FIX_MATH_H__
  3. #include "bsp/bsp.h"
  4. #include "os/os_types.h"
  5. typedef signed short _s16q14_t;
  6. typedef signed short _s16q10_t;
  7. typedef signed short _s16q5_t;
  8. typedef signed short _s16q4_t;
  9. typedef signed int _s32q4_t;
  10. #define S16Q4(A) (signed short)((A) * 16.0F)
  11. #define S16Q5(A) (signed short)((A) * 32.0F)
  12. #define S16Q10(A) (signed short)((A) * 1024.0F)
  13. #define S16Q14(A) (signed short)((A) * 16384.0F)
  14. #define S32Q4(A) (signed int)((A) * 16.0F)
  15. static __INLINE float S16Q4toF(_s16q4_t v) {
  16. s16 num = (v >> 4) & 0xFFFF;
  17. u16 tail = v & 0x000F;
  18. float f = num + (float)tail / 16.0f;
  19. return f;
  20. }
  21. static __INLINE float S16Q5toF(_s16q5_t v) {
  22. s16 num = (v >> 5) & 0xFFFF;
  23. u16 tail = v & 0x001F;
  24. float f = num + (float)tail / 32.0f;
  25. return f;
  26. }
  27. static __INLINE float S16Q10toF(_s16q5_t v) {
  28. s16 num = (v >> 10) & 0xFFFF;
  29. u16 tail = v & 0x03FF;
  30. float f = num + (float)tail / 1024.0f;
  31. return f;
  32. }
  33. static __INLINE float S32Q4toF(_s32q4_t v) {
  34. s32 num = (v >> 4) & 0xFFFFFFFF;
  35. u16 tail = v & 0x000F;
  36. float f = num + (float)tail / 16.0f;
  37. return f;
  38. }
  39. #endif /* _FIX_MATH_H__ */