⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iqmathlib.h

📁 TI公司28XDSP控制永磁同步电机(PMSM)
💻 H
📖 第 1 页 / 共 5 页
字号:
//###########################################################################
//
// FILE:	IQmathLib.h
//
// TITLE:	IQ Math library functions definitions.
//
//###########################################################################
//
// Ver  | dd-mmm-yyyy |  Who  | Description of changes
// =====|=============|=======|==============================================
//  1.3 | 19 Nov 2001 | A. T. | Original Release.
// -----|-------------|-------|----------------------------------------------
//  1.4 | 17 May 2002 | A. T. | Added new functions and support for
//      |             |       | intrinsics IQmpy, IQxmpy, IQsat.
// -----|-------------|-------|----------------------------------------------
//  1.4a| 12 Jun 2002 | A. T. | Fixed problem with _IQ() operation on
//      |             |       | variables.
// -----|-------------|-------|----------------------------------------------
//  1.4b| 18 Jun 2002 | A. T. | Fixed bug with _IQtoIQN() and _IQNtoIQ()
//      |             |       | operations.
// -----|-------------|-------|----------------------------------------------
//      |             |       |
//
//###########################################################################
// 
// User needs to configure "MATH_TYPE" and "GLOBAL_Q" values:
//
//---------------------------------------------------------------------------
// Select math type, IQ_MATH or FLOAT_MATH:
//
#define   FLOAT_MATH     1
#define   IQ_MATH        0

#ifndef   MATH_TYPE
#define   MATH_TYPE      IQ_MATH
#endif

//---------------------------------------------------------------------------
// Select global Q value and scaling. The Q value is limited to the 
// following range for all functions:
//
//        30 <= GLOBAL_Q <=  1
//
#ifndef   GLOBAL_Q
#define   GLOBAL_Q       24
#endif

//---------------------------------------------------------------------------
// Various Usefull Constant Definitions:
//
#define   QG          GLOBAL_Q
#define   Q30         30
#define   Q29         29
#define   Q28         28
#define   Q27         27
#define   Q26         26
#define   Q25         25
#define   Q24         24
#define   Q23         23
#define   Q22         22
#define   Q21         21
#define   Q20         20
#define   Q19         19
#define   Q18         18
#define   Q17         17
#define   Q16         16
#define   Q15         15
#define   Q14         14
#define   Q13         13
#define   Q12         12
#define   Q11         11
#define   Q10         10
#define   Q9          9
#define   Q8          8
#define   Q7          7
#define   Q6          6
#define   Q5          5
#define   Q4          4
#define   Q3          3
#define   Q2          2
#define   Q1          1

#define   MAX_IQ_POS  2147483647 
#define   MAX_IQ_NEG  -2147483648
#define   MIN_IQ_POS  1
#define   MIN_IQ_NEG  -1

//###########################################################################
#if MATH_TYPE == IQ_MATH
//###########################################################################
// If IQ_MATH is used, the following IQmath library function definitions
// are used:
//===========================================================================
typedef   long    _iq;
typedef   long    _iq30;
typedef   long    _iq29;
typedef   long    _iq28;
typedef   long    _iq27;
typedef   long    _iq26;
typedef   long    _iq25;
typedef   long    _iq24;
typedef   long    _iq23;
typedef   long    _iq22;
typedef   long    _iq21;
typedef   long    _iq20;
typedef   long    _iq19;
typedef   long    _iq18;
typedef   long    _iq17;
typedef   long    _iq16;
typedef   long    _iq15;
typedef   long    _iq14;
typedef   long    _iq13;
typedef   long    _iq12;
typedef   long    _iq11;
typedef   long    _iq10;
typedef   long    _iq9;
typedef   long    _iq8;
typedef   long    _iq7;
typedef   long    _iq6;
typedef   long    _iq5;
typedef   long    _iq4;
typedef   long    _iq3;
typedef   long    _iq2;
typedef   long    _iq1;
//---------------------------------------------------------------------------
#define   _IQ30(A)      (long) (A * 1073741824.0L)
#define   _IQ29(A)      (long) (A * 536870912.0L)
#define   _IQ28(A)      (long) (A * 268435456.0L)
#define   _IQ27(A)      (long) (A * 134217728.0L)
#define   _IQ26(A)      (long) (A * 67108864.0L)
#define   _IQ25(A)      (long) (A * 33554432.0L)
#define   _IQ24(A)      (long) (A * 16777216.0L)
#define   _IQ23(A)      (long) (A * 8388608.0L)
#define   _IQ22(A)      (long) (A * 4194304.0L)
#define   _IQ21(A)      (long) (A * 2097152.0L)
#define   _IQ20(A)      (long) (A * 1048576.0L)
#define   _IQ19(A)      (long) (A * 524288.0L)
#define   _IQ18(A)      (long) (A * 262144.0L)
#define   _IQ17(A)      (long) (A * 131072.0L)
#define   _IQ16(A)      (long) (A * 65536.0L)
#define   _IQ15(A)      (long) (A * 32768.0L)
#define   _IQ14(A)      (long) (A * 16384.0L)
#define   _IQ13(A)      (long) (A * 8192.0L)
#define   _IQ12(A)      (long) (A * 4096.0L)
#define   _IQ11(A)      (long) (A * 2048.0L)
#define   _IQ10(A)      (long) (A * 1024.0L)
#define   _IQ9(A)       (long) (A * 512.0L)
#define   _IQ8(A)       (long) (A * 256.0L)
#define   _IQ7(A)       (long) (A * 128.0L)
#define   _IQ6(A)       (long) (A * 64.0L)
#define   _IQ5(A)       (long) (A * 32.0L)
#define   _IQ4(A)       (long) (A * 16.0L)
#define   _IQ3(A)       (long) (A * 8.0L)
#define   _IQ2(A)       (long) (A * 4.0L)
#define   _IQ1(A)       (long) (A * 2.0L)

#if GLOBAL_Q == 30
#define   _IQ(A)  _IQ30(A)
#endif
#if GLOBAL_Q == 29
#define   _IQ(A)  _IQ29(A)
#endif
#if GLOBAL_Q == 28
#define   _IQ(A)  _IQ28(A)
#endif
#if GLOBAL_Q == 27
#define   _IQ(A)  _IQ27(A)
#endif
#if GLOBAL_Q == 26
#define   _IQ(A)  _IQ26(A)
#endif
#if GLOBAL_Q == 25
#define   _IQ(A)  _IQ25(A)
#endif
#if GLOBAL_Q == 24
#define   _IQ(A)  _IQ24(A)
#endif
#if GLOBAL_Q == 23
#define   _IQ(A)  _IQ23(A)
#endif
#if GLOBAL_Q == 22
#define   _IQ(A)  _IQ22(A)
#endif
#if GLOBAL_Q == 21
#define   _IQ(A)  _IQ21(A)
#endif
#if GLOBAL_Q == 20
#define   _IQ(A)  _IQ20(A)
#endif
#if GLOBAL_Q == 19
#define   _IQ(A)  _IQ19(A)
#endif
#if GLOBAL_Q == 18
#define   _IQ(A)  _IQ18(A)
#endif
#if GLOBAL_Q == 17
#define   _IQ(A)  _IQ17(A)
#endif
#if GLOBAL_Q == 16
#define   _IQ(A)  _IQ16(A)
#endif
#if GLOBAL_Q == 15
#define   _IQ(A)  _IQ15(A)
#endif
#if GLOBAL_Q == 14
#define   _IQ(A)  _IQ14(A)
#endif
#if GLOBAL_Q == 13
#define   _IQ(A)  _IQ13(A)
#endif
#if GLOBAL_Q == 12
#define   _IQ(A)  _IQ12(A)
#endif
#if GLOBAL_Q == 11
#define   _IQ(A)  _IQ11(A)
#endif
#if GLOBAL_Q == 10
#define   _IQ(A)  _IQ10(A)
#endif
#if GLOBAL_Q == 9
#define   _IQ(A)  _IQ9(A)
#endif
#if GLOBAL_Q == 8
#define   _IQ(A)  _IQ8(A)
#endif
#if GLOBAL_Q == 7
#define   _IQ(A)  _IQ7(A)
#endif
#if GLOBAL_Q == 6
#define   _IQ(A)  _IQ6(A)
#endif
#if GLOBAL_Q == 5
#define   _IQ(A)  _IQ5(A)
#endif
#if GLOBAL_Q == 4
#define   _IQ(A)  _IQ4(A)
#endif
#if GLOBAL_Q == 3
#define   _IQ(A)  _IQ3(A)
#endif
#if GLOBAL_Q == 2
#define   _IQ(A)  _IQ2(A)
#endif
#if GLOBAL_Q == 1
#define   _IQ(A)  _IQ1(A)
#endif
//---------------------------------------------------------------------------
extern    float _IQ30toF(long A);
extern    float _IQ29toF(long A);
extern    float _IQ28toF(long A);
extern    float _IQ27toF(long A);
extern    float _IQ26toF(long A);
extern    float _IQ25toF(long A);
extern    float _IQ24toF(long A);
extern    float _IQ23toF(long A);
extern    float _IQ22toF(long A);
extern    float _IQ21toF(long A);
extern    float _IQ20toF(long A);
extern    float _IQ19toF(long A);
extern    float _IQ18toF(long A);
extern    float _IQ17toF(long A);
extern    float _IQ16toF(long A);
extern    float _IQ15toF(long A);
extern    float _IQ14toF(long A);
extern    float _IQ13toF(long A);
extern    float _IQ12toF(long A);
extern    float _IQ11toF(long A);
extern    float _IQ10toF(long A);
extern    float _IQ9toF(long A);
extern    float _IQ8toF(long A);
extern    float _IQ7toF(long A);
extern    float _IQ6toF(long A);
extern    float _IQ5toF(long A);
extern    float _IQ4toF(long A);
extern    float _IQ3toF(long A);
extern    float _IQ2toF(long A);
extern    float _IQ1toF(long A);

#if GLOBAL_Q == 30
#define   _IQtoF(A)  _IQ30toF(A)
#endif
#if GLOBAL_Q == 29
#define   _IQtoF(A)  _IQ29toF(A)
#endif
#if GLOBAL_Q == 28
#define   _IQtoF(A)  _IQ28toF(A)
#endif
#if GLOBAL_Q == 27
#define   _IQtoF(A)  _IQ27toF(A)
#endif
#if GLOBAL_Q == 26
#define   _IQtoF(A)  _IQ26toF(A)
#endif
#if GLOBAL_Q == 25
#define   _IQtoF(A)  _IQ25toF(A)
#endif
#if GLOBAL_Q == 24
#define   _IQtoF(A)  _IQ24toF(A)
#endif
#if GLOBAL_Q == 23
#define   _IQtoF(A)  _IQ23toF(A)
#endif
#if GLOBAL_Q == 22
#define   _IQtoF(A)  _IQ22toF(A)
#endif
#if GLOBAL_Q == 21
#define   _IQtoF(A)  _IQ21toF(A)
#endif
#if GLOBAL_Q == 20
#define   _IQtoF(A)  _IQ20toF(A)
#endif
#if GLOBAL_Q == 19
#define   _IQtoF(A)  _IQ19toF(A)
#endif
#if GLOBAL_Q == 18
#define   _IQtoF(A)  _IQ18toF(A)
#endif
#if GLOBAL_Q == 17
#define   _IQtoF(A)  _IQ17toF(A)
#endif
#if GLOBAL_Q == 16
#define   _IQtoF(A)  _IQ16toF(A)
#endif
#if GLOBAL_Q == 15
#define   _IQtoF(A)  _IQ15toF(A)
#endif
#if GLOBAL_Q == 14
#define   _IQtoF(A)  _IQ14toF(A)
#endif
#if GLOBAL_Q == 13
#define   _IQtoF(A)  _IQ13toF(A)
#endif
#if GLOBAL_Q == 12
#define   _IQtoF(A)  _IQ12toF(A)
#endif
#if GLOBAL_Q == 11
#define   _IQtoF(A)  _IQ11toF(A)
#endif
#if GLOBAL_Q == 10
#define   _IQtoF(A)  _IQ10toF(A)
#endif
#if GLOBAL_Q == 9
#define   _IQtoF(A)  _IQ9toF(A)
#endif
#if GLOBAL_Q == 8
#define   _IQtoF(A)  _IQ8toF(A)
#endif
#if GLOBAL_Q == 7
#define   _IQtoF(A)  _IQ7toF(A)
#endif
#if GLOBAL_Q == 6
#define   _IQtoF(A)  _IQ6toF(A)
#endif
#if GLOBAL_Q == 5
#define   _IQtoF(A)  _IQ5toF(A)
#endif
#if GLOBAL_Q == 4
#define   _IQtoF(A)  _IQ4toF(A)
#endif
#if GLOBAL_Q == 3
#define   _IQtoF(A)  _IQ3toF(A)
#endif
#if GLOBAL_Q == 2
#define   _IQtoF(A)  _IQ2toF(A)
#endif
#if GLOBAL_Q == 1
#define   _IQtoF(A)  _IQ1toF(A)
#endif
//---------------------------------------------------------------------------
#define   _IQsat(A, Pos, Neg)  __IQsat(A, Pos, Neg)
//---------------------------------------------------------------------------
#define   _IQtoIQ30(A)  ((long) A << (30 - GLOBAL_Q))
#define   _IQ30toIQ(A)  ((long) A >> (30 - GLOBAL_Q))

#define   _IQtoIQ29(A)  ((GLOBAL_Q >= 29) ? ((long) A >> (GLOBAL_Q - 29)):((long) A << (29 - GLOBAL_Q)))
#define   _IQ29toIQ(A)  ((GLOBAL_Q >= 29) ? ((long) A << (GLOBAL_Q - 29)):((long) A >> (29 - GLOBAL_Q)))

#define   _IQtoIQ28(A)  ((GLOBAL_Q >= 28) ? ((long) A >> (GLOBAL_Q - 28)):((long) A << (28 - GLOBAL_Q)))
#define   _IQ28toIQ(A)  ((GLOBAL_Q >= 28) ? ((long) A << (GLOBAL_Q - 28)):((long) A >> (28 - GLOBAL_Q)))

#define   _IQtoIQ27(A)  ((GLOBAL_Q >= 27) ? ((long) A >> (GLOBAL_Q - 27)):((long) A << (27 - GLOBAL_Q)))
#define   _IQ27toIQ(A)  ((GLOBAL_Q >= 27) ? ((long) A << (GLOBAL_Q - 27)):((long) A >> (27 - GLOBAL_Q)))

#define   _IQtoIQ26(A)  ((GLOBAL_Q >= 26) ? ((long) A >> (GLOBAL_Q - 26)):((long) A << (26 - GLOBAL_Q)))
#define   _IQ26toIQ(A)  ((GLOBAL_Q >= 26) ? ((long) A << (GLOBAL_Q - 26)):((long) A >> (26 - GLOBAL_Q)))

#define   _IQtoIQ25(A)  ((GLOBAL_Q >= 25) ? ((long) A >> (GLOBAL_Q - 25)):((long) A << (25 - GLOBAL_Q)))
#define   _IQ25toIQ(A)  ((GLOBAL_Q >= 25) ? ((long) A << (GLOBAL_Q - 25)):((long) A >> (25 - GLOBAL_Q)))

#define   _IQtoIQ24(A)  ((GLOBAL_Q >= 24) ? ((long) A >> (GLOBAL_Q - 24)):((long) A << (24 - GLOBAL_Q)))
#define   _IQ24toIQ(A)  ((GLOBAL_Q >= 24) ? ((long) A << (GLOBAL_Q - 24)):((long) A >> (24 - GLOBAL_Q)))

#define   _IQtoIQ23(A)  ((GLOBAL_Q >= 23) ? ((long) A >> (GLOBAL_Q - 23)):((long) A << (23 - GLOBAL_Q)))
#define   _IQ23toIQ(A)  ((GLOBAL_Q >= 23) ? ((long) A << (GLOBAL_Q - 23)):((long) A >> (23 - GLOBAL_Q)))

#define   _IQtoIQ22(A)  ((GLOBAL_Q >= 22) ? ((long) A >> (GLOBAL_Q - 22)):((long) A << (22 - GLOBAL_Q)))
#define   _IQ22toIQ(A)  ((GLOBAL_Q >= 22) ? ((long) A << (GLOBAL_Q - 22)):((long) A >> (22 - GLOBAL_Q)))

#define   _IQtoIQ21(A)  ((GLOBAL_Q >= 21) ? ((long) A >> (GLOBAL_Q - 21)):((long) A << (21 - GLOBAL_Q)))
#define   _IQ21toIQ(A)  ((GLOBAL_Q >= 21) ? ((long) A << (GLOBAL_Q - 21)):((long) A >> (21 - GLOBAL_Q)))

#define   _IQtoIQ20(A)  ((GLOBAL_Q >= 20) ? ((long) A >> (GLOBAL_Q - 20)):((long) A << (20 - GLOBAL_Q)))
#define   _IQ20toIQ(A)  ((GLOBAL_Q >= 20) ? ((long) A << (GLOBAL_Q - 20)):((long) A >> (20 - GLOBAL_Q)))

#define   _IQtoIQ19(A)  ((GLOBAL_Q >= 19) ? ((long) A >> (GLOBAL_Q - 19)):((long) A << (19 - GLOBAL_Q)))
#define   _IQ19toIQ(A)  ((GLOBAL_Q >= 19) ? ((long) A << (GLOBAL_Q - 19)):((long) A >> (19 - GLOBAL_Q)))

#define   _IQtoIQ18(A)  ((GLOBAL_Q >= 18) ? ((long) A >> (GLOBAL_Q - 18)):((long) A << (18 - GLOBAL_Q)))
#define   _IQ18toIQ(A)  ((GLOBAL_Q >= 18) ? ((long) A << (GLOBAL_Q - 18)):((long) A >> (18 - GLOBAL_Q)))

#define   _IQtoIQ17(A)  ((GLOBAL_Q >= 17) ? ((long) A >> (GLOBAL_Q - 17)):((long) A << (17 - GLOBAL_Q)))
#define   _IQ17toIQ(A)  ((GLOBAL_Q >= 17) ? ((long) A << (GLOBAL_Q - 17)):((long) A >> (17 - GLOBAL_Q)))

#define   _IQtoIQ16(A)  ((GLOBAL_Q >= 16) ? ((long) A >> (GLOBAL_Q - 16)):((long) A << (16 - GLOBAL_Q)))
#define   _IQ16toIQ(A)  ((GLOBAL_Q >= 16) ? ((long) A << (GLOBAL_Q - 16)):((long) A >> (16 - GLOBAL_Q)))

#define   _IQtoIQ15(A)  ((GLOBAL_Q >= 15) ? ((long) A >> (GLOBAL_Q - 15)):((long) A << (15 - GLOBAL_Q)))
#define   _IQ15toIQ(A)  ((GLOBAL_Q >= 15) ? ((long) A << (GLOBAL_Q - 15)):((long) A >> (15 - GLOBAL_Q)))

#define   _IQtoIQ14(A)  ((GLOBAL_Q >= 14) ? ((long) A >> (GLOBAL_Q - 14)):((long) A << (14 - GLOBAL_Q)))
#define   _IQ14toIQ(A)  ((GLOBAL_Q >= 14) ? ((long) A << (GLOBAL_Q - 14)):((long) A >> (14 - GLOBAL_Q)))

#define   _IQtoIQ13(A)  ((GLOBAL_Q >= 13) ? ((long) A >> (GLOBAL_Q - 13)):((long) A << (13 - GLOBAL_Q)))
#define   _IQ13toIQ(A)  ((GLOBAL_Q >= 13) ? ((long) A << (GLOBAL_Q - 13)):((long) A >> (13 - GLOBAL_Q)))

#define   _IQtoIQ12(A)  ((GLOBAL_Q >= 12) ? ((long) A >> (GLOBAL_Q - 12)):((long) A << (12 - GLOBAL_Q)))
#define   _IQ12toIQ(A)  ((GLOBAL_Q >= 12) ? ((long) A << (GLOBAL_Q - 12)):((long) A >> (12 - GLOBAL_Q)))

#define   _IQtoIQ11(A)  ((GLOBAL_Q >= 11) ? ((long) A >> (GLOBAL_Q - 11)):((long) A << (11 - GLOBAL_Q)))
#define   _IQ11toIQ(A)  ((GLOBAL_Q >= 11) ? ((long) A << (GLOBAL_Q - 11)):((long) A >> (11 - GLOBAL_Q)))

#define   _IQtoIQ10(A)  ((GLOBAL_Q >= 10) ? ((long) A >> (GLOBAL_Q - 10)):((long) A << (10 - GLOBAL_Q)))
#define   _IQ10toIQ(A)  ((GLOBAL_Q >= 10) ? ((long) A << (GLOBAL_Q - 10)):((long) A >> (10 - GLOBAL_Q)))

#define   _IQtoIQ9(A)   ((GLOBAL_Q >= 9) ? ((long) A >> (GLOBAL_Q - 9)):((long) A << (9 - GLOBAL_Q)))
#define   _IQ9toIQ(A)   ((GLOBAL_Q >= 9) ? ((long) A << (GLOBAL_Q - 9)):((long) A >> (9 - GLOBAL_Q)))

#define   _IQtoIQ8(A)   ((GLOBAL_Q >= 8) ? ((long) A >> (GLOBAL_Q - 8)):((long) A << (8 - GLOBAL_Q)))
#define   _IQ8toIQ(A)   ((GLOBAL_Q >= 8) ? ((long) A << (GLOBAL_Q - 8)):((long) A >> (8 - GLOBAL_Q)))

#define   _IQtoIQ7(A)   ((GLOBAL_Q >= 7) ? ((long) A >> (GLOBAL_Q - 7)):((long) A << (7 - GLOBAL_Q)))
#define   _IQ7toIQ(A)   ((GLOBAL_Q >= 7) ? ((long) A << (GLOBAL_Q - 7)):((long) A >> (7 - GLOBAL_Q)))

#define   _IQtoIQ6(A)   ((GLOBAL_Q >= 6) ? ((long) A >> (GLOBAL_Q - 6)):((long) A << (6 - GLOBAL_Q)))
#define   _IQ6toIQ(A)   ((GLOBAL_Q >= 6) ? ((long) A << (GLOBAL_Q - 6)):((long) A >> (6 - GLOBAL_Q)))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -