Начата работа с документацией
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
#include "stm32f4xx_matlab_gpio.h"
|
||||
|
||||
#include "modbus.h"
|
||||
|
||||
/**
|
||||
* @brief Write S-Function disc ports from MCU GPIOs.
|
||||
* @param disc - discrete array of S-Function. Outputs would be written from disc.
|
||||
* @details Функция для записи дискретных выходов S-Function из GPIO.
|
||||
После в @ref SIM_writeOutputs из disc формируются выходы S-Function.
|
||||
*/
|
||||
void GPIO_to_SFUNC(real_T* disc)
|
||||
{
|
||||
for (int i = 0; i < PORT_WIDTH; i++)
|
||||
@@ -23,6 +28,12 @@ void GPIO_to_SFUNC(real_T* disc)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Write S-Function inputs to MCU.
|
||||
* @param disc - discrete array of S-Function. Outputs would be written from disc.
|
||||
* @details Функция для считывания входов S-Function в МК.
|
||||
Можно абстрагироваться от считывания в GPIO и записывать напрямую в переменные МК.
|
||||
*/
|
||||
void SFUNC_to_GPIO(real_T* in)
|
||||
{
|
||||
// write pwm ctrl registers
|
||||
|
||||
@@ -5,7 +5,20 @@
|
||||
#include "simstruc.h"
|
||||
#include "mcu_wrapper_conf.h"
|
||||
|
||||
/**
|
||||
* @addtogroup GPIO_SIMULATOR
|
||||
* @ingroup MAIN_SIMULATOR
|
||||
* @brief Simulator for GPIO
|
||||
* @details Определяет взаимодействие портов МК и оболочки (S-Function)
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Функция для записи дискретных выходов S-Function из GPIO */
|
||||
void SFUNC_to_GPIO(real_T* disc);
|
||||
/* Функция для считывания входов S-Function в МК */
|
||||
void GPIO_to_SFUNC(real_T* in);
|
||||
|
||||
/** GPIO_SIMULATOR
|
||||
* @}
|
||||
*/
|
||||
#endif // _MATLAB_GPIO_H_
|
||||
@@ -3,6 +3,14 @@
|
||||
|
||||
#include "mcu_wrapper_conf.h"
|
||||
|
||||
/**
|
||||
* @addtogroup RCC_SIMULATOR
|
||||
* @ingroup MAIN_SIMULATOR
|
||||
* @brief Simulator for RCC and Clocks
|
||||
* @details Определ¤ет параметры тактирования МК.
|
||||
Содержит дефайны дл¤ скипа бесконечных циклов ожидающих выставление флагов
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
//#define SYSLCK_Value ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)
|
||||
@@ -15,8 +23,8 @@
|
||||
#define ABP2_Value (double)72000000;
|
||||
#define ABP2_TIMS_Value (double)72000000;
|
||||
|
||||
/* Эти дефайны добавлены в код stm32f4xx_hal_rcc.c, чтобы не попасть в бесконечный цикл */
|
||||
/* Мб перенести в MCU_Periph_Simulation(), но чет не хочется нагружать симуляцию этой херней*/
|
||||
/* Эти дефайны добавлены в код stm32f4xx_hal_rcc.c, чтобы не попасть в бесконечный цикл */
|
||||
/* Мб перенести в MCU_Periph_Simulation(), но чет не хочется нагружать симуляцию этой херней*/
|
||||
#define _RCC_SET_FLAG(__FLAG__) \
|
||||
if(((__FLAG__) >> 5U) == 1U) RCC->CR |= (1U << ((__FLAG__) & RCC_FLAG_MASK)); \
|
||||
else if(((__FLAG__) >> 5U) == 2U) RCC->BDCR |= (1U << ((__FLAG__) & RCC_FLAG_MASK)); \
|
||||
@@ -35,4 +43,8 @@ if(_condition_) _RCC_CLEAR_FLAG(_flag_)
|
||||
#define Clear_Flag_If_Its_Expected(_flag_, _condition_) \
|
||||
if(_condition_) _RCC_SET_FLAG(_flag_)
|
||||
|
||||
/** RCC_SIMULATOR
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif // _MATLAB_RCC_H_
|
||||
@@ -6,11 +6,11 @@
|
||||
|
||||
|
||||
|
||||
struct SlaveChannels Slave_Channels; // структура для связи и синхронизации таймеров
|
||||
struct SlaveChannels Slave_Channels; ///< структура для связи и синхронизации таймеров
|
||||
|
||||
|
||||
//----------------------TIMER BASE FUNCTIONS-----------------------//
|
||||
/* Базовая функция для симуляции таймера: она вызывается каждый шаг симуляции */
|
||||
/** Базовая функция для симуляции таймера: она вызывается каждый шаг симуляции */
|
||||
void TIM_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
|
||||
{
|
||||
Overflow_Check(TIMx, TIMS);
|
||||
@@ -36,7 +36,7 @@ switch (TIMx->SMCR & TIM_SMCR_SMS) // TIMER MODE
|
||||
}
|
||||
|
||||
}
|
||||
/* Счет таймера за один такт */
|
||||
/** Счет таймера за один такт */
|
||||
void TIMx_Count(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
|
||||
{
|
||||
if ((TIMx->CR1 & TIM_CR1_DIR) && TIMx->CR1) // up COUNTER and COUNTER ENABLE
|
||||
@@ -45,7 +45,7 @@ void TIMx_Count(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
|
||||
TIMS->tx_cnt += TIMS->tx_step / TIMx->PSC;
|
||||
TIMx->CNT = (uint32_t)TIMS->tx_cnt;
|
||||
}
|
||||
/* Проверка на переполнение и дальнейшая его обработка */
|
||||
/** Проверка на переполнение и дальнейшая его обработка */
|
||||
void Overflow_Check(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
|
||||
{
|
||||
// Переполнение таймера: сброс таймера и вызов прерывания
|
||||
@@ -70,7 +70,7 @@ void Overflow_Check(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
|
||||
|
||||
|
||||
//----------------------------CHANNELS-----------------------------//
|
||||
/* Симуляция каналов таймера */
|
||||
/** Симуляция каналов таймера */
|
||||
void Channels_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
|
||||
{
|
||||
CC_PWM_Ch1_Simulation(TIMx, TIMS);
|
||||
@@ -83,7 +83,7 @@ void Channels_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
|
||||
Write_OC_to_TRGO(TIMx, TIMS);
|
||||
}
|
||||
//-----------------CAPTURE COPMARE & PWM FUNCTIONS------------------//
|
||||
/* Выбор режима CaptureCompare или PWM и симуляция для каждого канала */
|
||||
/** Выбор режима CaptureCompare или PWM и симуляция для первого канала */
|
||||
void CC_PWM_Ch1_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
|
||||
{ // определяет режим канала
|
||||
switch (TIMx->CCMR1 & TIM_CCMR1_OC1M)
|
||||
@@ -125,6 +125,7 @@ switch (TIMx->CCMR1 & TIM_CCMR1_OC1M)
|
||||
|
||||
}
|
||||
}
|
||||
/** Выбор режима CaptureCompare или PWM и симуляция для второго канала */
|
||||
void CC_PWM_Ch2_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
|
||||
{ // определяет режим канала
|
||||
switch (TIMx->CCMR1 & TIM_CCMR1_OC2M)
|
||||
@@ -166,6 +167,7 @@ switch (TIMx->CCMR1 & TIM_CCMR1_OC2M)
|
||||
|
||||
}
|
||||
}
|
||||
/** Выбор режима CaptureCompare или PWM и симуляция для третьего канала */
|
||||
void CC_PWM_Ch3_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
|
||||
{ // определяет режим канала
|
||||
switch (TIMx->CCMR2 & TIM_CCMR1_OC1M)
|
||||
@@ -207,6 +209,7 @@ switch (TIMx->CCMR2 & TIM_CCMR1_OC1M)
|
||||
|
||||
}
|
||||
}
|
||||
/** Выбор режима CaptureCompare или PWM и симуляция для четвертого канала */
|
||||
void CC_PWM_Ch4_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
|
||||
{ // определяет режим канала
|
||||
switch (TIMx->CCMR2 & TIM_CCMR1_OC2M)
|
||||
@@ -248,7 +251,7 @@ switch (TIMx->CCMR2 & TIM_CCMR1_OC2M)
|
||||
|
||||
}
|
||||
}
|
||||
/* Запись каналов таймера в порты GPIO */
|
||||
/** Запись каналов таймера в порты GPIO */
|
||||
void Write_OC_to_GPIO(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
|
||||
{
|
||||
// write gpio pin if need
|
||||
@@ -322,7 +325,7 @@ void Write_OC_to_GPIO(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Запись результата compare в глабальную структуру с TRIGGER OUTPUT */
|
||||
/** Запись результата compare в глабальную структуру с TRIGGER OUTPUT */
|
||||
void Write_OC_to_TRGO(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
|
||||
{
|
||||
// write trigger output from OCxREF pin if need
|
||||
@@ -368,7 +371,7 @@ void Write_OC_to_TRGO(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
|
||||
|
||||
|
||||
//--------------------MISC (temporary) FUNCTIONS--------------------//
|
||||
/* Определение источника для запуска таймера в SLAVE MODE */
|
||||
/** Определение источника для запуска таймера в SLAVE MODE */
|
||||
void Slave_Mode_Check_Source(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
|
||||
{
|
||||
if (TIMx == TIM2)
|
||||
@@ -420,7 +423,7 @@ void Slave_Mode_Check_Source(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS)
|
||||
|
||||
|
||||
//------------------------SIMULINK FUNCTIONS------------------------//
|
||||
// Симулирование выбранных таймеров
|
||||
/** Симулирование выбранных через дефайн таймеров */
|
||||
void Simulate_TIMs(void)
|
||||
{
|
||||
#ifdef USE_TIM1
|
||||
@@ -466,7 +469,7 @@ void Simulate_TIMs(void)
|
||||
TIM_Simulation(TIM14, &tim14s);
|
||||
#endif
|
||||
}
|
||||
// Деинициализирование выбранных таймеров (вызывается в конце симуляции)
|
||||
/* Деинициализирование выбранных через дефайн таймеров (вызывается в конце симуляции) */
|
||||
void TIM_SIM_DEINIT(void)
|
||||
{
|
||||
#ifdef USE_TIM1
|
||||
@@ -555,7 +558,7 @@ void TIM8_BRK_TIM12_IRQHandler(void) {}
|
||||
void TIM8_TRG_COM_TIM14_IRQHandler(void) {}
|
||||
#endif
|
||||
|
||||
/* Вызов прерывания */
|
||||
/** Вызов прерывания */
|
||||
void call_IRQHandller(TIM_TypeDef* TIMx)
|
||||
{ // calling HANDLER
|
||||
if ((TIMx == TIM1) || (TIMx == TIM10))
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**************************************************************************
|
||||
Данный файл содержит объявления всякого для симуляции таймеров STM32F407xx.
|
||||
Данный файл содержит объявления всякого для симуляции таймеров STM32F407xx.
|
||||
|
||||
**************************************************************************/
|
||||
#ifndef _MATLAB_TIM_H_
|
||||
@@ -9,67 +9,79 @@
|
||||
#include "stm32f4xx_it.h"
|
||||
#include "mcu_wrapper_conf.h"
|
||||
|
||||
|
||||
/**
|
||||
* @addtogroup TIM_SIMULATOR
|
||||
* @ingroup MAIN_SIMULATOR
|
||||
* @brief Simulator for TIM
|
||||
* @details Дефайны и функции для симуляции таймеров.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/////////////////////////////---DEFINES---/////////////////////////////
|
||||
/* дефайн для сдвига между первой и второй половиной CCMRx регистров */
|
||||
#define TIM_OCMODE_SECOND_SHIFT TIM_CCMR1_OC2M_Pos - TIM_CCMR1_OC1M_Pos
|
||||
/** Дефайн для сдвига между первой и второй половиной CCMRx регистров */
|
||||
#define TIM_OCMODE_SECOND_SHIFT (TIM_CCMR1_OC2M_Pos - TIM_CCMR1_OC1M_Pos)
|
||||
|
||||
/* дефайны для проверки выводить ли канал на GPIO (настроен ли GPIO на альтернативную функцию) */
|
||||
#define Check_OC1_GPIO_Output(_tims_) (_tims_->Channels.OC1_GPIOx->MODER & (0b11<<(2*_tims_->Channels.OC1_PIN_SHIFT))) == (0b10<<(2*_tims_->Channels.OC1_PIN_SHIFT))
|
||||
#define Check_OC2_GPIO_Output(_tims_) (_tims_->Channels.OC2_GPIOx->MODER & (0b11<<(2*_tims_->Channels.OC2_PIN_SHIFT))) == (0b10<<(2*_tims_->Channels.OC2_PIN_SHIFT))
|
||||
#define Check_OC3_GPIO_Output(_tims_) (_tims_->Channels.OC3_GPIOx->MODER & (0b11<<(2*_tims_->Channels.OC3_PIN_SHIFT))) == (0b10<<(2*_tims_->Channels.OC3_PIN_SHIFT))
|
||||
#define Check_OC4_GPIO_Output(_tims_) (_tims_->Channels.OC4_GPIOx->MODER & (0b11<<(2*_tims_->Channels.OC4_PIN_SHIFT))) == (0b10<<(2*_tims_->Channels.OC4_PIN_SHIFT))
|
||||
/** Дефайн для проверки выводить ли канал на GPIO (настроен ли GPIO на альтернативную функцию) */
|
||||
#define Check_OCx_GPIO_Output(_tims_, _OCx_GPIOx_, _OCx_PIN_SHIFT_) (_tims_->Channels._OCx_GPIOx_->MODER & (0b11<<(2*_tims_->Channels._OCx_PIN_SHIFT_))) == (0b10<<(2*_tims_->Channels._OCx_PIN_SHIFT_))
|
||||
/** Дефайн для проверки выводить ли канал 1 на GPIO (настроен ли GPIO на альтернативную функцию) */
|
||||
#define Check_OC1_GPIO_Output(_tims_) Check_OCx_GPIO_Output(_tims_, OC1_GPIOx, OC1_PIN_SHIFT)
|
||||
/** Дефайн для проверки выводить ли канал 2 на GPIO (настроен ли GPIO на альтернативную функцию) */
|
||||
#define Check_OC2_GPIO_Output(_tims_) Check_OCx_GPIO_Output(_tims_, OC2_GPIOx, OC2_PIN_SHIFT)
|
||||
/** Дефайн для проверки выводить ли канал 3 на GPIO (настроен ли GPIO на альтернативную функцию) */
|
||||
#define Check_OC3_GPIO_Output(_tims_) Check_OCx_GPIO_Output(_tims_, OC3_GPIOx, OC3_PIN_SHIFT)
|
||||
/** Дефайн для проверки выводить ли канал 4 на GPIO (настроен ли GPIO на альтернативную функцию) */
|
||||
#define Check_OC4_GPIO_Output(_tims_) Check_OCx_GPIO_Output(_tims_, OC4_GPIOx, OC4_PIN_SHIFT)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
///////////////////////////---STRUCTURES---//////////////////////////
|
||||
/* Структура для управления Слейв Таймерами */
|
||||
/** Структура для управления Слейв Таймерами */
|
||||
struct SlaveChannels
|
||||
{
|
||||
unsigned TIM1_TRGO : 1;
|
||||
unsigned TIM2_TRGO : 1;
|
||||
unsigned TIM3_TRGO : 1;
|
||||
unsigned TIM4_TRGO : 1;
|
||||
unsigned TIM5_TRGO : 1;
|
||||
unsigned TIM6_TRGO : 1;
|
||||
unsigned TIM7_TRGO : 1;
|
||||
unsigned TIM8_TRGO : 1;
|
||||
unsigned TIM1_TRGO : 1; ///< Синган синхронизации таймера 1
|
||||
unsigned TIM2_TRGO : 1; ///< Синган синхронизации таймера 2
|
||||
unsigned TIM3_TRGO : 1; ///< Синган синхронизации таймера 3
|
||||
unsigned TIM4_TRGO : 1; ///< Синган синхронизации таймера 4
|
||||
unsigned TIM5_TRGO : 1; ///< Синган синхронизации таймера 5
|
||||
unsigned TIM6_TRGO : 1; ///< Синган синхронизации таймера 6
|
||||
unsigned TIM7_TRGO : 1; ///< Синган синхронизации таймера 7
|
||||
unsigned TIM8_TRGO : 1; ///< Синган синхронизации таймера 8
|
||||
|
||||
};
|
||||
|
||||
/* Структура для моделирования каналов таймера */
|
||||
/** Структура для моделирования каналов таймера */
|
||||
struct Channels_Sim
|
||||
{
|
||||
// связанные с каналами GPIO порты и пины
|
||||
GPIO_TypeDef *OC1_GPIOx;
|
||||
uint32_t OC1_PIN_SHIFT;
|
||||
// Каналы таймера
|
||||
unsigned OC1REF:1; ///< Первый канал
|
||||
unsigned OC2REF:1; ///< Второй канал
|
||||
unsigned OC3REF:1; ///< Третьий канал
|
||||
unsigned OC4REF:1; ///< Четвертый канал
|
||||
|
||||
GPIO_TypeDef *OC2_GPIOx;
|
||||
uint32_t OC2_PIN_SHIFT;
|
||||
// связанные с каналами GPIO порты и пины
|
||||
GPIO_TypeDef *OC1_GPIOx; ///< Порт первого канала
|
||||
uint32_t OC1_PIN_SHIFT; ///< Пин первого канала
|
||||
|
||||
GPIO_TypeDef *OC3_GPIOx;
|
||||
uint32_t OC3_PIN_SHIFT;
|
||||
GPIO_TypeDef *OC2_GPIOx; ///< Порт второго канала
|
||||
uint32_t OC2_PIN_SHIFT; ///< Пин второго канала
|
||||
|
||||
GPIO_TypeDef *OC4_GPIOx;
|
||||
uint32_t OC4_PIN_SHIFT;
|
||||
GPIO_TypeDef *OC3_GPIOx; ///< Порт третьего канала
|
||||
uint32_t OC3_PIN_SHIFT; ///< Пин третьего канала
|
||||
|
||||
GPIO_TypeDef *OC4_GPIOx; ///< Порт четвертого канала
|
||||
uint32_t OC4_PIN_SHIFT; ///< Пин четвертого канала
|
||||
|
||||
// Каналы таймера
|
||||
unsigned OC1REF:1;
|
||||
unsigned OC2REF:1;
|
||||
unsigned OC3REF:1;
|
||||
unsigned OC4REF:1;
|
||||
};
|
||||
|
||||
/* Структура для моделирования таймера */
|
||||
/** Структура для моделирования таймера */
|
||||
struct TIM_Sim
|
||||
{
|
||||
double tx_cnt; // счетчик таймера
|
||||
double tx_step; // шаг счета за один шаг симуляции
|
||||
int RELOAD; // буфер, если PRELOAD = 1
|
||||
struct Channels_Sim Channels; // структура для симуляции каналов
|
||||
double tx_cnt; ///< Счетчик таймера
|
||||
double tx_step; ///< Шаг счета за один шаг симуляции
|
||||
int RELOAD; ///< Буфер, если PRELOAD = 1
|
||||
struct Channels_Sim Channels; ///< Структура для симуляции каналов
|
||||
};
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -78,43 +90,46 @@ struct TIM_Sim
|
||||
///////////////////////////---FUNCTIONS---///////////////////////////
|
||||
|
||||
//----------------------TIMER BASE FUNCTIONS-----------------------//
|
||||
/* Базовая функция для симуляции таймера: она вызывается каждый шаг симуляции */
|
||||
/* Базовая функция для симуляции таймера: она вызывается каждый шаг симуляции */
|
||||
void TIM_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS);
|
||||
/* Счет таймера за один такт */
|
||||
/* Счет таймера за один такт */
|
||||
void TIMx_Count(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
|
||||
/* Проверка на переполнение и дальнейшая его обработка */
|
||||
/* Проверка на переполнение и дальнейшая его обработка */
|
||||
void Overflow_Check(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
|
||||
/* Вызов прерывания */
|
||||
/* Вызов прерывания */
|
||||
void call_IRQHandller(TIM_TypeDef *TIMx);
|
||||
//-----------------------------------------------------------------//
|
||||
|
||||
|
||||
//------------------------CHANNELS FUNCTIONS-----------------------//
|
||||
/* Симуляция каналов таймера */
|
||||
/* Симуляция каналов таймера */
|
||||
void Channels_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS);
|
||||
/*---------------- - CAPTURE COPMARE & PWM FUNCTIONS------------------*/
|
||||
/* Выбор режима CaptureCompare или PWM и симуляция для каждого канала */
|
||||
/* Выбор режима CaptureCompare или PWM и симуляция для каждого канала */
|
||||
void CC_PWM_Ch1_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
|
||||
void CC_PWM_Ch2_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
|
||||
void CC_PWM_Ch3_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
|
||||
void CC_PWM_Ch4_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
|
||||
/* Запись каналов таймера в порты GPIO */
|
||||
/* Запись каналов таймера в порты GPIO */
|
||||
void Write_OC_to_GPIO(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
|
||||
/* Запись результата compare в глабальную структуру с TRIGGER OUTPUT */
|
||||
/* Запись результата compare в глабальную структуру с TRIGGER OUTPUT */
|
||||
void Write_OC_to_TRGO(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
|
||||
//--------------------MISC (temporary) FUNCTIONS--------------------//
|
||||
/* Определение источника для запуска таймера в SLAVE MODE */
|
||||
/* Определение источника для запуска таймера в SLAVE MODE */
|
||||
void Slave_Mode_Check_Source(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS);
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
|
||||
//------------------------SIMULINK FUNCTIONS------------------------//
|
||||
// Симулирование выбранных таймеров
|
||||
// Симулирование выбранных таймеров
|
||||
void Simulate_TIMs(void);
|
||||
// Деинициализирование выбранных таймеров (вызывается в конце симуляции)
|
||||
// Деинициализирование выбранных таймеров (вызывается в конце симуляции)
|
||||
void TIM_SIM_DEINIT(void);
|
||||
//------------------------------------------------------------------//
|
||||
/** TIM_SIMULATOR
|
||||
* @}
|
||||
*/
|
||||
#endif // _MATLAB_TIM_H_
|
||||
|
||||
@@ -7,6 +7,13 @@
|
||||
**************************************************************************/
|
||||
#include "stm32f407xx_matlab.h"
|
||||
|
||||
/**
|
||||
* @addtogroup PERIPH_VARS_FOR_DEBUG
|
||||
* @ingroup STM_SIMULATION
|
||||
* @brief Varables of peripheral registers for debug watches
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
TIM_TypeDef* tim2 = TIM2;
|
||||
TIM_TypeDef* tim3 = TIM3;
|
||||
@@ -91,4 +98,9 @@ FSMC_Bank2_3_TypeDef* fsmc_bank2_3_r = FSMC_Bank2_3;
|
||||
FSMC_Bank4_TypeDef* fsmc_bank4_r = FSMC_Bank4;
|
||||
DBGMCU_TypeDef* dbgmcu = DBGMCU;
|
||||
USB_OTG_GlobalTypeDef* usb_otg_fs_periph = USB_OTG_FS;
|
||||
USB_OTG_GlobalTypeDef* usb_otg_hs_periph = USB_OTG_HS;
|
||||
USB_OTG_GlobalTypeDef* usb_otg_hs_periph = USB_OTG_HS;
|
||||
|
||||
|
||||
/** PERIPH_VARS_FOR_DEBUG
|
||||
* @}
|
||||
*/
|
||||
@@ -1,6 +1,6 @@
|
||||
/**************************************************************************
|
||||
Äàííûé ôàéë íàñòðàèâàåò ñòðóêòóðû äëÿ ñèìóëÿöèè ïåðèôåðèé, êîòîðûå âûáðàíû
|
||||
äåôàéíàìè â stm32f4xx_matlab_conf.h.
|
||||
Данный файл настраивает структуры для симуляции периферий, которые выбраны
|
||||
дефайнами в stm32f4xx_matlab_conf.h.
|
||||
|
||||
**************************************************************************/
|
||||
#include "mcu_wrapper_conf.h"
|
||||
@@ -24,9 +24,9 @@ void deInitialize_Periph_Sim(void)
|
||||
// MCU DEINIT
|
||||
void deInitialize_MCU(void)
|
||||
{
|
||||
// îáíóëåíèå ñòðóêòóðû, óïðàâëÿþùåé ïðîãðàììîé ÌÊ
|
||||
// обнуление структуры, управляющей программой МК
|
||||
memset(&hmcu, 0, sizeof(hmcu));
|
||||
// îáíóëåíèå ñòðóêòóð, ñèìóëèðóþùèõ ïàìÿòü ÌÊ
|
||||
// обнуление структур, симулирующих память МК
|
||||
memset(&MCU_MEM, 0, sizeof(MCU_MEM));
|
||||
memset(&MCU_CORTEX_MEM, 0, sizeof(MCU_CORTEX_MEM));
|
||||
memset(&DEBUG_MCU, 0, sizeof(DEBUG_MCU));
|
||||
@@ -87,7 +87,7 @@ void Init_TIM_SIM(void)
|
||||
{
|
||||
#ifdef USE_TIM1
|
||||
tim1s.tx_cnt = TIM1->CNT;
|
||||
tim1s.tx_step = SIM_Sample_Time * ABP2_TIMS_Value;
|
||||
tim1s.tx_step = hmcu.SIM_Sample_Time * ABP2_TIMS_Value;
|
||||
|
||||
tim1s.Channels.OC1_GPIOx = GPIOE;
|
||||
tim1s.Channels.OC1_PIN_SHIFT = 9;
|
||||
@@ -104,7 +104,7 @@ void Init_TIM_SIM(void)
|
||||
#endif
|
||||
#ifdef USE_TIM2
|
||||
tim2s.tx_cnt = TIM2->CNT;
|
||||
tim2s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
tim2s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
|
||||
tim2s.Channels.OC1_GPIOx = GPIOA;
|
||||
tim2s.Channels.OC1_PIN_SHIFT = 5;
|
||||
@@ -121,7 +121,7 @@ void Init_TIM_SIM(void)
|
||||
#endif
|
||||
#ifdef USE_TIM3
|
||||
tim3s.tx_cnt = TIM3->CNT;
|
||||
tim3s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
tim3s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
|
||||
tim3s.Channels.OC1_GPIOx = GPIOA;
|
||||
tim3s.Channels.OC1_PIN_SHIFT = 6;
|
||||
@@ -138,7 +138,7 @@ void Init_TIM_SIM(void)
|
||||
#endif
|
||||
#ifdef USE_TIM4
|
||||
tim4s.tx_cnt = TIM4->CNT;
|
||||
tim4s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
tim4s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
|
||||
tim4s.Channels.OC1_GPIOx = GPIOD;
|
||||
tim4s.Channels.OC1_PIN_SHIFT = 12;
|
||||
@@ -155,7 +155,7 @@ void Init_TIM_SIM(void)
|
||||
#endif
|
||||
#ifdef USE_TIM5
|
||||
tim5s.tx_cnt = TIM5->CNT;
|
||||
tim5s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
tim5s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
|
||||
tim5s.Channels.OC1_GPIOx = GPIOA;
|
||||
tim5s.Channels.OC1_PIN_SHIFT = 0;
|
||||
@@ -172,7 +172,7 @@ void Init_TIM_SIM(void)
|
||||
#endif
|
||||
#ifdef USE_TIM6
|
||||
tim6s.tx_cnt = TIM6->CNT;
|
||||
tim6s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
tim6s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
|
||||
tim6s.Channels.OC1_GPIOx = GPIOA;
|
||||
tim6s.Channels.OC1_PIN_SHIFT = 6;
|
||||
@@ -189,7 +189,7 @@ void Init_TIM_SIM(void)
|
||||
#endif
|
||||
#ifdef USE_TIM7
|
||||
tim7s.tx_cnt = TIM7->CNT;
|
||||
tim7s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
tim7s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
|
||||
tim7s.Channels.OC1_GPIOx = GPIOA;
|
||||
tim7s.Channels.OC1_PIN_SHIFT = 6;
|
||||
@@ -206,7 +206,7 @@ void Init_TIM_SIM(void)
|
||||
#endif
|
||||
#ifdef USE_TIM8
|
||||
tim8s.tx_cnt = TIM8->CNT;
|
||||
tim8s.tx_step = SIM_Sample_Time * ABP2_TIMS_Value;
|
||||
tim8s.tx_step = hmcu.SIM_Sample_Time * ABP2_TIMS_Value;
|
||||
|
||||
tim8s.Channels.OC1_GPIOx = GPIOA;
|
||||
tim8s.Channels.OC1_PIN_SHIFT = 6;
|
||||
@@ -223,7 +223,7 @@ void Init_TIM_SIM(void)
|
||||
#endif
|
||||
#ifdef USE_TIM9
|
||||
tim9s.tx_cnt = TIM9->CNT;
|
||||
tim9s.tx_step = SIM_Sample_Time * ABP2_TIMS_Value;
|
||||
tim9s.tx_step = hmcu.SIM_Sample_Time * ABP2_TIMS_Value;
|
||||
|
||||
tim9s.Channels.OC1_GPIOx = GPIOA;
|
||||
tim9s.Channels.OC1_PIN_SHIFT = 6;
|
||||
@@ -240,7 +240,7 @@ void Init_TIM_SIM(void)
|
||||
#endif
|
||||
#ifdef USE_TIM10
|
||||
tim10s.tx_cnt = TIM10->CNT;
|
||||
tim10s.tx_step = SIM_Sample_Time * ABP2_TIMS_Value;
|
||||
tim10s.tx_step = hmcu.SIM_Sample_Time * ABP2_TIMS_Value;
|
||||
|
||||
tim10s.Channels.OC1_GPIOx = GPIOA;
|
||||
tim10s.Channels.OC1_PIN_SHIFT = 6;
|
||||
@@ -257,7 +257,7 @@ void Init_TIM_SIM(void)
|
||||
#endif
|
||||
#ifdef USE_TIM11
|
||||
tim11s.tx_cnt = TIM11->CNT;
|
||||
tim11s.tx_step = SIM_Sample_Time * ABP2_TIMS_Value;
|
||||
tim11s.tx_step = hmcu.SIM_Sample_Time * ABP2_TIMS_Value;
|
||||
|
||||
tim11s.Channels.OC1_GPIOx = GPIOA;
|
||||
tim11s.Channels.OC1_PIN_SHIFT = 6;
|
||||
@@ -274,7 +274,7 @@ void Init_TIM_SIM(void)
|
||||
#endif
|
||||
#ifdef USE_TIM12
|
||||
tim12s.tx_cnt = TIM12->CNT;
|
||||
tim12s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
tim12s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
|
||||
tim12s.Channels.OC1_GPIOx = GPIOA;
|
||||
tim12s.Channels.OC1_PIN_SHIFT = 6;
|
||||
@@ -291,7 +291,7 @@ void Init_TIM_SIM(void)
|
||||
#endif
|
||||
#ifdef USE_TIM13
|
||||
tim13s.tx_cnt = TIM13->CNT;
|
||||
tim13s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
tim13s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
|
||||
tim13s.Channels.OC1_GPIOx = GPIOA;
|
||||
tim13s.Channels.OC1_PIN_SHIFT = 6;
|
||||
@@ -308,7 +308,7 @@ void Init_TIM_SIM(void)
|
||||
#endif
|
||||
#ifdef USE_TIM14
|
||||
tim14s.tx_cnt = TIM14->CNT;
|
||||
tim14s.tx_step = SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
tim14s.tx_step = hmcu.SIM_Sample_Time * ABP1_TIMS_Value;
|
||||
|
||||
tim14s.Channels.OC1_GPIOx = GPIOA;
|
||||
tim14s.Channels.OC1_PIN_SHIFT = 6;
|
||||
|
||||
@@ -1,10 +1,30 @@
|
||||
/**************************************************************************
|
||||
Äŕííűé ôŕéë íĺîáőîäčě äë˙ îďđĺäĺëĺíč˙, ęŕęóţ ďĺđčôĺđčţ íŕîáőîäčěî áóäĺň
|
||||
ńčěóëčđîâŕňü.
|
||||
Данный файл необходим для определения, какую периферию наобходимо будет
|
||||
симулировать.
|
||||
|
||||
**************************************************************************/
|
||||
#ifndef _MATLAB_SETUP_H_
|
||||
#define _MATLAB_SETUP_H_
|
||||
#ifndef _MATLAB_CONF_H_
|
||||
#define _MATLAB_CONF_H_
|
||||
/**
|
||||
* @addtogroup STM_SIMULATION
|
||||
* @brief Stuff for simulating STM32 in MATLAB
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup MAIN_SIMULATOR
|
||||
* @ingroup STM_SIMULATION
|
||||
* @brief Stuff for configuring, initializing and deinitializing simulator
|
||||
* @details Здесь дефайнами задается используемая периферия и
|
||||
подключаются файлы, необходимые для её симуляции
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup SIMULATOR_CONF
|
||||
* @ingroup MAIN_SIMULATOR
|
||||
* @brief Configurations for simulator to simulating MCU
|
||||
* @details Здесь дефайнами задается периферия для симуляции
|
||||
* @{
|
||||
*/
|
||||
|
||||
// DEFINES (UNCOMMENT WHAT YOU WILL SIMULATE)
|
||||
// TIMS
|
||||
@@ -38,15 +58,26 @@
|
||||
//#define USE_TIM8_TRG_COM_TIM14_HANDLER
|
||||
|
||||
|
||||
/** SIMULATOR_CONF
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @addtogroup MAIN_SIMULATOR
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------//
|
||||
/*------------------------------FUNCTIONS--------------------------------*/
|
||||
void deInitialize_Periph_Sim(void);
|
||||
void deInitialize_MCU(void);
|
||||
// MCU PERIPH INIT
|
||||
void Initialize_Periph_Sim(void);
|
||||
// MCU PERIPH DEINIT
|
||||
void deInitialize_Periph_Sim(void);
|
||||
// MCU DEINIT
|
||||
void deInitialize_MCU(void);
|
||||
|
||||
|
||||
#include "stm32f4xx_matlab_rcc.h"
|
||||
@@ -60,7 +91,7 @@ void Initialize_Periph_Sim(void);
|
||||
// defined(USE_TIM11) || defined(USE_TIM12) || defined(USE_TIM13) || defined(USE_TIM14)
|
||||
#include "stm32f4xx_matlab_tim.h"
|
||||
|
||||
// CODE
|
||||
// Init timersfor simulation
|
||||
void Init_TIM_SIM(void);
|
||||
|
||||
#ifdef USE_TIM1
|
||||
@@ -108,4 +139,8 @@ extern struct TIM_Sim tim14s;
|
||||
/*-------------------------------TIMERS----------------------------------*/
|
||||
//-----------------------------------------------------------------------//
|
||||
|
||||
#endif // _MATLAB_SETUP_H_
|
||||
/** MAIN_SIMULATOR
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif // _MATLAB_CONF_H_
|
||||
|
||||
Reference in New Issue
Block a user