Описание библиотеки микросхемы 5023ВС016 процессора "Спутник"
fpu.c
См. документацию.
1 
29 #include "chip_5023BC016.h"
30 #include "system.h"
31 #include "fpu.h"
32 
33 #define PI 3.14159265358979323846
34 
35 
40 void FPU_DeInit(void)
41 {
45 }
46 
51 void FPU_Init(void)
52 {
56 }
57 
58 
65 float FPU_ADD(float A, float B)
66 {
67  FPU->ADD_SUB = FPU_ADD_SUB_ADD_EN;
68  FPU->ADD_A = A;
69  FPU->ADD_B = B;
70  FPU->CONTROL = FPU_CONTROL_ADD_EN;
71  return FPU->ADD_OUT;
72 }
73 
80 float FPU_SUB(float A, float B)
81 {
82  FPU->ADD_SUB = FPU_ADD_SUB_SUB_EN;
83  FPU->ADD_A = A;
84  FPU->ADD_B = B;
85  FPU->CONTROL = FPU_CONTROL_ADD_EN;
86  return FPU->ADD_OUT;
87 }
88 
95 float FPU_MUL(float A, float B)
96 {
97  FPU->MUL_A = A;
98  FPU->MUL_B = B;
99  FPU->CONTROL = FPU_CONTROL_MUL_EN;
100  return FPU->MUL_OUT;
101 }
102 
110 float FPU_SIN(float A)
111 {
112  if (-1<A<1)
113  {
114  float T = FPU_MUL(FPU_MUL(A,A),A);
115  float X = FPU_SUB(A,(float)(T/factorial(3)));
116  float Y = FPU_MUL(FPU_MUL(T,A),A);
117  float res = FPU_ADD(X,(float)(Y/factorial(5)));
118  return res;
119  }
120  else
121  {
122  float res = sinf(A);
123  return res;
124  }
125 }
126 
134 float FPU_COS(float A)
135 {
136  if (-1<A<1)
137  {
138  float T = FPU_MUL(A,A);
139  float X = FPU_SUB(1,(float)(T/factorial(2)));
140  float Y = FPU_MUL(FPU_MUL(T,A),A);
141  float res = FPU_ADD(X,(float)(Y/factorial(4)));
142  return res;
143  }
144  else
145  {
146  float res = cosf(A);
147  return res;
148  }
149 }
150 
156 float FPU_sqrt(float A)
157 {
158  return sqrtf(A);
159 }
160 
166 float FPU_pow2(float A)
167 {
168  return FPU_MUL(A,A);
169 }
170 
176 float FPU_pow3(float A)
177 {
178  return FPU_MUL(FPU_pow2(A),A);
179 }
180 
188 float FPU_tg(float A)
189 {
190  if (-1<A<1)
191  {
192  float T = FPU_pow3(A);
193  float X = FPU_ADD(A,3);
194  float Y = FPU_MUL(FPU_MUL(FPU_pow3(A),A),A);
195  float res = FPU_ADD(X,2*Y/15);
196  return res;
197  }
198  else
199  {
200  float res = tanf(A);
201  return res;
202  }
203 }
204 
212 float FPU_atg(float A)
213 {
214  if (-1<A<1)
215  {
216  float T = FPU_pow3(A);
217  float X = FPU_SUB(A,3);
218  float Y = FPU_MUL(FPU_MUL(FPU_pow3(A),A),A);
219  float res = FPU_ADD(X,2*Y/15);
220  return res;
221  }
222  else
223  {
224  float res = atanf(A);
225  return res;
226  }
227 }
228 
236 float FPU_ASIN(float A)
237 {
238  if (-1<A<1)
239  {
240  float T = FPU_MUL(FPU_MUL(A,A),A);
241  float X = FPU_ADD(A,(float)(T/6));
242  float Y = FPU_MUL(FPU_MUL(T,A),A);
243  float res = FPU_ADD(X,(float)(3*Y/40));
244  return res;
245  }
246  else
247  {
248  float res = asinf(A);
249  return res;
250  }
251 }
252 
260 float FPU_ACOS(float A)
261 {
262  if (-1<A<1)
263  {
264  float res = PI - FPU_ASIN(A);
265  return res;
266 
267  }
268  else
269  {
270  float res = acosf(A);
271  return res;
272  }
273 }
274 
#define FPU
Указатель на структуру FPU.
void PWR_RST_Enable(CTRL_T CTRLn)
Ввод модуля в асинхронный сброс
Definition: system.c:309
static int factorial(int n)
Факториал
Definition: fpu.h:102
float FPU_ASIN(float A)
вычисление арксинуса
Definition: fpu.c:236
float FPU_COS(float A)
вычисление косинуса
Definition: fpu.c:134
float FPU_SIN(float A)
вычисление синуса
Definition: fpu.c:110
#define FPU_CONTROL_MUL_EN
Definition: fpu.h:61
Этот файл содержит описание адресного пространства микроконтроллера 5023ВС016.
float FPU_ACOS(float A)
вычисление арккосинуса
Definition: fpu.c:260
void PWR_CLK_Disable(CTRL_T CTRLn)
Отключение тактового сигнала от модуля
Definition: system.c:328
float FPU_pow3(float A)
Возведение в куб при помощи блока FPU.
Definition: fpu.c:176
#define CLK_INIT_PAUSE
Definition: system.h:40
float FPU_tg(float A)
вычисление тангенса
Definition: fpu.c:188
#define FPU_ADD_SUB_ADD_EN
Definition: fpu.h:55
float FPU_sqrt(float A)
Вычисление квадратного корня при помощи блока FPU.
Definition: fpu.c:156
void PWR_RST_Disable(CTRL_T CTRLn)
Вывод модуля из асинхронного сброса
Definition: system.c:318
void PWR_CLK_Enable(CTRL_T CTRLn)
Подача тактового сигнала на модуль
Definition: system.c:337
float FPU_SUB(float A, float B)
Вычитание двух чисел при помощи блока FPU.
Definition: fpu.c:80
float FPU_ADD(float A, float B)
Сложение двух чисел при помощи блока FPU.
Definition: fpu.c:65
float FPU_MUL(float A, float B)
умножение двух чисел при помощи блока FPU.
Definition: fpu.c:95
float FPU_pow2(float A)
Возведение в квадрат при помощи блока FPU.
Definition: fpu.c:166
#define FPU_CONTROL_ADD_EN
Макросы и типы для регистра CONTROL.
Definition: fpu.h:60
Этот файл содержит структуры, макросы и функции необходимые для взаимодействия с регистрами общего на...
Этот файл содержит структуры, макросы и функции необходимые для взаимодействия с аппаратным блоком FP...
#define PI
Пи
Definition: fpu.c:33
void FPU_DeInit(void)
Сброс блока FPU.
Definition: fpu.c:40
float FPU_atg(float A)
вычисление арктангенса
Definition: fpu.c:212
#define FPU_ADD_SUB_SUB_EN
Макросы и типы для регистра ADD_SUB.
Definition: fpu.h:54
void FPU_Init(void)
Инициализация блока FPU.
Definition: fpu.c:51