Загрузка данных


#include "MDR32F9Qx_config.h"
#include "MDR32Fx.h"
#include "MDR32F9Qx_timer.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_port.h"

TIMER_CntInitTypeDef sTIM_CntInit;
TIMER_ChnInitTypeDef sTIM_ChnInit;
TIMER_ChnOutInitTypeDef sTIM_ChnOutInit;
PORT_InitTypeDef PORT_InitStructure;

void delay_loop(uint32_t t)
{
    while (t--)
    {
        __NOP();
    }
}

int main(void)
{
    uint16_t value1 = 0;
    uint16_t value2 = 2000;
    int8_t dir1 = 1;
    int8_t dir2 = 1;

    RST_CLK_PCLKcmd(RST_CLK_PCLK_TIMER3, ENABLE);
    RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE);

    PORT_StructInit(&PORT_InitStructure);
    PORT_InitStructure.PORT_Pin   = PORT_Pin_0 | PORT_Pin_1 | PORT_Pin_2 | PORT_Pin_3;
    PORT_InitStructure.PORT_OE    = PORT_OE_OUT;
    PORT_InitStructure.PORT_FUNC  = PORT_FUNC_ALTER;
    PORT_InitStructure.PORT_MODE  = PORT_MODE_DIGITAL;
    PORT_InitStructure.PORT_SPEED = PORT_SPEED_FAST;
    PORT_Init(MDR_PORTB, &PORT_InitStructure);

    TIMER_CntStructInit(&sTIM_CntInit);
    sTIM_CntInit.TIMER_Prescaler        = 0;
    sTIM_CntInit.TIMER_Period           = 4000;
    sTIM_CntInit.TIMER_CounterMode      = TIMER_CntMode_ClkFixedDir;
    sTIM_CntInit.TIMER_CounterDirection = TIMER_CntDir_Up;
    sTIM_CntInit.TIMER_ARR_UpdateMode   = TIMER_ARR_Update_Immediately;
    TIMER_CntInit(MDR_TIMER3, &sTIM_CntInit);

    TIMER_ChnStructInit(&sTIM_ChnInit);
    sTIM_ChnInit.TIMER_CH_Mode       = TIMER_CH_MODE_PWM;
    sTIM_ChnInit.TIMER_CH_REF_Format = TIMER_CH_REF_Format6;

    sTIM_ChnInit.TIMER_CH_Number = TIMER_CHANNEL1;
    TIMER_ChnInit(MDR_TIMER3, &sTIM_ChnInit);

    sTIM_ChnInit.TIMER_CH_Number = TIMER_CHANNEL2;
    TIMER_ChnInit(MDR_TIMER3, &sTIM_ChnInit);

    TIMER_ChnOutStructInit(&sTIM_ChnOutInit);
    sTIM_ChnOutInit.TIMER_CH_DirOut_Polarity = TIMER_CHOPolarity_NonInverted;
    sTIM_ChnOutInit.TIMER_CH_DirOut_Source   = TIMER_CH_OutSrc_REF;
    sTIM_ChnOutInit.TIMER_CH_DirOut_Mode     = TIMER_CH_OutMode_Output;

    sTIM_ChnOutInit.TIMER_CH_NegOut_Polarity = TIMER_CHOPolarity_NonInverted;
    sTIM_ChnOutInit.TIMER_CH_NegOut_Source   = TIMER_CH_OutSrc_REF;
    sTIM_ChnOutInit.TIMER_CH_NegOut_Mode     = TIMER_CH_OutMode_Output;

    sTIM_ChnOutInit.TIMER_CH_Number = TIMER_CHANNEL1;
    TIMER_ChnOutInit(MDR_TIMER3, &sTIM_ChnOutInit);

    sTIM_ChnOutInit.TIMER_CH_Number = TIMER_CHANNEL2;
    TIMER_ChnOutInit(MDR_TIMER3, &sTIM_ChnOutInit);

    TIMER_BRGInit(MDR_TIMER3, TIMER_HCLKdiv1);
    TIMER_Cmd(MDR_TIMER3, ENABLE);

    while (1)
    {
        TIMER_SetChnCompare(MDR_TIMER3, TIMER_CHANNEL1, value1);
        TIMER_SetChnCompare(MDR_TIMER3, TIMER_CHANNEL2, value2);

        if (dir1 == 1)
        {
            value1 += 50;
            if (value1 >= 4000)
            {
                value1 = 4000;
                dir1 = -1;
            }
        }
        else
        {
            if (value1 > 50)
                value1 -= 50;
            else
            {
                value1 = 0;
                dir1 = 1;
            }
        }

        if (dir2 == 1)
        {
            value2 += 50;
            if (value2 >= 4000)
            {
                value2 = 4000;
                dir2 = -1;
            }
        }
        else
        {
            if (value2 > 50)
                value2 -= 50;
            else
            {
                value2 = 0;
                dir2 = 1;
            }
        }

        delay_loop(30000);
    }
}