Работает
Была исправлена симуляция таймеров и его статус регситра
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
#include "mcu_wrapper_conf.h"
|
||||
#ifdef ARM_MATH_LOOPUNROLL
|
||||
#include "dsp/none.h"
|
||||
#endif
|
||||
|
||||
#define __disable_irq()
|
||||
|
||||
|
||||
@@ -131,13 +131,14 @@ void CC_PWM_Ch1_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
|
||||
}
|
||||
if (TIMx->DIER & TIM_IT_CC1)
|
||||
{
|
||||
TIMx->SR |= TIM_SR_CC1IF;
|
||||
if (((TIMS->tx_cnt - TIMS->tx_step) < TIMx->CCR1) && (TIMS->tx_cnt >= TIMx->CCR1))
|
||||
{
|
||||
TIMx->SR |= TIM_SR_CC1IF;
|
||||
TIM_Call_IRQHandller(TIMx);
|
||||
}
|
||||
else if (((TIMS->tx_cnt - TIMS->tx_step) > TIMx->CCR1) && (TIMS->tx_cnt <= TIMx->CCR1))
|
||||
{
|
||||
TIMx->SR |= TIM_SR_CC1IF;
|
||||
TIM_Call_IRQHandller(TIMx);
|
||||
}
|
||||
}
|
||||
@@ -184,20 +185,21 @@ void CC_PWM_Ch2_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
|
||||
}
|
||||
if (TIMx->DIER & TIM_IT_CC2)
|
||||
{
|
||||
TIMx->SR |= TIM_SR_CC2IF;
|
||||
if (((TIMS->tx_cnt - TIMS->tx_step) < TIMx->CCR2) && (TIMS->tx_cnt >= TIMx->CCR2))
|
||||
{
|
||||
TIMx->SR |= TIM_SR_CC2IF;
|
||||
TIM_Call_IRQHandller(TIMx);
|
||||
}
|
||||
else if (((TIMS->tx_cnt - TIMS->tx_step) > TIMx->CCR2) && (TIMS->tx_cnt <= TIMx->CCR2))
|
||||
{
|
||||
TIMx->SR |= TIM_SR_CC2IF;
|
||||
TIM_Call_IRQHandller(TIMx);
|
||||
}
|
||||
}
|
||||
}
|
||||
void CC_PWM_Ch3_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
|
||||
{ // определяет режим канала
|
||||
switch (TIMx->CCMR2 & TIM_CCMR1_OC1M)
|
||||
switch (TIMx->CCMR2 & TIM_CCMR2_OC3M)
|
||||
{
|
||||
case (TIM_OCMODE_ACTIVE): // ACTIVE mode
|
||||
if (abs(TIMx->CNT - TIMx->CCR3) < 2*TIMS->tx_step)
|
||||
@@ -237,20 +239,21 @@ void CC_PWM_Ch3_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
|
||||
}
|
||||
if (TIMx->DIER & TIM_IT_CC3)
|
||||
{
|
||||
TIMx->SR |= TIM_SR_CC3IF;
|
||||
if (((TIMS->tx_cnt - TIMS->tx_step) < TIMx->CCR3) && (TIMS->tx_cnt >= TIMx->CCR3))
|
||||
{
|
||||
TIMx->SR |= TIM_SR_CC3IF;
|
||||
TIM_Call_IRQHandller(TIMx);
|
||||
}
|
||||
else if (((TIMS->tx_cnt - TIMS->tx_step) > TIMx->CCR3) && (TIMS->tx_cnt <= TIMx->CCR3))
|
||||
{
|
||||
TIMx->SR |= TIM_SR_CC3IF;
|
||||
TIM_Call_IRQHandller(TIMx);
|
||||
}
|
||||
}
|
||||
}
|
||||
void CC_PWM_Ch4_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
|
||||
{ // определяет режим канала
|
||||
switch (TIMx->CCMR2 & TIM_CCMR1_OC2M)
|
||||
switch (TIMx->CCMR2 & TIM_CCMR2_OC4M)
|
||||
{
|
||||
case ((TIM_OCMODE_ACTIVE) << (TIM_OCMODE_SECOND_SHIFT)): // ACTIVE mode
|
||||
if (abs(TIMx->CNT - TIMx->CCR4) < 2*TIMS->tx_step)
|
||||
@@ -290,13 +293,14 @@ void CC_PWM_Ch4_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS)
|
||||
}
|
||||
if (TIMx->DIER & TIM_IT_CC4)
|
||||
{
|
||||
TIMx->SR |= TIM_SR_CC4IF;
|
||||
if (((TIMS->tx_cnt - TIMS->tx_step) < TIMx->CCR4) && (TIMS->tx_cnt >= TIMx->CCR4))
|
||||
{
|
||||
TIMx->SR |= TIM_SR_CC4IF;
|
||||
TIM_Call_IRQHandller(TIMx);
|
||||
}
|
||||
else if (((TIMS->tx_cnt - TIMS->tx_step) > TIMx->CCR4) && (TIMS->tx_cnt <= TIMx->CCR4))
|
||||
{
|
||||
TIMx->SR |= TIM_SR_CC4IF;
|
||||
TIM_Call_IRQHandller(TIMx);
|
||||
}
|
||||
}
|
||||
@@ -649,9 +653,13 @@ __weak void TIM8_BRK_TIM12_IRQHandler(void) {}
|
||||
__weak void TIM8_TRG_COM_TIM14_IRQHandler(void) {}
|
||||
//#endif
|
||||
|
||||
|
||||
|
||||
/* Вызов прерывания */
|
||||
void TIM_Call_IRQHandller(TIM_TypeDef* TIMx)
|
||||
{ // calling HANDLER
|
||||
SR_STORE(TIMx, SR);
|
||||
|
||||
if ((TIMx == TIM1) || (TIMx == TIM10))
|
||||
TIM1_UP_TIM10_IRQHandler();
|
||||
else if (TIMx == TIM2)
|
||||
@@ -676,5 +684,7 @@ void TIM_Call_IRQHandller(TIM_TypeDef* TIMx)
|
||||
TIM8_BRK_TIM12_IRQHandler();
|
||||
else if ((TIMx == TIM8) || (TIMx == TIM14))
|
||||
TIM8_TRG_COM_TIM14_IRQHandler();
|
||||
|
||||
SR_PROCESS(TIMx, SR);
|
||||
}
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
@@ -147,4 +147,14 @@ static void ADC_SIM_DEINIT() {}
|
||||
//-----------------------------------------------------------------------//
|
||||
|
||||
|
||||
|
||||
|
||||
#define SR_STORE(periph, srname) \
|
||||
uint32_t sr_origin = periph->srname; \
|
||||
uint32_t sr_new = periph->srname;
|
||||
|
||||
#define SR_PROCESS(periph, srname) \
|
||||
sr_new = sr_origin & periph->srname; \
|
||||
periph->srname = sr_new;
|
||||
|
||||
#endif // _MATLAB_SETUP_H_
|
||||
|
||||
Reference in New Issue
Block a user