TM52F1386_calc_bsp.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #include <REGtenxTM52F1386.h>
  2. #include <intrins.h>
  3. #include "TM52F1386_calc_bsp.h"
  4. /* 中间值定义成全局变量,不用定义局部变量节省时间
  5. * 使用时,该函数是不可重载函数,需要特别注意不能在中断和主函数中同时使用
  6. * 建议使用该函数前关闭中断
  7. */
  8. calc_mid_t clac_mid;
  9. unsigned char mid_1,mid_2;
  10. /* 16bit无符号数 乘以 16bit 无符号数
  11. * 返回结果为32bit 无符号数
  12. */
  13. /******************************************************************************************
  14. ** 函数名称: mul_32
  15. ** 函数描述: 乘法模式
  16. ** 输入参数: 无
  17. ** 输出参数: 无
  18. *******************************************************************************************/
  19. unsigned long mul_32(unsigned int a,unsigned int b)
  20. {
  21. clac_mid.us16[0] = a;
  22. mid_1 = clac_mid.us8[1];
  23. EXA = clac_mid.us8[0];
  24. clac_mid.us16[0] = b;
  25. mid_2 = clac_mid.us8[1];
  26. EXB = clac_mid.us8[0];
  27. AUX2 = (AUX2&0xf6)|0x1;
  28. clac_mid.tt.us12 = mid_1*mid_2;
  29. clac_mid.tt.us3 = EXA;
  30. clac_mid.tt.us0 = EXB;
  31. AUX2 = (AUX2&0xf6);
  32. return clac_mid.us32;
  33. }
  34. /******************************************************************************************
  35. ** 函数名称: div_32
  36. ** 函数描述: 除法模式
  37. ** 输入参数: 无
  38. ** 输出参数: 无
  39. *******************************************************************************************/
  40. unsigned long div_32(unsigned long a,unsigned int b)
  41. {
  42. // calc_mid_t clac_mid;
  43. // unsigned char mid_1,mid_2;
  44. clac_mid.us32 = a;
  45. mid_1 = clac_mid.us8[3];
  46. EXA = clac_mid.us8[2];
  47. EXA2 = clac_mid.us8[1];
  48. EXA3 = clac_mid.us8[0];
  49. clac_mid.us16[0] = b;
  50. mid_2 = clac_mid.us8[1];
  51. EXB = clac_mid.us8[0];
  52. AUX2 = (AUX2&0xf6)|0x9;
  53. clac_mid.us8[0] = mid_1/mid_2;
  54. clac_mid.us8[1] = EXA;
  55. clac_mid.us8[2] = EXA2;
  56. clac_mid.us8[3] = EXA3;
  57. AUX2 = (AUX2&0xf6);
  58. return clac_mid.us32;
  59. }
  60. /******************************************************************************************
  61. ** 函数名称: mod_32
  62. ** 函数描述: mod模式
  63. ** 输入参数: 无
  64. ** 输出参数: 无
  65. *******************************************************************************************/
  66. unsigned int mod_32(unsigned long a,unsigned int b)
  67. {
  68. clac_mid.us32 = a;
  69. mid_1 = clac_mid.us8[3];
  70. EXA = clac_mid.us8[2];
  71. EXA2 = clac_mid.us8[1];
  72. EXA3 = clac_mid.us8[0];
  73. clac_mid.us16[0] = b;
  74. mid_2 = clac_mid.us8[1];
  75. EXB = clac_mid.us8[0];
  76. AUX2 = (AUX2&0xf6)|0x9;
  77. clac_mid.us8[0] = mid_1%mid_2;
  78. clac_mid.us8[1] = EXB;
  79. // clac_mid.us8[2] = EXA2;
  80. // clac_mid.us8[3] = EXA3;
  81. AUX2 = (AUX2&0xf6);
  82. return clac_mid.us16[0];
  83. }