diplom/beta/app_wrapper.c
Razvalyaev 6ddd340934 проект перенесен на мою библиотеку
+самое начало работы презентация
2025-06-15 02:42:43 +03:00

139 lines
3.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
**************************************************************************
* @file app_wrapper.c
* @brief Код для из приложения МК для симуляции.
**************************************************************************
**************************************************************************/
#include "mcu_wrapper_conf.h"
// Includes START
#include "upp.h"
#include "main.h"
// Inlcudes END
// Dummy functions START
uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) {}
void SystemClock_Config(void) {}
void Error_Handler(void) {}
// Dummy functions END
void app_init(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
upp_init();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
//while (1)
//{
// upp_main();
// /* USER CODE END WHILE */
// /* USER CODE BEGIN 3 */
//}
/* USER CODE END 3 */
}
void app_step(void)
{
upp_main();
}
void app_writeOutputBuffer(real_T* disc)
{
for (int i = 0; i < PORT_WIDTH; i++)
{
if (GPIOA->ODR & (1 << i))
{
disc[i] = 1;
}
if (GPIOB->ODR & (1 << i))
{
disc[PORT_WIDTH + i] = 1;
}
}
disc[2 * PORT_WIDTH + 0] = phase_A.ctrl.angle.delay_us;
disc[2 * PORT_WIDTH + 1] = (uint16_t)((uint16_t)TIMER->CNT - phase_A.ctrl.angle.start_delay_tick);
disc[2 * PORT_WIDTH + 2] = phase_A.ctrl.angle.start_delay_tick;
disc[2 * PORT_WIDTH + 3] = TIMER->CNT;
}
void app_readInputs(real_T* in)
{
#define detect_front(_in_numb_, _var_, _val_) { \
if ((in[_in_numb_] > 0.5) && (prev_in[_in_numb_] <= 0.5)) \
{ \
_var_ = _val_; \
} }
#define detect_rise(_in_numb_, _var_, _val_) { \
if ((in[_in_numb_] < 0.5) && (prev_in[_in_numb_] >= 0.5)) \
{ \
_var_ = _val_; \
} }
static real_T prev_in[IN_PORT_WIDTH];
detect_front(0, phase_A.zc_detector.f.EXTIZeroCrossDetected, 1);
detect_rise(0, phase_A.zc_detector.f.EXTIZeroCrossDetected, 1);
detect_front(1, phase_B.zc_detector.f.EXTIZeroCrossDetected, 1);
detect_rise(1, phase_B.zc_detector.f.EXTIZeroCrossDetected, 1);
detect_front(2, phase_C.zc_detector.f.EXTIZeroCrossDetected, 1);
detect_rise(2, phase_C.zc_detector.f.EXTIZeroCrossDetected, 1);
detect_front(3, Upp.GoSafe, 1);
detect_rise(3, Upp.GoSafe, 0);
detect_front(4, Upp.Prepare, 1);
detect_rise(4, Upp.Prepare, 0);
detect_front(5, Upp.ForceStop, 1);
detect_rise(5, Upp.ForceStop, 0);
detect_front(6, Upp.ForceDisconnect, 1);
detect_rise(6, Upp.ForceDisconnect, 0);
Upp.sine_freq = in[7];
Upp.Duration = in[8];
for (int i = 0; i < IN_PORT_WIDTH; i++)
{
prev_in[i] = in[i];
}
}