SMDU.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /**
  2. * @copyright (C) COPYRIGHT 2022 Fortiortech Shenzhen
  3. * @file SMDU.h
  4. * @author Marcel He
  5. * @note Last modify author is Marcel He
  6. * @since 2022-07-14
  7. * @date 2022-07-14
  8. * @brief
  9. */
  10. #ifndef __S_M_D_U_H_
  11. #define __S_M_D_U_H_
  12. #include <FU68xx_5.h>
  13. /**
  14. * @brief SMDU的模式类型
  15. *
  16. * @note 使用@ref SMDU_RunNoBlock时, 其中的mode参数可以直接使用本枚举的内容
  17. * @note 使用@ref SMDU_RunBlock时, 其中的mode参数可以直接使用本枚举的内容
  18. */
  19. typedef enum
  20. {
  21. S1MUL = 0, /**< 有符号乘法, 计算结果左移1位 */
  22. SMUL = 1, /**< 有符号乘法 */
  23. UMUL = 2, /**< 无符号乘法 */
  24. DIV = 3, /**< 32/16无符号除法 */
  25. SIN_COS = 4, /**< Sin/Cos */
  26. ATAN = 5, /**< ATan */
  27. LPF = 6, /**< 低通滤波 */
  28. PI = 7 /**< PI */
  29. } ETypeSMDUMode;
  30. /******************************************************************************///External Symbols
  31. /******************************************************************************///External Function
  32. /**
  33. * @brief 运行SMDU且不等待运行结束
  34. *
  35. * @param stan (0-3) 要启动的计算单元编号
  36. * @param mode (0-7) 指定计算单元的模式, 可使用@ref ETypeSMDUMode 作为计算模式的设置\n
  37. * @ref S1MUL 有符号乘法, 计算结果左移1位 \n
  38. * @ref SMUL 有符号乘法 \n
  39. * @ref UMUL 无符号乘法 \n
  40. * @ref DIV 32/16无符号除法 \n
  41. * @ref SIN_COS Sin/Cos \n
  42. * @ref ATAN ATan \n
  43. * @ref LPF 低通滤波 \n
  44. * @ref PI PI \n
  45. */
  46. #define SMDU_RunNoBlock(stan, mode) do \
  47. { \
  48. MDU_CR = MDUSTA0 << stan | (unsigned char)mode; \
  49. } while (0)
  50. /**
  51. * @brief 运行SMDU且等待运行结束
  52. *
  53. * @param stan (0-3) 要启动的计算单元编号
  54. * @param mode (0-7) 指定计算单元的模式, 可使用@ref ETypeSMDUMode 作为计算模式的设置\n
  55. * @ref S1MUL 有符号乘法, 计算结果左移1位 \n
  56. * @ref SMUL 有符号乘法 \n
  57. * @ref UMUL 无符号乘法 \n
  58. * @ref DIV 32/16无符号除法 \n
  59. * @ref SIN_COS Sin/Cos \n
  60. * @ref ATAN ATan \n
  61. * @ref LPF 低通滤波 \n
  62. * @ref PI PI \n
  63. */
  64. #define SMDU_RunBlock(stan, mode) do \
  65. { \
  66. SMDU_RunNoBlock(stan, mode); \
  67. while (MDU_CR & MDUBSY); \
  68. } while (0);
  69. /* SMDU控制 */
  70. extern int16 HW_One_PI(int16 Xn1);
  71. extern int16 HW_One_PI2(int16 Xn1);
  72. extern int16 HW_One_PI3(int16 Xn1);
  73. extern int16 LPFFunction(int16 Xn1, int16 Xn0, int8 K);
  74. extern int16 Atan_Us_MDU(int16 Xn1, int16 Xn0);
  75. extern int16 DivQ_L_MDU(uint16 Xn1, uint16 Xn0,uint16 Yn);
  76. extern uint16 Sqrt_alpbet(int16 i_alp, int16 i_bet);
  77. #endif