Описание библиотеки микросхемы 5023ВС016 процессора "Спутник"
fpu_test.c
См. документацию.
1 
29 #include "fpu_test.h"
30 
31 
32 char dbg_buffer[256]; // Отладочный буфер
33 const uint32_t sys_freq = 80000000; // Системная частота
34 
40 bool FPU_Test()
41 {
42  FPU_Init(); // Инициализация блока FPU.
43  float result [24]; // массив с результатом
44  PRINT("Тестрование FPU");
45 
46  PRINT(" Операция: 0");
47  result[0] = FPU_SUB(155.625, 1.5); // Вычитание двух чисел при помощи блока FPU
48  if (result[0] != 154.125)
49  {
50  PRINT(" ОШИБКА: Операция вычитания неуспешна");
51  FPU_DeInit(); // Сброс блока FPU.
52  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
53  return false;
54  }
55 
56  PRINT(" Операция: 1");
57 
58  result[1] = FPU_SUB(1.5, 1.5); // Вычитание двух чисел при помощи блока FPU
59  if (result[1] != 0)
60  {
61  PRINT(" ОШИБКА: Операция вычитания неуспешна");
62  FPU_DeInit(); // Сброс блока FPU.
63  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
64  return false;
65  }
66 
67  PRINT(" Операция: 2");
68 
69  result[2] = FPU_ADD(1.5, 155.625); // Сложение двух чисел при помощи блока FPU
70  if (result[2] != 157.125)
71  {
72  PRINT(" ОШИБКА: Операция сложения неуспешна");
73  FPU_DeInit(); // Сброс блока FPU.
74  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
75  return false;
76  }
77 
78  PRINT(" Операция: 3");
79  result[3] = FPU_ADD(155.625, 1.5); // Сложение двух чисел при помощи блока FPU
80  if (result[3] != 157.125)
81  {
82  PRINT(" ОШИБКА: Операция сложения неуспешна");
83  FPU_DeInit(); // Сброс блока FPU.
84  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
85  return false;
86  }
87 
88  PRINT(" Операция: 4");
89  result[4] = FPU_ADD(155.625, -1.5); // Сложение двух чисел при помощи блока FPU
90  if (result[4] != 154.125)
91  {
92  PRINT(" ОШИБКА: Операция сложения неуспешна");
93  FPU_DeInit(); // Сброс блока FPU.
94  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
95  return false;
96  }
97 
98  PRINT(" Операция: 5");
99  result[5] = FPU_ADD(-155.625, 1.5); // Сложение двух чисел при помощи блока FPU
100  if (result[5] != -154.125)
101  {
102  PRINT(" ОШИБКА: Операция сложения неуспешна");
103  FPU_DeInit(); // Сброс блока FPU.
104  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
105  return false;
106  }
107 
108  PRINT(" Операция: 6");
109  result[6] = FPU_MUL(155.625, 1.5); // Умножение двух чисел при помощи блока FPU
110  if (result[6] != 233.4375)
111  {
112  PRINT(" ОШИБКА: Операция умножения неуспешна");
113  FPU_DeInit(); // Сброс блока FPU.
114  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
115  return false;
116  }
117 
118  PRINT(" Операция: 7");
119  result[7] = FPU_MUL(1.5, 155.625); // Умножение двух чисел при помощи блока FPU
120  if (result[7] != 233.4375)
121  {
122  PRINT(" ОШИБКА: Операция умножения неуспешна");
123  FPU_DeInit(); // Сброс блока FPU.
124  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
125  return false;
126  }
127 
128  PRINT(" Операция: 8");
129  result[8] = FPU_MUL(155.625, -1.5); // Умножение двух чисел при помощи блока FPU
130  if (result[8] != -233.4375)
131  {
132  PRINT(" ОШИБКА: Операция умножения неуспешна");
133  FPU_DeInit(); // Сброс блока FPU.
134  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
135  return false;
136  }
137 
138  PRINT(" Операция: 9");
139  result[9] = FPU_MUL(-155.625, 1.5); // Умножение двух чисел при помощи блока FPU
140  if (result[9] != -233.4375)
141  {
142  PRINT(" ОШИБКА: Операция умножения неуспешна");
143  FPU_DeInit(); // Сброс блока FPU.
144  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
145  return false;
146  }
147 
148  PRINT(" Операция: 10 - Синус");
149  result[10] = FPU_SIN(0.5); // Синус при помощи блока FPU
150  if (result[10] != (float)4.79425549E-1)
151  {
152  PRINT(" ОШИБКА: Операция синус неуспешна");
153  FPU_DeInit(); // Сброс блока FPU.
154  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
155  return false;
156  }
157 
158  PRINT(" Операция: 11 - Косинус");
159  result[11] = FPU_COS(0.5); // Синус при помощи блока FPU
160  if (result[11] != (float)8.7758255E-1)
161  {
162  PRINT(" ОШИБКА: Операция Косинус неуспешна");
163  FPU_DeInit(); // Сброс блока FPU.
164  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
165  return false;
166  }
167 
168  PRINT(" Операция: 12 - Квадратный корень");
169  result[12] = FPU_sqrt(100); // Квадратный корень при помощи блока FPU
170  if (result[12] != (float)10)
171  {
172  PRINT(" ОШИБКА: Операция Квадратный корень неуспешна");
173  FPU_DeInit(); // Сброс блока FPU.
174  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
175  return false;
176  }
177 
178 
179  PRINT(" Операция: 13 - Возведение в квадрат");
180  result[13] = FPU_pow2(10); // Квадрат при помощи блока FPU
181  if (result[13] != (float)100)
182  {
183  PRINT(" ОШИБКА: Операция Возведение в квадрат неуспешна");
184  FPU_DeInit(); // Сброс блока FPU.
185  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
186  return false;
187  }
188 
189 
190  PRINT(" Операция: 14 - Возведение в куб");
191  result[14] = FPU_pow3(10); // Куб при помощи блока FPU
192  if (result[14] != (float)1000)
193  {
194  PRINT(" ОШИБКА: Операция Возведение в куб неуспешна");
195  FPU_DeInit(); // Сброс блока FPU.
196  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
197 
198  return false;
199  }
200 
201 
202  PRINT(" Операция: 15 - Тангенс");
203  result[15] = FPU_tg(0.5); // тангенс при помощи блока FPU
204  if (result[15] != (float)5.4630249733E-1)
205  {
206  PRINT(" ОШИБКА: Операция Тангенс неуспешна");
207  FPU_DeInit(); // Сброс блока FPU.
208  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
209  return false;
210  }
211 
212  PRINT(" Операция: 16 - Арктангенс");
213  result[16] = FPU_atg(0.5); // Арктангенс при помощи блока FPU
214  if (result[16] != (float)4.63647604E-1)
215  {
216  PRINT(" ОШИБКА: Операция Аркангенс неуспешна");
217  FPU_DeInit(); // Сброс блока FPU.
218  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
219  return false;
220  }
221 
222  PRINT(" Операция: 17 - АркСинус");
223  result[17] = FPU_ASIN(0.5); // Арксинус при помощи блока FPU
224  if (result[17] != (float)5.2359879011E-1)
225  {
226  PRINT(" ОШИБКА: Операция АркСинус неуспешна");
227  FPU_DeInit(); // Сброс блока FPU.
228  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
229  return false;
230  }
231 
232  PRINT(" Операция: 18 - АркКосинус");
233  result[18] = FPU_ACOS(0.5); // АркКосинус при помощи блока FPU
234  if (result[18] != (float)1.04719758)
235  {
236  PRINT(" ОШИБКА: Операция АркКосинус неуспешна");
237  FPU_DeInit(); // Сброс блока FPU.
238  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
239  return false;
240  }
241 
242 
243  PRINT("Тест FPU успешно завершен");
244  FPU_DeInit(); // Сброс блока FPU.
245  DBG_TX_Flush(); // Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART
246  return true;
247 }
248 
#define PRINT(...)
Макросы для использования отладочного выхода
Definition: debug_uart.h:48
char dbg_buffer[256]
Definition: fpu_test.c:32
float FPU_atg(float A)
вычисление арктангенса
Definition: fpu.c:212
void FPU_Init(void)
Инициализация блока FPU.
Definition: fpu.c:51
Этот файл содержит структуры, макросы и функции необходимые необходимые для тестовой программы для ап...
float FPU_pow2(float A)
Возведение в квадрат при помощи блока FPU.
Definition: fpu.c:166
float FPU_ASIN(float A)
вычисление арксинуса
Definition: fpu.c:236
float FPU_SIN(float A)
вычисление синуса
Definition: fpu.c:110
void FPU_DeInit(void)
Сброс блока FPU.
Definition: fpu.c:40
float FPU_COS(float A)
вычисление косинуса
Definition: fpu.c:134
bool FPU_Test()
Тестирование модуля FPU.
Definition: fpu_test.c:40
float FPU_pow3(float A)
Возведение в куб при помощи блока FPU.
Definition: fpu.c:176
float FPU_tg(float A)
вычисление тангенса
Definition: fpu.c:188
float FPU_sqrt(float A)
Вычисление квадратного корня при помощи блока FPU.
Definition: fpu.c:156
float FPU_ADD(float A, float B)
Сложение двух чисел при помощи блока FPU.
Definition: fpu.c:65
float FPU_MUL(float A, float B)
умножение двух чисел при помощи блока FPU.
Definition: fpu.c:95
void DBG_TX_Flush(void)
Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART.
Definition: debug_uart.c:80
const uint32_t sys_freq
Definition: fpu_test.c:33
float FPU_ACOS(float A)
вычисление арккосинуса
Definition: fpu.c:260
float FPU_SUB(float A, float B)
Вычитание двух чисел при помощи блока FPU.
Definition: fpu.c:80